Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 0 additions & 24 deletions .env.example

This file was deleted.

1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
backend/models/weight/*.pth filter=lfs diff=lfs merge=lfs -text
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,6 @@ dataset/

# 环境变量
.env
backend/.env
PR.md
TODO.md
295 changes: 215 additions & 80 deletions CLAUDE.md

Large diffs are not rendered by default.

103 changes: 51 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,59 @@
# 错题本生成系统
# 智卷 — 智能错题本生成系统

基于 PaddleOCR + LangChain Agent 的智能错题本生成系统。上传试卷 PDF 或图片,自动识别文档结构、智能分割题目、OCR 纠错,导出为 Markdown 错题本并存入错题库支持 AI 解题与教学讲解。
基于 PaddleOCR + LangChain Agent 的智能错题本生成系统。上传试卷 PDF 或图片,自动识别文档结构、智能分割题目、OCR 纠错,导出为 Markdown 错题本并存入错题库支持 AI 解题与教学讲解、笔记整理、独立 AI 对话、错题复习计划与数据统计

## 功能

- **智能分割**:LLM Agent 自动识别题目边界,支持批次并行处理
- **智能分割**:LLM Agent 自动识别题目边界,支持批次并行处理,跨页去重
- **OCR 纠错**:LLM 对识别结果进行结构化纠错,还原原题格式
- **错题库**:SQLite 持久化存储,支持按科目、题型、日期筛选和统计
- **手写擦除**:EnsExam 模型自动擦除手写字迹,提升 OCR 精度
- **OCR 预览**:识别结果 bbox 框标注叠加在原图上,直观预览
- **错题库**:SQLite 持久化存储,支持按科目、题型、知识点筛选和统计
- **笔记整理**:上传手写笔记图片,OCR + LLM 自动结构化整理为 Markdown
- **AI 解题**:独立解题 Agent,逐步给出解题过程
- **AI 分析**:教学讲解 Agent,深度分析题目知识点
- **AI 对话**:多轮对话,支持 SSE 流式输出
- **导出**:导出为 Markdown 文件
- **AI 教学**:教学讲解 Agent,绑定错题上下文的一对一辅导
- **AI 对话**:独立多轮对话,支持 SSE 流式输出和深度思考(DeepSeek Reasoner)
- **复习计划**:间隔复习,追踪错题掌握状态
- **数据统计**:Dashboard 可视化,按科目/题型/时间维度分析
- **导出**:导出为 Markdown 文件,按大题分组

## 项目结构

```
├── backend/ # Flask 后端(API + 静态资源托管)
│ ├── config.py # 集中配置(路径、目录)
│ ├── llm.py # LLM 初始化(DeepSeek / 文心)
│ ├── web_app.py # Flask 主应用(路由 + 会话状态)
├── 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 客户端、工具函数)
│ ├── error_correction_agent/ # LangChain Agent(题目分割、OCR 纠错、科目识别)
│ ├── solve_agent/ # 解题 Agent
│ ├── teach_agent/ # 教学讲解 Agent(AI 分析功能)
│ ├── benchmark/ # 模型评测(数据采集、评测运行、指标计算)
│ ├── db/ # SQLite 数据库(ORM 模型、CRUD)
│ └── tests/ # 后端测试(19 个测试模块)
├── frontend/ # Vue 3 + Vite + Tailwind CSS 前端
│ ├── index.html # 介绍落地页
│ ├── app.html # Vue 工作台入口
│ ├── 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/
│ ├── App.vue # 根组件(侧边栏布局 + 视图路由)
│ ├── components/ # 18 个功能组件
│ ├── 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/ # 示例测试文件(图片 + PDF)
├── .env.example # 环境变量模板
├── example_uploads/ # 示例测试文件
├── backend/.env.example # 环境变量模板
└── requirements.txt # Python 依赖
```

Expand All @@ -55,27 +74,15 @@ cd frontend && npm install
### 2. 配置环境变量

```bash
copy .env.example .env
# 复制模板到项目根目录
cp backend/.env.example .env
```

编辑 `.env`,填写以下必需项:
编辑 `.env`,必须配置 `SECRET_KEY`。

```dotenv
# LLM API(OpenAI 兼容接口,支持 OpenAI / DeepSeek / Qwen / Moonshot 等)
OPENAI_API_KEY=your_key
# OPENAI_BASE_URL=https://api.deepseek.com # 留空则使用 OpenAI 官方;填写后可切换 DeepSeek 等供应商
# OPENAI_MODEL_NAME=gpt-4o-mini # 默认模型(可选)
LLM API Provider(OpenAI / Anthropic / PaddleOCR)配置已迁移到数据库,启动后在系统设置页面管理。

# Anthropic API(可选,与 OpenAI 兼容接口二选一或同时配置)
# ANTHROPIC_API_KEY=your_key

# PaddleOCR API(文档结构解析,V2 异步任务接口)
PADDLEOCR_API_URL=https://paddleocr.aistudio-app.com/api/v2/ocr/jobs
PADDLEOCR_API_TOKEN=your_token
PADDLEOCR_MODEL=PaddleOCR-VL-1.5
```

> LLM 至少配置一种(OpenAI 兼容接口或 Anthropic),前端会自动检测可用模型。轻量模型、LangSmith 追踪、PaddleOCR 特性开关等可选配置见 `.env.example`。
SMTP 邮件配置(注册验证码、找回密码)通过 `.env` 的 `APP_SMTP_*` 变量管理,详见 `backend/.env.example`。

### 3. 启动

Expand All @@ -89,19 +96,11 @@ cd backend && python web_app.py
cd frontend && npm run dev
```

前端开发服务器会自动将 `/api`、`/images`、`/download` 请求代理到后端 `localhost:5001`。

**生产模式**(Flask 托管前端静态资源):
前端开发服务器会自动将 `/api`、`/images`、`/download`、`/erased`、`/uploads` 请求代理到后端 `localhost:5001`。

```bash
# 构建前端
cd frontend && npm run build

# 启动后端(自动托管构建产物)
cd backend && python web_app.py
```
访问 **http://localhost:5173** 即可使用。

访问 **http://localhost:5001** 即可使用
> **注意**:后端已重构为纯 API 服务器,不提供前端页面。直接访问 `:5001` 只会得到 JSON 404

## 支持的文件格式

Expand Down
12 changes: 0 additions & 12 deletions TODO.md

This file was deleted.

Loading