AI 错题本:拍照 → 人审 → 刷题 → 出卷的完整闭环

一、为什么做这个

家里孩子上初中,数学练习册、试卷源源不断。错题管理的传统流程是:抄题(费时)、贴卷子(凌乱)、复习时东翻西找。市面上拍照搜题 App 只给答案,不管"这道题我错在哪、下次还会不会错"。

我想要的是一个私有错题知识库:

  • 拍照就能把整页题目数字化,我来审核哪些值得入库、错因是什么
  • 平时能刷题、能按知识点出卷
  • 连对 3 次的题自动建议归档------真正掌握的题不再占用注意力
  • 数据在我自己手里

恰好此前我做过一个出题系统(quiz-demo),里面有一条经过实战验证的"质量链":几何图形数值校验(geocheck)→ 独立解题验伪(verify_answers)→ 矢量试卷导出(export_paper)。错题本直接把这条链复用过来------所有 AI 生成的题目都必须过三道工序,禁止裸奔。

二、完整工作流

markdown 复制代码
拍照上传(可多张)
  → 视觉模型多题转录(题干 LaTeX、选项、图形框、印刷答案、手写标记)
  → 自动按框抓取原图(权威图形,0 token)
  → 【人审视图】左原图右题目卡片,KaTeX 实时渲染
      勾选入库 + 标错因(马虎/不会/其他)+ 图形可抓原图/手动框选
      年级、知识点自动归类(教材知识树),可改
  → 提交入库:题库查重 → 独立解题验伪 → 章节难度知识点分析
  → 工作台(筛选/统计/详情)
  → 刷题(单题循环,自动评分)/ 做题(勾选试卷式,统一批改给分+评价)
  → 连对 3 次 → 建议归档 → 归档
  → 针对性出卷(按章节/知识点/难度占比,原题变式或原创)→ 矢量 PDF

三、功能清单(V1.0)

1. 录入·排版机(最花功夫的模块)

  • 多题转录:一张照片里所有题目一次转录,只认印刷体,手写痕迹只标记不转录
  • 人审前置:转录结果必须经人审(左原图、右题目卡片对照),勾选才入库------AI 只打草稿,取舍由人
  • 图形来源分层:几何题可一键生成规范矢量 SVG(geocheck 数值校验循环);默认使用原题照片裁剪图(省 token);表格/函数图象类题只能用原图
  • 图形纠正三入口:重新抓取原图、手动拖拽框选(box 存档可重放)、整单幂等重裁
  • EXIF 方向统一:手机照片的旋转信息曾导致抓图转 90°、手动框选完全错位------全链路统一到"转正空间"后彻底解决
  • 年级/知识点自动归类:教材(浙教版八上)用 build_kb 视觉转录成知识库(201 页),录入时 LLM 只能在知识树内选,人审可调

2. 入库质量链

  • 查重:题干归一化(去 LaTeX 命令名/标点/空白)后相似度 ≥92% 判重复,不重复录入,完成横幅里报告
  • 不信任照片答案:照片里的印刷答案仅作参考,一律让另一个模型独立解题对账;冲突以审题答案为准并留痕,判题不合格进 needs_review
  • 错因驱动分析:马虎 → 易错点写"易算错环节";不会 → 写"思路卡点"

3. 工作台

  • 统计图(总/在库/已归档/零练习/建议归档)+ 五组分布图(默认折叠,点开查看)
  • 错题列表:公式渲染、章节/难度/知识点/错因列、查看弹窗(题目全部信息+逐次练习历史)
  • 筛选联动:章节/难度/错因/知识点/含已归档,搜索后统计和列表一起更新;筛选与勾选持久化,跨标签页不丢
  • 行内归档/激活,勾选后可直接导出练习卷 PDF(矢量公式排版,答案附卷末可裁)

4. 刷题与做题(两种模式)

  • 刷题 (单题模式):自动循环在库全部题目;单选/多选/填空自动评分,问答看答案自判;答完即时反馈连对 n/3、建议归档、重复做错,可做相似题
  • 做题 (试卷模式):工作台勾选 → 新标签页整卷作答 → 统一批改:得分(百分制)、评价、错题知识点汇总(直指薄弱点)
  • 相似题:围绕同一知识点与易错点生成,过图形校验 + 验伪,不过关自动重生成

5. 多用户

按用户分目录存储(题库/草稿单/照片各自独立),页头切换/新建用户,存量数据自动迁移。两个孩子的错题互不干扰。

四、几个关键设计决策

1. 数据即文件,不用 SQLite

全部数据是 JSON(原子写 + .bak),人类可读、git 可版本管理(题库本身就是重要资产)。几百题规模下,一个 git log 就是完整的演进史------后来一次测试事故把题库覆盖了,正是靠备份和 git 恢复的。

2. 向量化(SVG 生成)从默认改为按需

最初设计是"几何题都自动转成规范矢量图",但实测发现这是全链路最费 token、最慢的一步(每题 1~3 次 LLM 调用 + geocheck 失败重试)。v0.6 反转为:转录默认用照片裁剪图(0 token),需要规范图形时人审期一键生成。省一半以上开销,录入速度大幅提升。

3. 不让 LLM 自由发挥知识点

知识点候选来自教材知识库(把纸质课本逐页视觉转录成结构化 JSON),录入时 LLM 只能在树内选;而工作台筛选用的知识点候选来自题库实际标注------保证下拉框里选了就一定能搜到(教材命名和 LLM 标注命名对不上是真实的坑)。

4. 人审是产品的核心,不是过渡方案

照片转录的不确定性(多题混排、手写干扰、印刷质量)决定了全自动入库不可靠。与其追求"全自动",不如把人审界面做到顺手:对照原图逐题确认、错因标注、图形纠正都是两次点击内的事。AI 负责 80% 的体力活,人负责 20% 的判断。

五、踩坑记录(节选)

  • CV 定位图形在真实照片上失效:行剖面定位在假照片上 IoU 95.9%,真实照片上把斜排文字误判为图形,两轮实测后废弃,改用视觉模型直接输出图形框
  • DeepSeek 思考链烧光 max_tokens:导致 content 为空且 finish_reason=length------降级策略:json_object → 关思考重试 → plain,实测 645s → 16s
  • EXIF orientation 双坐标系:浏览器自动转正、服务端不转,抓图转 90°、手动框选完全错位。全链路统一转正空间 + 历史数据迁移工具
  • 公式在列表里时渲染时不渲染 :题干截断 40 字符会把 $...$ 配对切断,KaTeX 找不到闭合符就放弃------改返回全文 + CSS 单行截断
  • 导出 PDF 显示 LaTeX 源码:导出链路不渲染 LaTeX,加了一层 LaTeX → Unicode 数学符号转换(\triangle→△、\circ→°、\frac→(a/b)、上标转 ⁰¹²³)
  • 测试覆盖了真实题库:测试 patch 路径常量但存储层重构后路径被重新绑定,种子数据覆盖了真实数据(10 题 → 1 题)------靠 .bak 和 git 恢复,并给所有测试加了测试模式保险。这个事故再次证明了"数据即文件 + git 管理"的价值

六、后续计划

  • 归档题的周期性复习提醒(错题本变复习系统)
  • 移动端适配(拍照场景天然在手机)
  • 教材 KB 扩展到九年级,知识点归一化到教材命名
  • 错因/知识点的长期趋势分析

结语

这个项目最大的感受:AI 应用的价值不在模型本身,而在模型外围的工程------质量链、人审流程、数据管理、测试回归,这些"笨功夫"决定了它能不能真的每天用。3 天开发 + 真实使用反馈驱动的 12 轮迭代,现在它已经是我家每天在用的工具了。


项目为自用工具,未开源服务端部署;如对质量链(geocheck / verify_answers / export_paper)或错题本实现细节感兴趣,欢迎交流。

相关推荐
用户117910488331 小时前
AI终端里复制不了代码?hmharness把鼠标还给终端 GitHub:swsgbl/hmharness
ai编程·harmonyos
小哈里2 小时前
【Agent】从Prompt工程、Context工程到 Harness工程,让 AI 能真正完成工作
人工智能·prompt·agent·ai编程·harness
Fox爱分享2 小时前
都问程序员双十一买什么,我的答案一定是这块专业编程显示器
后端·程序员·ai编程
ZzT2 小时前
AI-SDLC 实践 00|让 Coding Agent 参与整个项目周期:AI-SDLC 是什么、为什么要做
ai编程·claude
zilingyun20213 小时前
AI 编程工具的尽头,是软件工厂
ai编程
无责任此方_修行中5 小时前
模型变强了,架构为什么反而要变?——从"折叠 subagent"到"Super-agent"
人工智能·ai编程·deepseek
孔令飞6 小时前
AI 岗位类别、要求、技能及学习路线
云原生·go·ai编程
拆房老料6 小时前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
狂师6 小时前
GitHub 上最值得装的 8 个 Agent Skill 仓库,亲测好用!
程序员·github·ai编程