错因分析(过程归因)
对已判分的题做过程归因:读用户贴的解题过程 → 对照正确答案与解析 → 定位第一个出错步骤 → 归类错因 → 写 analysis.json → 重建错题本渲染「错因分析」callout。
前置条件:题目必须已判分(在 workspace/records/attempts.json 里,通常已在错题本)。未判分的题先引导走 880-grade 判分,再回来分析。
步骤
定位题目:从用户说的卷子+题号(如「卷子01 三2」)定位:
- 卷子号 →
paper-XX; - 从
workspace/records/papers.json该卷questions里按paper_no(一1/二3/三2)反查qid。
- 卷子号 →
读上下文:从题目索引(
workspace/question-index.json)或卷子-XX-答案.md读题干、答案、解析;从attempts.json读该题判分态(对/错/不会/半会/粗心)。对照分析:把用户贴的解题过程与正确解析逐步对照,找出第一个出错的具体步骤(从哪一步开始偏离),不要只报「答案不对」。
归类并建议:从
schema.analysis.cause_labels(审题失误 / 方法选择错误 / 概念定理错误 / 计算代数错误 / 步骤逻辑遗漏 / 粗心)选一个标签;写一句具体、可执行的建议。落库:写入
workspace/records/analysis.json:{ "items": { "<qid>": { "paper_id": "paper-01", "cause": "方法选择错误", "step": "第 2 步把 $\\sqrt[n]{n}$ 当 $1$ 处理,丢了高阶项", "advice": "含 n 次根号的差先提公因式、用等价无穷小定阶再取极限", "date": "YYYY-MM-DD" } } }用
lib880.load_analysis()读、save_analysis()写——保留已有条目(同题覆盖,异题追加)。重生成:
python3 scripts/wrong_book.py,错题本该题条目末尾自动渲染「错因分析」callout。报告:向用户展示 callout 内容(错因/出错环节/建议),说明已写入错题本。
触发词判断
- 用户贴出做题过程 + 「哪错了 / 为什么错 / 帮我看看」→ 880-analysis;
- 用户只说「这题对 / 错 / 半会」等判分信息 → 880-grade;
- 用户问「这道错题怎么复习」→ 880-wrongbook。
禁止
- 不批量分析:只有用户主动要求才分析,不要对每道错题自动生成;
- 不猜测过程:用户没贴解题过程的题,不臆测错因;
- 不手改错题本:callout 由
wrong_book.py渲染,映射数据只写analysis.json; - 不改判分:
analysis.json不触碰attempts.json;判分变更走880-grade。
内容规范
- 错题本条目「错因分析」callout 格式遵循
.claude/rules/common/obsidian-content.md的「错题本」一节; - 错因标签只用
schema.analysis.cause_labels六类,不新增自由文本分类; - 日期一律 ISO
YYYY-MM-DD。