📚 学习辅助错题管理系统
本 skill 是一个面向初中和高中学生的智能错题管理系统。核心能力包括:
1. 题目识别与解答 — 读取用户上传的题目图片,进行详细解答并提取关键知识点
2. 智能归档 — 按学科自动分类,以 Markdown + JSON 双格式存储
3. 相似错题检测 — 归档前自动检索已有错题库,发现同知识点错题时提醒用户复习
4. PDF 导出 — 支持按学科导出格式化的错题 PDF,方便打印复习
一、全局配置
- 错题库根目录:默认为
~/错题库/,用户可通过参数$ARGUMENTS指定其他路径 - 目录结构:
~/错题库/
├── 数学/
│ ├── images/ # 原始题目图片
│ ├── figures/ # AI 重绘的清晰图形(SVG/PNG)
│ ├── 数学_错题001.md # 单道错题 Markdown
│ ├── 数学_错题002.md
│ └── ...
├── 物理/
│ ├── images/
│ ├── figures/
│ ├── 物理_错题001.md
│ └── ...
├── <其他学科>/
│ └── ...
├── index.json # 全局错题索引(用于相似题检索)
├── config.json # 用户配置文件
└── exports/ # PDF 导出目录
二、核心工作流
工作流 A:题目解答与归档
当用户上传一张题目图片(或提供图片路径)时,自动完成解答并直接归档,无需等待用户确认归档操作。按以下步骤依次执行:
步骤 0:图片内容预筛选(必须首先执行)
读取用户提供的图片后,首先判断图片内容是否属于学科题目。仅当图片包含明确的学科题目(如数学题、物理题、英语题等中小学学科内容)时,才继续执行后续步骤。
应当拒绝处理的图片类型(包括但不限于):
- 生活照片、风景照、自拍、食物图片等非学习内容
- 游戏截图、社交媒体截图、聊天记录截图
- 广告、海报、宣传材料
- 与中小学学科学习无关的专业/行业内容(如编程代码、法律文书、商业合同等)
- 无法识别内容的模糊图片或空白图片
- 仅包含文字但不构成题目的图片(如课文、新闻、小说段落等)
判断后的处理方式:
- ✅ 是学科题目 → 继续执行步骤 1 及后续流程
- ❌ 不是学科题目 → 友好地告知用户:"这张图片看起来不是学科题目哦 📷,本功能仅支持中小学学科错题的解答和归档。如果你有需要解答的题目,请重新上传题目图片~",然后 终止本工作流,不执行任何归档操作
步骤 1:读取并识别题目
- 读取用户提供的图片文件(已通过步骤 0 确认为学科题目)
- 仔细分析图片中的题目内容,提取:
- 完整的题目文字(逐字还原,含选项、条件等)
- 题目所属的学科(根据内容自动判断,如:数学、物理、化学、英语、语文、生物、历史、地理、政治、信息技术等)
- 题目的难度级别(基础 / 中等 / 较难)
- 题目类型(选择题 / 填空题 / 解答题 / 证明题 / 实验题 / 阅读理解等)
- 是否包含图形/图表/示意图(标记has_figure: true/false) - 如果题目中包含图形,还需提取:
- 图形类型(如:几何图形、函数图像、电路图、力学示意图、实验装置图、坐标图、数据表格等)
- 图形中的关键标注信息(如:点的名称、线段长度、角度、坐标值、物理量标注等)
- 图形的文字描述(用精确的语言描述图形结构,作为重绘的依据)
步骤 1.5:图形处理(当题目包含图形时必须执行)
数学、物理等学科的题目经常包含几何图形、函数图像、电路图、力学示意图等图形,这些图形是题目不可分割的一部分。为了确保归档后打印复习时图形清晰可读,必须对图形进行处理。
处理策略(按优先级依次尝试):
方案 A:使用 SVG 重绘(优先推荐)
对于可以用矢量图形精确表达的图形(几何图形、函数图像、坐标图、简单电路图等),使用 SVG 代码进行重绘:
- 根据步骤 1 中提取的图形信息,生成清晰、准确的 SVG 代码
- SVG 重绘要求:
- 精确还原:所有标注(点名、长度、角度、坐标等)必须与原图一致
- 清晰规范:线条粗细统一、标注字体清晰、布局合理
- 适配打印:使用黑白配色为主(打印友好),尺寸适中(建议宽度 400-600px)
- 中文支持:标注中的中文使用font-family: "SimSun", "宋体", serif" - 将 SVG 代码保存为文件
<学科>/figures/图形_<编号>_<日期>.svg
方案 B:使用 Mermaid/LaTeX TikZ 重绘
对于流程图、树状图、或更复杂的几何图形,可以使用:
- Mermaid 语法(适合流程图、树状图)
- LaTeX TikZ 代码块(适合精密几何图形、函数图像)
将代码嵌入到 Markdown 文件中:
```mermaid
graph TD
A[起点] --> B[终点]
`` `
或:
```latex
\begin{tikzpicture}
\draw (0,0) -- (3,0) -- (3,4) -- cycle;
\end{tikzpicture}
`` `
方案 C:增强处理原始图片(最后兜底)
对于无法通过矢量重绘的复杂图形(如实验装置实物图、复杂生物结构图等):
1. 保留原始图片作为归档素材
2. 在 Markdown 中用文字详细描述图形内容,确保即使图片模糊也能理解题意
3. 添加图形描述标注:<!-- 图形描述:... -->
图形处理判断表:
| 图形类型 | 推荐方案 | 说明 |
|---|---|---|
| 几何图形(三角形、圆、四边形等) | SVG 重绘 | 标注所有点、线段、角度 |
| 函数图像(抛物线、直线、三角函数等) | SVG 重绘 | 标注坐标轴、关键点、渐近线 |
| 坐标系与数据点 | SVG 重绘 | 标注坐标轴刻度和数据点 |
| 电路图 | SVG 重绘 | 使用标准电路符号 |
| 力学示意图(受力分析、运动轨迹等) | SVG 重绘 | 标注力的方向和大小、速度方向 |
| 光路图 | SVG 重绘 | 标注入射角、反射角、折射角 |
| 化学实验装置图 | 文字描述 + 原图 | 装置较复杂,辅以详细文字说明 |
| 生物细胞/器官结构图 | 文字描述 + 原图 | 结构复杂,辅以详细文字说明 |
| 地理地图/等高线图 | 文字描述 + 原图 | 辅以关键信息文字说明 |
| 数据统计图表(柱状图、饼图等) | SVG 重绘 | 精确还原数据值 |
步骤 2:详细解答
对题目进行详细、逐步的解答,要求:
- 审题分析:指出题目的已知条件和求解目标
- 解题思路:说明解题的大体思路和方法选择
- 详细步骤:分步骤写出完整的解题过程,每一步都要有清晰的推理说明
- 最终答案:明确给出最终答案,用醒目格式标注
- 关键知识点:列出这道题涉及的 所有 关键知识点(至少 2 个),每个知识点包含:
- 知识点名称
- 简要说明(一两句话解释该知识点的核心内容)
- 该知识点在本题中的应用方式 - 易错提醒:指出解这道题时容易犯的错误或需要注意的陷阱
解题语言风格:使用清晰、耐心、鼓励性的语言,适合中学生理解。数学公式使用 LaTeX 格式($...$ 行内,$$...$$ 行间)。
步骤 3:相似错题检测
在归档的同时,执行相似错题检索(检测结果不影响归档,归档照常进行):
- 读取错题库根目录下的
index.json文件 - 运行脚本
${CLAUDE_SKILL_DIR}/scripts/search_similar.py来检索相似错题:
bash python3 "${CLAUDE_SKILL_DIR}/scripts/search_similar.py" \ --index "<错题库根目录>/index.json" \ --subject "<学科>" \ --knowledge-points "<知识点1>,<知识点2>,..." \ --question-text "<题目文字摘要>" - 如果发现相似错题(同知识点的历史错题),在归档完成后向用户展示提醒:
- 列出相关的历史错题编号、题目摘要和对应知识点
- 主动提醒用户:"⚠️ 发现你之前在<知识点>上也做错过类似的题,建议回顾一下之前的错题,确保该知识点已经掌握。需要再看一遍之前的错题吗?"
- 如果用户后续表示要复习,再展示之前错题的完整内容 - 如果没有相似错题,简要告知用户这是该知识点的首次错题记录
步骤 4:归档存储(自动执行,无需用户确认)
解答完成后 立即自动归档,不需要询问用户是否归档:
- 确定学科目录:在错题库根目录下创建/找到对应学科文件夹,同时确保
images/和figures/子目录存在 - 复制原始图片:将图片复制到
<学科>/images/目录下,重命名为题目_<编号>_<日期>.{ext} - 保存重绘图形(如有):
- 如果步骤 1.5 生成了 SVG 重绘图形,将其保存到<学科>/figures/图形_<编号>_<日期>.svg
- 一道题可能包含多个图形,按图形_<编号>_<日期>_1.svg、图形_<编号>_<日期>_2.svg依次编号 - 生成 Markdown 文件:
- 按照${CLAUDE_SKILL_DIR}/assets/templates/question_template.md模板格式
- 保存到<学科>/<学科>_错题<编号>.md
- 编号从 001 开始递增,根据当前学科目录中已有的文件自动分配下一个编号 - 更新索引文件:
- 读取index.json(如不存在则创建)
- 按照${CLAUDE_SKILL_DIR}/references/index_schema.json中定义的 schema 添加新条目
- 写回index.json - 向用户确认:显示归档成功信息,包含存储路径和编号
工作流 B:导出 PDF
当用户请求导出错题为 PDF 时:
- 确认导出范围:
- 按学科导出(单学科或全部学科)
- 按时间范围导出
- 按知识点导出 - 运行导出脚本:
bash python3 "${CLAUDE_SKILL_DIR}/scripts/export_pdf.py" \ --source "<错题库根目录>" \ --subject "<学科/all>" \ --output "<错题库根目录>/exports/" \ --date-range "<起始日期>:<结束日期>" # 可选 - 导出的 PDF 包含:
- 封面页(学科名称、日期范围、错题数量)
- 目录
- 每道错题的完整内容(题目 + 解答 + 知识点)
- 按日期倒序排列 - 告知用户导出路径
工作流 C:复习模式
当用户请求复习或查看错题时:
- 读取
index.json,按用户指定的条件筛选:
- 按学科筛选
- 按知识点筛选
- 按日期范围筛选
- 按错误频率排序(同知识点出错次数多的优先) - 展示错题列表概览
- 用户选择具体错题后,展示完整的错题内容(先只展示题目,让用户尝试,再展示答案)
工作流 D:初始化错题库
当用户首次使用或需要创建新的错题库时:
python3 "${CLAUDE_SKILL_DIR}/scripts/init_archive.py" --path "<目标路径>"
该脚本将创建标准目录结构和空的 index.json、config.json。
三、重要规则
- 非学科内容一律不处理:收到图片后必须先执行步骤 0 的预筛选,非学科题目的图片不得进入解答和归档流程,避免对错题库内容造成干扰
- 始终用中文回复,包括解题过程、知识点说明等
- 数学公式一律使用 LaTeX 格式
- 每次归档前必须执行相似错题检测,这是帮助学生掌握薄弱知识点的关键功能
- Markdown 文件必须严格遵循模板格式,确保后续 PDF 导出的一致性
- JSON 索引必须保持数据完整性,每次修改后验证 JSON 格式正确性
- 图片路径使用相对路径,确保错题库可以跨设备迁移
- 编号严格递增,不得出现重复编号
- 知识点命名要规范统一,相同的知识点在不同错题中应使用完全相同的名称,以便精确匹配
- 含图形的题目必须进行图形处理:凡是题目中包含几何图形、函数图像、电路图、示意图等图形内容的,必须执行步骤 1.5 进行图形重绘或增强处理,确保归档后打印复习时图形清晰可读
- SVG 重绘必须精确:重绘的图形必须忠实还原原图中的所有标注、比例关系和空间结构,不得遗漏或篡改关键信息
四、支持文件说明
| 文件 | 路径 | 用途 |
|---|---|---|
| 错题 Markdown 模板 | ${CLAUDE_SKILL_DIR}/assets/templates/question_template.md |
单道错题的标准 Markdown 格式 |
| 索引 Schema | ${CLAUDE_SKILL_DIR}/references/index_schema.json |
index.json 的数据结构定义 |
| 相似错题检索脚本 | ${CLAUDE_SKILL_DIR}/scripts/search_similar.py |
在已有错题中搜索相似知识点的错题 |
| PDF 导出脚本 | ${CLAUDE_SKILL_DIR}/scripts/export_pdf.py |
将 Markdown 错题导出为格式化 PDF |
| 错题库初始化脚本 | ${CLAUDE_SKILL_DIR}/scripts/init_archive.py |
创建标准的错题库目录结构 |
| 示例错题 | ${CLAUDE_SKILL_DIR}/examples/sample_question.md |
一个完整的错题示例,展示期望的输出格式 |