项目背景
作为一个经常刷 LeetCode 的开发者,我一直在思考如何提高算法学习效率。面对一道新题时,往往需要:
- 判断题目类型
- 回忆相关解题模板
- 设计数据结构和算法
- 编写代码并分析复杂度
- 考虑边界情况和易错点
这个过程对于初学者来说门槛很高,即使是有经验的开发者也需要花费不少时间。于是我想到,能不能用 AI 来辅助完成这些工作?
为什么要做算法题解生成器
- 提高学习效率:快速获取专业的题解分析,节省思考时间
- 标准化输出:确保题解包含完整的复杂度分析、边界样例和易错点
- 知识沉淀:通过 RAG 技术整合常见算法模板,形成知识库
- 辅助面试准备:帮助开发者快速复习算法知识,应对技术面试
技术栈
- FastAPI:高性能 Python Web 框架,用于构建 API 服务
- DeepSeek:开源大语言模型,提供代码生成能力
- LangChain:构建 LLM 应用的框架,提供文档处理和 RAG 能力
- Mangum:AWS Lambda/API Gateway 适配器,支持 Vercel Serverless 部署
- Pydantic:数据验证和序列化
系统架构
1 | 用户请求 → FastAPI → 算法题解生成器 → DeepSeek API |
核心流程
- 输入处理:接收算法题描述、语言选择和难度级别
- RAG 检索:根据题目描述从知识库中检索相关算法模板
- Prompt 构建:结合检索结果构建结构化提示词
- 模型调用:调用 DeepSeek API 生成题解
- 结果解析:解析 JSON 响应,确保字段完整
- 结果返回:返回标准化的题解数据
RAG 知识库设计
我整理了 13 种常见算法题型的详细模板,包括:
| 题型 | 典型题目 | 核心思路 |
|---|---|---|
| 数组与哈希表 | 两数之和 | O(1) 查找 |
| 双指针 | 三数之和 | 两端向中间移动 |
| 滑动窗口 | 最长无重复子串 | 动态维护窗口边界 |
| 栈与单调栈 | 每日温度 | 维护单调序列 |
| 队列与优先队列 | Top K 问题 | 堆排序 |
| 二分查找 | 搜索旋转数组 | 对数时间查找 |
| 动态规划 | 爬楼梯 | 状态转移方程 |
| 贪心算法 | 跳跃游戏 | 局部最优选择 |
| DFS/BFS | 岛屿数量 | 图遍历 |
| 图论基础 | 拓扑排序 | 课程表问题 |
| 回溯算法 | 全排列 | 枚举所有解 |
| 前缀和 | 区域和检索 | 预处理优化 |
| 并查集 | 省份数量 | 动态连通性 |
每个模板包含:题型特点、常见关键词、适用场景、核心思路、常用数据结构、复杂度规律、典型题目和易错点。
Prompt 设计
我设计了严格的结构化 Prompt,确保输出格式稳定:
1 | 你是一名资深算法工程师和 LeetCode 题解专家。 |
API 接口说明
请求接口
POST /api/algorithm-solver
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| problem | string | 是 | 算法题描述 |
| language | string | 否 | 编程语言(默认 Python) |
| difficulty | string | 否 | 难度级别(默认 medium) |
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
| problem_type | array | 题目类型列表 |
| core_idea | string | 解题核心思路 |
| data_structure | string | 数据结构选择 |
| step_by_step_solution | array | 步骤解析 |
| reference_code | string | 参考代码 |
| time_complexity | string | 时间复杂度 |
| space_complexity | string | 空间复杂度 |
| edge_cases | array | 边界样例(至少3个) |
| common_mistakes | array | 易错点列表 |
| optimization | string | 优化方案 |
| rag_context | string | RAG 检索上下文 |
示例输入输出
输入
1 | { |
输出
1 | { |
异常处理与 JSON 稳定性设计
异常处理策略
- 空输入处理:检测空题目描述,返回友好错误信息
- API Key 缺失:检查环境变量,返回明确错误
- 认证失败:捕获 AuthenticationError,提示 Key 无效
- 请求超限:捕获 RateLimitError,提示稍后重试
- JSON 解析失败:多层解析策略,从 Markdown 代码块中提取
JSON 稳定性保障
- 强制 JSON 格式:使用
response_format={"type": "json_object"} - 代码块提取:支持提取
json ...格式的内容 - 自动修复:处理末尾多余逗号等常见问题
- 字段补全:确保所有必需字段存在,缺失时填充默认值
- 格式验证:验证数组类型字段,确保格式正确
项目亮点
- 纯内存向量检索:无需外部向量数据库,降低部署复杂度
- 轻量级依赖:移除 FAISS,使用纯 Python 实现相似度计算
- 标准化输出:严格的字段验证和格式规范
- 可扩展性:支持多语言代码生成,易于添加新题型模板
- Serverless 友好:适配 Vercel Serverless 部署环境
后续可扩展方向
- 代码执行验证:集成代码沙箱,验证生成代码的正确性
- 多语言支持:扩展支持 C++、Go、Rust 等语言
- 进阶算法模板:添加更多高级算法题型(图论、数论等)
- 用户反馈机制:收集用户反馈,持续优化知识库
- 题目相似度匹配:根据输入自动推荐相似题目
总结
这个项目让我对 RAG 技术和 Prompt 工程有了更深入的理解。通过将算法知识结构化存储,并结合大语言模型的生成能力,可以大大提高算法学习的效率。后续我会继续完善这个工具,希望能帮助更多开发者提升算法能力。
项目地址:GitHub
在线体验:访问 /algorithm-solver 页面即可使用