基于 PaddleOCR + LangChain Agent 的智能错题本生成系统。上传试卷 PDF 或图片,自动识别文档结构、智能分割题目、OCR 纠错,导出为 Markdown 错题本并存入错题库。支持 AI 解题与教学讲解、笔记整理、独立 AI 对话、错题复习计划与数据统计。
- 智能分割:LLM Agent 自动识别题目边界,支持批次并行处理,跨页去重
- OCR 纠错:LLM 对识别结果进行结构化纠错,还原原题格式
- 手写擦除:EnsExam 模型自动擦除手写字迹,提升 OCR 精度
- OCR 预览:识别结果 bbox 框标注叠加在原图上,直观预览
- 错题库:SQLite 持久化存储,支持按科目、题型、知识点筛选和统计
- 笔记整理:上传手写笔记图片,OCR + LLM 自动结构化整理为 Markdown
- AI 解题:独立解题 Agent,逐步给出解题过程
- AI 教学:教学讲解 Agent,绑定错题上下文的一对一辅导
- AI 对话:独立多轮对话,支持 SSE 流式输出和深度思考(DeepSeek Reasoner)
- 复习计划:间隔复习,追踪错题掌握状态
- 数据统计:Dashboard 可视化,按科目/题型/时间维度分析
- 导出:导出为 Markdown 文件,按大题分组
├── backend/ # Flask 后端(纯 API 服务)
│ ├── core/ # 核心模块
│ │ ├── config.py # 集中配置(路径、Settings)
│ │ ├── llm.py # LLM 初始化(多 provider 支持)
│ │ ├── state.py # 全局会话状态(session_files、锁)
│ │ └── mail.py # SMTP 邮件发送
│ ├── web_app.py # Flask 应用工厂 + Blueprint 注册
│ ├── routes/ # 7 个 Blueprint(upload、questions、chat、stats、auth、settings、notes)
│ ├── src/ # 核心模块(LangGraph workflow、OCR 客户端、工具函数)
│ ├── agents/ # LangChain Agent
│ │ ├── error_correction/ # 题目分割 + OCR 纠错
│ │ ├── solve/ # 解题 Agent
│ │ ├── teach/ # 教学讲解 Agent
│ │ └── note/ # 笔记整理 Agent
│ ├── db/ # SQLite + SQLAlchemy ORM
│ │ ├── models.py # 数据模型(User、Question、Note、Chat 等)
│ │ ├── crud/ # CRUD 模块化包
│ │ └── migrate.py # 数据库自动迁移
│ ├── benchmark/ # 模型评测
│ └── tests/ # 后端测试
├── frontend/ # Vue 3 + Vite + Tailwind CSS
│ ├── app.html # SPA 入口
│ └── src/
│ ├── views/ # 页面级组件(HomeView、WorkspaceView)
│ ├── components/ # 55+ 功能组件
│ │ ├── auth/ # 认证(登录、注册、找回密码)
│ │ └── home/ # 首页组件
│ ├── composables/ # 组合式函数(useAuth、useTheme 等)
│ ├── router/ # Vue Router 路由配置
│ ├── api.js # 集中式 API 层
│ ├── utils.js # 工具函数(Markdown 渲染、MathJax、DOMPurify)
│ └── __tests__/ # 前端测试(Vitest)
├── example_uploads/ # 示例测试文件
├── backend/.env.example # 环境变量模板
└── requirements.txt # Python 依赖
需要 Python 3.11+、Node.js 18+。
# 后端依赖
pip install -r requirements.txt
# 前端依赖
cd frontend && npm install# 复制模板到项目根目录
cp backend/.env.example .env编辑 .env,必须配置 SECRET_KEY。
LLM API Provider(OpenAI / Anthropic / PaddleOCR)配置已迁移到数据库,启动后在系统设置页面管理。
SMTP 邮件配置(注册验证码、找回密码)通过 .env 的 APP_SMTP_* 变量管理,详见 backend/.env.example。
开发模式(前后端分离,支持热更新):
# 终端 1:启动后端
cd backend && python web_app.py
# 终端 2:启动前端开发服务器
cd frontend && npm run dev前端开发服务器会自动将 /api、/images、/download、/erased、/uploads 请求代理到后端 localhost:5001。
访问 http://localhost:5173 即可使用。
注意:后端已重构为纯 API 服务器,不提供前端页面。直接访问
:5001只会得到 JSON 404。
PDF(.pdf)、图片(.jpg .jpeg .png .bmp .tiff .webp),单次上传限制 50 MB。
# 后端测试
cd backend && python -m pytest tests/ -v
# 前端测试
cd frontend && npm test详见 backend/tests/README.md 和 frontend/src/tests/README.md。
本项目基于 AGPL-3.0 开源。任何修改或基于本项目的衍生作品(包括网络服务部署)均须以相同许可证开源。