# leetcode_stu
**Repository Path**: Y-aong/leetcode_stu
## Basic Information
- **Project Name**: leetcode_stu
- **Description**: 学习算法
- **Primary Language**: Unknown
- **License**: Artistic-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-12
- **Last Updated**: 2026-03-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LeetCode AI Assistant
一个基于 Vue 3 + Flask 后端的 AI 辅助系统,专为 LeetCode 题目解答和学习设计。
**主页**
**详情**
## 项目概述
本项目是一个智能 AI 助手,能够:
- 识别用户意图,区分闲聊、LeetCode 问题和其他问题
- 针对 LeetCode 问题提供详细的解答和思路
- 利用 RAG(检索增强生成)技术,结合向量数据库和关系数据库
- 实时流式输出 AI 回复,提升用户体验
## 系统架构
### 整体流程
```mermaid
flowchart TD
A[用户输入] --> B[意图识别]
B -->|闲聊| C[Agent 直接回复]
B -->|LeetCode 问题| D[RAG 流程]
B -->|其他问题| E[通用问答]
D --> F[查询向量数据库]
F -->|存在相同问题| G[返回缓存答案]
F -->|不存在相同问题| H[构建增强 Prompt]
H --> I[题目描述]
H --> J[推荐相关题目]
H --> K[已有思路]
H --> L[已有疑问]
H --> M[题目类型]
H --> N[用户代码]
I --> O[调用大模型生成答案]
J --> O
K --> O
L --> O
M --> O
N --> O
O --> P[答案后处理]
P --> Q[存入向量数据库]
P --> R[存入关系数据库]
Q --> S[流式返回给用户]
R --> S
G --> S
C --> S
E --> S
```
## 技术栈
### 前端
- Vue 3
- Element Plus
- TypeScript
- SCSS
### 后端
- Flask
- Python
- 大语言模型 API
- 向量数据库(Chroma)
- 关系数据库
## 功能特性
1. **智能意图识别**:自动区分用户输入的意图类型
2. **RAG 增强生成**:结合向量数据库和关系数据库,提供更准确的答案
3. **流式输出**:实时逐字呈现 AI 回复,提升用户体验
4. **历史记录管理**:支持查看和删除对话历史
5. **全屏模式**:支持全屏展示对话界面,方便查看完整内容
6. **响应式设计**:适配不同屏幕尺寸
## 快速开始
### 前端启动
1. 安装依赖
```bash
npm install
```
2. 启动开发服务器
```bash
npm run dev
```
3. 构建生产版本
```bash
npm run build
```
### 后端启动
1. 安装依赖
```bash
pip install -r requirements.txt
```
2. 启动 Flask 服务器
```bash
python app.py
```
## 核心组件
### 1. AiDialog 组件
- 负责展示 AI 对话界面
- 支持流式输出
- 提供历史记录管理
- 支持全屏模式
### 2. 意图识别模块
- 识别用户输入的意图类型
- 路由到相应的处理流程
### 3. RAG 模块
- 查询向量数据库
- 构建增强 Prompt
- 调用大模型生成答案
- 处理和存储结果
## API 接口
### 1. AI 对话接口
- **POST** `/ai/chat/stream`
- 参数:`{ message: string, question_id: string }`
- 响应:流式 SSE 事件
### 2. 历史记录接口
- **POST** `/ai/chat/history`
- 参数:`{ question_id: string }`
- 响应:`{ success: boolean, data: Array, meta: Object }`
### 3. 删除历史记录接口
- **DELETE** `/ai/chat/history`
- 参数:`{ id: string, question_id: string }`
- 响应:`{ success: boolean }`
### 4. 操作反馈接口
- **POST** `/ai/chat/action`
- 参数:`{ action: string, message_id: string, question_id: string }`
- 响应:`{ success: boolean }`
## 项目结构
```
├── src/
│ ├── api/ # API 接口定义
│ ├── components/ # 组件
│ │ ├── ai/ # AI 相关组件
│ │ ├── common/ # 通用组件
│ │ ├── layout/ # 布局组件
│ │ └── question/ # 题目相关组件
│ ├── composables/ # 组合式函数
│ ├── router/ # 路由
│ ├── stores/ # 状态管理
│ ├── utils/ # 工具函数
│ ├── views/ # 页面
│ ├── App.vue # 根组件
│ └── main.ts # 入口文件
├── public/ # 静态资源
├── package.json # 依赖配置
├── vite.config.ts # Vite 配置
└── README.md # 项目说明
```
## 使用指南
1. **访问题目详情页**:点击题目列表中的题目进入详情页
2. **打开 AI 对话**:点击页面右侧的 "问问AI" 按钮
3. **输入问题**:在输入框中输入您的问题
4. **查看回复**:AI 会实时流式输出回复
5. **管理历史记录**:在全屏模式下查看和删除历史记录
6. **全屏模式**:点击右上角的全屏按钮进入全屏模式
## 示例使用
### 示例 1:询问 LeetCode 题目
**用户输入**:
```
两数之和的解法
```
**AI 回复**:
```
# 两数之和问题解法
## 问题描述
给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
## 解法思路
### 方法一:暴力枚举
- 时间复杂度:O(n²)
- 空间复杂度:O(1)
- 思路:双重循环遍历数组,寻找和为 target 的两个数
### 方法二:哈希表
- 时间复杂度:O(n)
- 空间复杂度:O(n)
- 思路:使用哈希表存储已遍历过的元素及其索引,每次遍历新元素时,检查 target - 当前元素是否在哈希表中
## 代码实现
```python
def twoSum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
return []
```
## 相关题目
1. 三数之和
2. 四数之和
3. 两数之和 II - 输入有序数组
```
### 示例 2:闲聊
**用户输入**:
```
你好
```
**AI 回复**:
```
你好!我是你的 LeetCode AI 助手,有什么可以帮助你的吗?
你可以:
1. 询问 LeetCode 题目的解法
2. 讨论算法思路
3. 分享你的代码,我可以帮你分析
4. 随便聊聊天
```
## 注意事项
1. 确保后端服务正在运行
2. 确保向量数据库和关系数据库已正确配置
3. 大语言模型 API 需要正确配置 API 密钥
4. 对于复杂问题,AI 可能需要较长时间生成答案
## 未来规划
1. 支持更多编程语言的代码分析
2. 增加代码执行和测试功能
3. 提供更详细的题目解析和视频讲解
4. 支持用户个性化配置
5. 增加社区功能,允许用户分享和讨论解决方案
## 贡献
欢迎提交 Issue 和 Pull Request!
## 许可证
MIT License