Files
tupingr e3f4af9c0c docs(arch): 旧架构合并 — 30项决策落地,5份文档升级至v0.4.0
- 总体架构:新增打印/图像预处理/双飞轮/三环境部署
- 技术选型:调整决策理由(Coze沙盒自动化测试),新增Sharp+PDFKit
- 数据模型:新增code/role/question_type+print_tasks+audit_logs,ID+code并存
- 模块设计:新增Image/Print模块,推荐两阶段匹配(关键词粗筛→AI精排)
- PRD:目标用户扩展为学生+家长,新增PDF打印,年级聚焦小初,图像预处理流程
- ADR-010:题库抽象层Adapter Pattern

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 12:00:52 +08:00

473 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ErrLens 产品需求文档
> 版本: v0.4.0 | 状态: 已锁定 | 作者: Arch AI | 最后更新: 2026-05-26(旧架构合并)
---
## 1. 产品定位
### 1.1 一句话描述
ErrLens 是一款面向小学初中学生的 **AI 错题本**,帮助学生或家长拍照录入错题、自动归类分析、输出 PDF 练习、获得针对性练习推荐。
### 1.2 核心价值
传统错题本需要学生手动抄题、自己分类、凭感觉复习。ErrLens 将这些步骤交给 AI:
- **录入**: 拍照即可,AI 自动识别题目、答案、学科
- **分析**: AI 诊断错误原因(知识点欠缺/粗心/审题偏差),汇总薄弱点
- **推荐**: 基于错题模式,从题库中匹配同类题目,针对性巩固
### 1.3 核心飞轮(人机协同版)
AI 识别不可能 100% 准确(尤其手写体),飞轮不能建立在"AI 完美识别"的假设上。正确模型是:
```
拍照录入错题
→ AI 识别 + 置信度评估(识别、分类、知识点标注各带分数)
→ 高置信度字段自动填充,低置信度字段高亮提示用户确认
→ 用户修正/确认后入库(人工校验过的数据才是"干净数据")
→ 干净数据 → AI 分析错误原因 → 识别薄弱知识点
→ 推荐同类练习 → 更多错题数据 → 修正记录积累
→ 反馈训练(P02 阶段:用"AI 识别 vs 用户修正"的 delta 微调模型)
```
**关键认知**
- AI 识别结果不是"答案",是"草稿"——用户确认前不进入分析管道
- 用户每一次修正都是**免费的标注数据**,是训练 P02 自有模型的核心资产
- 飞轮飞起来靠的不是 AI 一开始有多准,而是用户修正成本有多低
### 1.4 竞品差异化
| 维度 | 传统错题本 App | ErrLens |
|------|---------------|---------|
| 录入方式 | 手动输入/拍照 OCR | AI 识别 + 置信度标注 + 用户修正 |
| 分析深度 | 按学科/章节归类 | 知识点粒度 + 错误原因诊断 |
| 推荐逻辑 | 随机/按章节 | 基于错题模式的个性化推荐 |
| 数据飞轮 | 无 | 用户修正数据反哺模型训练 |
---
## 2. 目标用户
### 2.1 核心用户画像
| 画像 | 描述 | 核心需求 |
|------|------|----------|
| **小初高学生** | 10-18 岁,有日常作业和考试,可自己操作也可家长代操作 | 快速录入、自动整理、考前针对性复习 |
| **家长** | 关注孩子学习状况,代孩子拍照整理、打印练习题 | 查看分析报告、了解进步轨迹、错题打印 |
| **老师(扩展)** | 管理班级,了解全班错题分布 | 班级错题统计、教学重点调整 |
### 2.2 MVP 阶段聚焦
- **P0**: 小初高学生 + 家长(均可操作,交互低门槛年轻化)
- **P1**: 学习报告、练习推荐
- **Phase 3+**: 老师端
---
## 3. 功能需求
### 3.1 MVP 功能清单 (Phase 2)
| 模块 | 功能 | 优先级 | 说明 |
|------|------|--------|------|
| **错题录入** | 拍照录入 | P0 | 拍照 → 图像预处理 → AI 识别题目+答案+学科 |
| | 手动录入 | P0 | 文字输入兜底方案 |
| | 批量导入 | P2 | 从试卷照片一次识别多道题 |
| **错题管理** | 错题列表 | P0 | 按时间/学科/知识点筛选 |
| | 错题详情 | P0 | 题目、错误答案、正确答案、分析 |
| | 错题编辑 | P1 | 修正 AI 识别结果 |
| **AI 分析** | 错误原因诊断 | P0 | 标注错误类型(知识点/粗心/审题) |
| | 薄弱点汇总 | P0 | 按知识点统计薄弱程度 |
| | 学习报告 | P1 | 周/月度错题趋势报告 |
| **练习推荐** | 同类题推荐 | P1 | 关键词+Jaccard 粗筛 → AI 精排 |
| | 智能组卷 | P2 | 自动生成针对性练习卷 |
| **错题打印** | PDF 输出 | P0 | 选题 → 生成 PDF → 下载(24h 有效) |
| **用户系统** | 注册/登录 | P0 | 微信授权登录 |
| | 个人资料 | P1 | 年级(小初)、学科设置 |
| | 学科管理 | P1 | 添加/切换学科 |
### 3.2 功能详情
#### 3.2.1 拍照录入(P0 核心流程)
```
拍照 → 裁剪/确认 → 图像预处理 → AI 识别 → 置信度评估 → 确认/修正 → 保存
├─ 透视校正(手动框4角)
├─ CLAHE 增强(光照归一化)
└─ 笔迹去除(红/蓝笔HSV自动去除)
提取: 题目文本、学科、知识点、错误答案
每个字段附带 confidence: 0.0-1.0
高置信(>0.9): 绿色标记,自动采纳
中置信(0.7-0.9): 黄色标记,建议检查
低置信(<0.7): 红色标记,提示手动确认
用户修正 → 修正字段记录到 correction_log
原始 AI 结果 + 用户修正值 一并入库
```
**置信度分字段展示**:
- OCR 文本置信度(手写体通常更低)
- 学科分类置信度
- 知识点标注置信度
- 错误类型诊断置信度
每个字段独立展示置信度,用户可逐个修正。低置信度字段高亮提示,不阻塞整体流程(用户可跳过修正,但数据标记为 unverified)。
**交互要点**:
- 拍照后展示识别结果,低置信度字段红色高亮
- 点击任意 AI 识别结果可进入编辑态修正
- 识别中展示 loading 动画(预期 3-5 秒)
- 支持从相册选择已有截图/照片
- "正确答案"字段独立,可留空(学生可能还不知道正确答案)
**AI 能力需求**:
- OCR 文字识别(手写体 + 印刷体)
- 学科分类(数学/语文/英语/物理/化学/生物/地理/历史/政治)
- 知识点标注(如"二次函数"、"定语从句"
- 题目结构提取(题干/选项/答案区)
#### 3.2.2 错题列表(P0
**列表视图**:
- 默认按时间倒序
- 筛选器:学科、知识点、时间范围、错误类型
- 每项展示:题目缩略图、学科标签、知识点标签、录入日期
- 搜索:按题目关键词搜索
**分组视图**:
- 按知识点分组(展示每个知识点的错题数量和掌握度)
- 按学科分组
#### 3.2.3 AI 分析(P0
**单题分析**:
- 错误类型分类:知识点欠缺 / 粗心失误 / 审题偏差 / 概念混淆
- 关联知识点(可能有多个)
- 难度评估:基础 / 中等 / 拔高
**汇总分析**:
- 薄弱知识点排序(按错误频率和严重程度)
- 错误类型分布饼图
- 学科间对比
#### 3.2.4 错题打印/PDF 输出(P0
**打印流程**:
```
选题(错题列表中勾选)→ 生成 PDF → 预览 → 下载 → 自行打印
```
**PDF 排版优先级**:
1. 结构化内容(题库匹配的题目,文字+公式清晰排版)
2. 增强图片(经 CLAHE+笔迹去除处理后的图片)
3. 原始图片(无匹配时兜底)
**交互要点**:
- 错题列表页支持多选模式(勾选要打印的题目)
- PDF 生成中展示进度(预计 5-10 秒)
- 生成后预览页支持手势缩放
- 下载链接 24 小时有效,过期自动清理
- 支持分享到微信(发送 PDF 文件给家长/老师)
#### 3.2.5 练习推荐(P1
**推荐逻辑**:
1. 基于薄弱知识点权重排序
2. 匹配题库中同知识点、同难度题目
3. 优先推荐"高频易错"题型
4. 已掌握的题目降低推荐权重
**推荐展示**:
- 每日推荐: 3-5 道针对性练习
- 自定义练习: 选择知识点 + 数量,一键生成
### 3.3 数据质量与人机协同修正
#### 3.3.1 核心设计原则
**用户每次修正都是免费的标注数据。** 这是 ErrLens 相对于纯 AI 方案的核心壁垒。
- AI 识别是"草稿",不是"答案"
- 用户确认前的数据不进入分析和推荐管道
- 修正记录(AI 输出 vs 用户修正)是 P02 自研模型的核心训练数据
#### 3.3.2 数据校验状态机
```
AI 识别完成
┌────────────────┐
│ raw │ 原始 AI 识别结果,未确认
│ 进入错题列表 │ 仅对用户可见,不参与分析
│ 不可用于推荐 │
└───────┬────────┘
│ 用户查看/修正
┌────────────────┐
│ reviewed │ 用户已确认/修正
│ 参与薄弱点分析 │ 所有字段经人工校验
│ 参与练习推荐 │
└───────┬────────┘
│ 用户再次修正
┌────────────────┐
│ corrected │ 用户二次修正(覆盖上次)
│ 分析/推荐更新 │
└────────────────┘
```
**关键规则**:
- `raw` 状态的错题仅用户自己可见,不计入 AnalysisReport
-`raw``reviewed` 的最小操作:用户至少查看一次并点击"确认"按钮(批量确认支持)
-`reviewed``corrected`:用户主动编辑了 AI 识别的字段
- 30 天后仍为 `raw` 的错题标记为 `stale`,系统定期提醒用户确认
#### 3.3.3 置信度分字段评估
AI 对每个字段独立输出置信度 [0.0-1.0]:
| 字段 | 影响因素 | 典型置信度 |
|------|----------|-----------|
| 题目文本 (question_text) | 手写体 vs 印刷体、图片清晰度 | 印刷体 0.9+,工整手写 0.7-0.9,潦草手写 0.5-0.7 |
| 学科分类 (subject_id) | 题目文本中的关键词密度 | 数学符号明显的题 0.9+,文科主观题 0.6-0.8 |
| 知识点标注 (knowledge_points) | 知识树覆盖度、题干关键词匹配 | 主流知识点 0.8+,冷门知识点 0.5-0.7 |
| 错误类型 (error_type) | 错误答案与正确答案的对比清晰度 | 有正确答案时 0.8+,无正确答案时 0.5-0.7 |
| 正确答案 (correct_answer) | AI 是否能看到标答区域 | 扫描的试卷答案区 0.9+,纯题目照片 0.5-0.7 |
#### 3.3.4 修正记录 (Correction Log)
每次用户修正,记录原始 AI 值和用户修正值:
```json
{
"error_item_id": "uuid",
"field": "knowledge_points",
"ai_value": [1021], // AI 识别:顶点坐标
"user_value": [1022], // 用户修正:图像性质
"ai_confidence": 0.72,
"corrected_at": "2026-05-26T10:30:00Z"
}
```
**用途**:
1. **即时**: 修正后立即更新错题数据,参与分析和推荐
2. **分析**: 统计各字段修正率,识别 AI 薄弱环节(哪个学科/知识点修正率最高)
3. **训练 (P02)**: AI 识别 vs 用户修正的 delta 是微调自有模型的核心训练数据
#### 3.3.5 交互策略
**确认界面分级提示**:
| 置信度区间 | 视觉标记 | 交互行为 |
|-----------|---------|---------|
| > 0.9 | 绿色边框 | 默认展示,无需操作 |
| 0.7 - 0.9 | 黄色边框 + 虚线 | 建议点击查看 |
| < 0.7 | 红色边框 + 闪烁 | 弹提示建议手动修正 |
| — | 无 AI 结果 | 空白输入框,用户手动填写 |
**批量确认**: 多道题一起拍照后,在列表页支持批量"一键确认",降低确认摩擦。
**修正激励**: 未来(Phase 3)可引入修正积分/成就,鼓励学生认真修正(干净数据=更好的推荐=对自己有用)。
---
## 4. 非功能需求
### 4.1 性能
| 指标 | 目标值 |
|------|--------|
| 小程序首屏加载 | < 2s |
| AI 识别响应 | < 5s(拍照→结果展示) |
| 列表滚动 | 60fps,虚拟列表 |
| 图片上传 | < 3s(压缩后 < 500KB |
| API 响应 | P95 < 200ms |
### 4.2 安全
- 微信授权登录,不存储密码
- 用户错题数据隔离,API 层鉴权
- 图片上传签名 URL,防恶意上传
- 敏感信息(姓名、学校)传输加密
### 4.3 兼容性
- 微信小程序基础库 ≥ 3.0
- iOS 14+ / Android 8+
- 屏幕适配:375-428px 逻辑宽度
### 4.4 可用性
- 核心流程(拍照→保存)不超过 3 步
- 关键操作有明确反馈(loading/成功/失败)
- 网络异常时有缓存兜底和重试提示
- 首次使用有引导(不强制)
---
## 5. 数据模型(高层)
### 5.1 核心实体
```
User (用户)
- id, nickname, avatar, grade, created_at
Subject (学科)
- id, name, icon
KnowledgePoint (知识点)
- id, name, subject_id, parent_id (树形结构)
ErrorItem (错题)
- id, user_id, subject_id
- image_url (原始图片)
- question_text (题目文本,AI 提取)
- wrong_answer (错误答案)
- correct_answer (正确答案,可选)
- knowledge_points[] (关联知识点)
- error_type (错误类型)
- difficulty (难度)
- verification_status: raw | reviewed | corrected | stale
- ai_confidence: JSONB(各字段的 AI 置信度)
- note (学生备注)
- created_at, updated_at
CorrectionLog (修正记录) [P02 训练数据]
- id, error_item_id, field_name
- ai_value (AI 原始值)
- user_value (用户修正值)
- ai_confidence (该字段置信度)
- corrected_at
AnalysisReport (分析报告)
- id, user_id
- period (week/month)
- weak_points[] (薄弱知识点+权重)
- error_type_distribution
- trend (进步/退步/持平)
- generated_at
PracticeRecommendation (练习推荐)
- id, user_id
- knowledge_points[]
- questions[] (推荐的题目)
- generated_at
PrintTask (打印任务)
- id, user_id
- error_item_ids[]
- output_mode: pdf
- file_url, expires_at
- created_at
```
### 5.2 MVP 阶段简化
- KnowledgePoint 使用预设知识树(非 AI 自动生成)
- 题库推荐初期使用外部题库 API,后续自建
- 分析报告先做单题分析,汇总报告 P1
- **CorrectionLog MVP 即入库,但 P02 阶段才用于训练**
- **AnalysisReport 仅统计 verification_status != raw 的错题**
---
## 6. 用户旅程
### 6.1 核心旅程:首次使用
```
1. 打开小程序 → 微信授权登录
2. 设置年级 + 学科(初中二年级 + 数学)
3. 进入首页 → 看到空状态:「还没有错题,拍一张吧」
4. 点击拍照按钮 → 拍摄一道错题 → AI 识别中(3-5s)
5. 确认识别结果 → 「分析完成!这道题是【二次函数-顶点坐标】没掌握」
6. 回到首页 → 错题列表出现第一条记录
7. 底部「薄弱点」tab → 看到第一个薄弱知识点标记
```
### 6.2 核心旅程:日常使用
```
1. 每天做完作业 → 打开 ErrLens
2. 拍照录入 2-3 道错题
3. 查看 AI 分析:「今天主要是计算粗心」
4. 周末 → 收到推送:「本周薄弱点是【全等三角形判定】,已生成针对性练习」
5. 完成推荐练习 → 错题本记录更新
```
---
## 7. 项目分期
| 阶段 | 范围 | 交付物 |
|------|------|--------|
| Phase 1 (当前) | 基础搭建 | 协作框架、脚手架、信息架构 |
| Phase 2 (MVP) | 核心闭环 | 拍照录入 + 错题管理 + AI 分析 + 用户系统 |
| Phase 3 | 功能完善 | 练习推荐 + 学习报告 + 家长端 + P02/P03 启动 |
| Phase 4 | 打磨发布 | 性能优化 + 安全审计 + 上线准备 |
---
## 8. MVP 验收标准 (Phase 2)
- [ ] 用户可以微信授权登录
- [ ] 用户拍照后 5 秒内看到识别结果(含置信度标注)
- [ ] 图像预处理管线完整运行(透视校正+增强+笔迹去除)
- [ ] 低置信度字段红色高亮,用户可逐字段修正
- [ ] 用户可以批量确认多道错题
- [ ] 用户可以在错题列表中按学科、校验状态筛选
- [ ] AI 可以诊断错误原因并关联知识点
- [ ] 用户可以查看薄弱点汇总(仅统计 reviewed 及以上状态)
- [ ] 用户可以勾选错题生成 PDF 并下载(24h 有效)
- [ ] PDF 排版清晰度满足打印标准(300DPI)
- [ ] 核心流程有完整的 loading/成功/失败反馈
- [ ] 置信度 UI 分级显示(绿/黄/红)正确运行
- [ ] `raw` 状态的错题不参与分析和推荐
---
## 9. 风险与假设
### 9.1 关键假设
1. AI OCR 对手写体的识别率能达到可用水平(>70% 即满足 MVP,用户修正兜底)
2. 用户愿意在拍照后花 10-20 秒确认/修正 AI 识别结果
3. 学生/家长愿意每天花 2-3 分钟录入错题
4. 微信小程序审核能通过教育类目
5. 题库资源可获取(合作或爬取)
### 9.2 主要风险
| 风险 | 影响 | 缓解措施 |
|------|------|----------|
| AI 识别准确率不足 | 用户不信任,放弃使用 | **架构层面:置信度分层 + 用户修正闭环,AI 定位为"草稿"而非"答案"MVP 优先优化印刷体 OCR** |
| 用户修正率低(不确认 raw 数据) | 飞轮无数据可用 | 批量确认降低摩擦;定期提醒 stale 数据;确认操作设计为一次点击 |
| 修正数据质量差(用户胡乱修正) | 训练数据被污染 | 修正记录对比 AI 值,异常修正(如学科从数学改体育)标记审查 |
| 图像预处理管线复杂度高 | 开发周期延长 | 模块化降级策略:任何模块失败不阻塞整体流程;Coze 沙盒中重新调优参数 |
| 题库内容不足 | 推荐功能无法上线 | 先接入第三方题库 API |
| 增长缓慢 | 飞轮无法启动 | 考虑学校/班级团购模式 |
| 小程序审核受限 | 无法发布 | 优先微信小程序,H5 兜底 |
---
## 10. 待决策事项
以下事项需要人类确认后锁定:
- [x] 题库来源:**两者都要**。自有本地题库(PDF 手动录入)提供差异化内容,作业帮 API 冷启动兜底。架构需支持多题库源抽象层。
- [x] AI 能力来源:**分层使用**。Coze SDK 做测试/验证,其他 AI 做 Coding 实现,Claude 做架构设计。各角色可交叉协作,不僵化绑定。
- [x] 用户体系:**MVP 仅微信小程序登录**。增长模式:已有用户/老师/机构通过扫码分享注册,形成用户群的**树状结构**(邀请链)。架构需支持邀请关系建模。
- [x] 商业化方向:**基础免费 + 会员**。MVP 阶段全功能免费(积累用户),会员功能在 Phase 3 设计。架构预留能力开关。
- [x] 首发学科:**数学 + 英语**。两个学科同时首发,知识树需覆盖数学和英语两套知识体系。
---
*PRD 状态: 草案 → 已锁定(v0.3.0,5 项决策已确认)*