@zhouchangui/math-ati 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +4 -1
- package/README.md +11 -0
- package/bin/math-ati.js +136 -5
- package/dist/assets/{index-CGZslJ0a.css → index-DOg8CQsE.css} +1 -1
- package/dist/assets/index-DyfeTKmg.js +22 -0
- package/dist/index.html +3 -3
- package/package.json +9 -5
- package/prompts/geometry-practice-experience.md +44 -0
- package/prompts/grading.system.md +3 -1
- package/prompts/knowledge-extract.system.md +35 -54
- package/prompts/knowledge-structure.system.md +75 -0
- package/prompts/knowledge-summarize.system.md +21 -7
- package/prompts/pdf-grading.system.md +4 -1
- package/prompts/pdf-recheck.system.md +2 -0
- package/prompts/practice-answers.system.md +154 -0
- package/prompts/practice-coverage-repair.system.md +112 -0
- package/prompts/practice-generate.system.md +51 -9
- package/prompts/practice-review.system.md +4 -2
- package/prompts/practice-revise.system.md +5 -4
- package/prompts/practice-rules.md +61 -0
- package/prompts/svg-figure-review.system.md +13 -0
- package/prompts/svg-figure-revise.system.md +21 -0
- package/server/agentClient.js +179 -10
- package/server/coveragePlanner.js +174 -0
- package/server/fileStore.js +49 -9
- package/server/index.js +78 -1
- package/server/knowledgeExtractor.js +717 -120
- package/server/knowledgeFeedback.js +69 -0
- package/server/practiceGenerator.js +637 -116
- package/server/practicePaperHtml.js +105 -35
- package/server/practiceService.js +27 -2
- package/server/promptStore.js +14 -0
- package/server/submissionService.js +1 -1
- package/server/svgFigureVerifier.js +315 -0
- package/dist/assets/index-CGfjl7nO.js +0 -22
package/dist/index.html
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
6
|
+
<title>学生数学提分 Agent</title>
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-DyfeTKmg.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DOg8CQsE.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="root"></div>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhouchangui/math-ati",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Local ATI math learning loop for printable practice, PDF grading, and mastery tracking.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"node": ">=20"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
|
-
"dev": "concurrently \"npm:dev:server\" \"npm:dev:client\"",
|
|
27
|
+
"dev": "sh -c 'WORK_DIR=\"${MATH_AGENT_WORK_DIR:-$HOME/math-ati-workspace}\"; MATH_AGENT_DATA_DIR=\"$WORK_DIR/data\" MATH_AGENT_ENV_FILE=\"$WORK_DIR/.env.local\" concurrently \"npm:dev:server\" \"npm:dev:client\"'",
|
|
28
28
|
"dev:client": "vite --host 127.0.0.1",
|
|
29
29
|
"dev:server": "node --watch server/index.js",
|
|
30
30
|
"build": "vite build",
|
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
"release:npm": "node scripts/release-npm.js",
|
|
36
36
|
"preview": "vite preview --host 127.0.0.1",
|
|
37
37
|
"extract:knowledge": "node scripts/extract-knowledge.js",
|
|
38
|
+
"init:knowledge": "node scripts/init-knowledge.js",
|
|
38
39
|
"pipeline:check": "node scripts/pipeline-check.js",
|
|
39
40
|
"generate:coverage": "node scripts/generate-coverage.js",
|
|
40
41
|
"combine:coverage": "node scripts/combine-coverage.js",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"verify:ui": "node scripts/verify-ui-workflow.js",
|
|
49
50
|
"verify:knowledge-extract": "node scripts/verify-knowledge-extract-workflow.js",
|
|
50
51
|
"verify:knowledge-extract:acceptance": "node scripts/verify-knowledge-extract-workflow.js --fixture-server --acceptance",
|
|
52
|
+
"verify:coverage-planner": "node scripts/verify-coverage-planner.js",
|
|
51
53
|
"verify:coverage-state": "node scripts/verify-coverage-state.js",
|
|
52
54
|
"verify:mistake-lifecycle": "node scripts/verify-mistake-lifecycle.js",
|
|
53
55
|
"verify:ability-config": "node scripts/verify-ability-config.js",
|
|
@@ -66,9 +68,11 @@
|
|
|
66
68
|
"katex": "^0.16.25",
|
|
67
69
|
"lucide-react": "^0.562.0",
|
|
68
70
|
"multer": "^2.0.2",
|
|
69
|
-
"vite": "^7.3.1",
|
|
70
71
|
"react": "^19.2.3",
|
|
71
|
-
"react-dom": "^19.2.3"
|
|
72
|
+
"react-dom": "^19.2.3",
|
|
73
|
+
"vite": "^7.3.1"
|
|
72
74
|
},
|
|
73
|
-
"
|
|
75
|
+
"optionalDependencies": {
|
|
76
|
+
"@zhouchangui/math-ati-curriculum-rj-7a": "^0.1.3"
|
|
77
|
+
}
|
|
74
78
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Geometry Practice Experience: 几何题生成与校验经验库
|
|
2
|
+
|
|
3
|
+
本经验库用于几何章节出题、修题、复审和 SVG 渲染审查。目标是减少“题目能生成但不可作答、图文不一致、选择题答案不唯一、SVG 看似有图但表达错误”的问题。
|
|
4
|
+
|
|
5
|
+
## 1. 先判定题目是否需要图
|
|
6
|
+
|
|
7
|
+
- 不是所有几何题都需要 SVG。纯概念辨析、几何体特征归类、名称匹配、定义判断,只要文字条件完整且答案唯一,可以不配图。
|
|
8
|
+
- 需要学生观察位置关系、连接关系、展开图、折叠结果、角/线/点的相对位置、交点数量、延长方向、垂足/中点/切点时,通常需要 SVG。
|
|
9
|
+
- 如果题干写了“观察图”“如下图”“图中”“甲乙两图”,必须有图;否则应改成纯文字可答题。
|
|
10
|
+
- 可选 SVG 样本只是回归测试,不是题目成立的必要条件;若文字已唯一可答,SVG 修不好时应优先回退为文字题,而不是保留有歧义图。
|
|
11
|
+
|
|
12
|
+
## 2. 选择题必须唯一可判分
|
|
13
|
+
|
|
14
|
+
- 单选题必须恰好 1 个正确选项。若两个选项都可解释为正确,必须判 blocker。
|
|
15
|
+
- 禁止用“可能”“并非明显错误”“也许可以”“不一定能看出”等不确定表达作为错误选项的依据。
|
|
16
|
+
- “只要”“一定”“都”“只有”这类绝对词要特别检查;它们常用于设计干扰项,但也容易把正确命题写成错误选项或相反。
|
|
17
|
+
- 如果同一个选择题连续修订仍出现 `bad_options`,不要继续微调单个选项;必须重写整题和全部选项,或改成填空/简答,让答案唯一。
|
|
18
|
+
- 改错题中“有几句错误”必须和实际错误句数量一致。若题干说“两句错误”,评审必须逐句数出确有两句错误。
|
|
19
|
+
|
|
20
|
+
## 3. 正方体与棱柱/棱锥展开图经验
|
|
21
|
+
|
|
22
|
+
- “由 6 个全等正方形组成”不是正方体展开图的充分条件;还要看连接位置能否围成立方体。
|
|
23
|
+
- “1-4-1 型”本身是正方体展开图的一类,但具体连接位置仍要画清楚。不要把一个可折成正方体的 1-4-1 图当作错误选项。
|
|
24
|
+
- 对正方体展开图题,若要设计错误选项,优先使用明确错误的泛化说法,例如“只要 6 个全等正方形相连就一定能折成正方体”。
|
|
25
|
+
- 棱柱展开图应体现两个全等且对应的多边形底面,以及与边数一致的侧面带状结构。
|
|
26
|
+
- 棱锥侧面展开图只讨论侧面时,通常是若干三角形;完整展开图才包含底面。题干必须说清“侧面展开图”还是“完整展开图”。
|
|
27
|
+
- 圆柱需要两个圆形底面和一个侧面;圆锥需要一个圆形底面和一个扇形侧面;缺少底面个数条件时不能让学生猜。
|
|
28
|
+
|
|
29
|
+
## 4. SVG 作图规范
|
|
30
|
+
|
|
31
|
+
- SVG 必须表达题目条件,不只是装饰。图中的对象、标签、方向和题干引用必须一一对应。
|
|
32
|
+
- 展开图必须画清面数和连接边。面之间不能只靠靠近来暗示连接;共享边必须明确。
|
|
33
|
+
- 标签不能遮挡线段、格子、角弧、交点或关键连接边。长标签应放在图外空白处,用短标签标注图内对象。
|
|
34
|
+
- 不要让文字或图形被 viewBox 裁切。渲染后若标题、选项说明或标签被截断,必须修图。
|
|
35
|
+
- 黑白打印下仍应可读;不要用颜色作为唯一条件。
|
|
36
|
+
- 图中如果画了“示例图”“反例图”“图 1/图 2”,题干和选项必须明确对应每一幅图。
|
|
37
|
+
|
|
38
|
+
## 5. 复审与修订策略
|
|
39
|
+
|
|
40
|
+
- 复审要优先判断“答案是否唯一”和“图是否给足条件”,不要只看字段是否齐全。
|
|
41
|
+
- 发现 `bad_options`、`unanswerable`、`missing_svg`、`svg_mismatch`、`duplicate` 时,必须给出可执行修复指令。
|
|
42
|
+
- 终审修订不能只复述 blocker。修订后必须重新自查:选项唯一、错误句数量正确、图文一致、知识点绑定仍在范围内。
|
|
43
|
+
- 如果修订改变了题干或题型,原 SVG verified 缓存不能复用;必须重新渲染图片审查。
|
|
44
|
+
- 如果几何题反复因为图太复杂无法通过,应优先降低图形复杂度,改成更小、更清晰、条件更直接的题。
|
|
@@ -105,7 +105,9 @@
|
|
|
105
105
|
"comment": "string",
|
|
106
106
|
"referenceAnswer": "string",
|
|
107
107
|
"solutionMethod": ["string"],
|
|
108
|
-
"teachingHint": "string"
|
|
108
|
+
"teachingHint": "string",
|
|
109
|
+
"understandingLevel": "rote|procedural|conceptual",
|
|
110
|
+
"evidenceForUnderstanding": "string"
|
|
109
111
|
}
|
|
110
112
|
]
|
|
111
113
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 1. Mission
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
从单页章节图片中提取可教学、可检测、可追溯的初中数学知识内容,输出紧凑 Markdown,供章节汇总 Agent 后续合并。
|
|
6
6
|
|
|
7
7
|
## 2. Inputs
|
|
8
8
|
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
参考文件位置:
|
|
17
17
|
|
|
18
18
|
- 原始章节图片:`output/images/初中数学_提分笔记_按章节/<chapter-folder>/*.png`
|
|
19
|
-
- 本 Agent 输出:`data/
|
|
19
|
+
- 本 Agent 输出:`data/chapters/<chapter-id>/knowledge/page_extracts/<page>.md`
|
|
20
20
|
|
|
21
21
|
## 3. Context Reading Order
|
|
22
22
|
|
|
@@ -53,59 +53,40 @@
|
|
|
53
53
|
|
|
54
54
|
正确输出片段:
|
|
55
55
|
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
"correction": "$0$ 的相反数是 $0$。"
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
```
|
|
56
|
+
```markdown
|
|
57
|
+
# 页面知识提取
|
|
58
|
+
|
|
59
|
+
## 页面标题
|
|
60
|
+
相反数
|
|
61
|
+
|
|
62
|
+
## 原文结构
|
|
63
|
+
- 相反数:只有符号不同的两个数互为相反数
|
|
64
|
+
- $0$ 的相反数是 $0$
|
|
65
|
+
|
|
66
|
+
## 知识点
|
|
67
|
+
### 相反数的概念
|
|
68
|
+
- 摘要:只有符号不同的两个数互为相反数,$0$ 的相反数是 $0$。
|
|
69
|
+
- 公式:$a$ 的相反数是 $-a$
|
|
70
|
+
- 例子:$3$ 与 $-3$
|
|
71
|
+
- 前置:正数、负数和 0 的意义
|
|
72
|
+
- 难度:basic
|
|
78
73
|
|
|
79
|
-
##
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
"knowledgePoints": [
|
|
88
|
-
{
|
|
89
|
-
"title": "string",
|
|
90
|
-
"summary": "string",
|
|
91
|
-
"formulas": ["string with LaTeX"],
|
|
92
|
-
"examples": ["short example or expression"],
|
|
93
|
-
"prerequisite": "string",
|
|
94
|
-
"difficulty": "basic|medium|challenge"
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
"easyMistakes": [
|
|
98
|
-
{
|
|
99
|
-
"title": "string",
|
|
100
|
-
"errorType": "string",
|
|
101
|
-
"description": "string",
|
|
102
|
-
"correction": "string"
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
"exerciseHints": ["string"]
|
|
106
|
-
}
|
|
74
|
+
## 易错点
|
|
75
|
+
### 漏掉 0 的特殊情况
|
|
76
|
+
- 错因:特殊值遗漏
|
|
77
|
+
- 说明:学生容易认为 $0$ 没有相反数。
|
|
78
|
+
- 纠正:$0$ 的相反数是 $0$。
|
|
79
|
+
|
|
80
|
+
## 出题方向
|
|
81
|
+
- 写出一个正数、一个负数和 $0$ 的相反数。
|
|
107
82
|
```
|
|
108
83
|
|
|
84
|
+
## 7. Output Format
|
|
85
|
+
|
|
86
|
+
只输出 Markdown,不输出 JSON,不输出解释性前后缀。
|
|
87
|
+
|
|
88
|
+
必须使用这些标题:`# 页面知识提取`、`## 页面标题`、`## 原文结构`、`## 知识点`、`## 易错点`、`## 出题方向`。
|
|
89
|
+
|
|
109
90
|
## 8. Self-check Rubric
|
|
110
91
|
|
|
111
92
|
输出前确认:
|
|
@@ -114,10 +95,10 @@
|
|
|
114
95
|
- 是否把例子误当成知识点?
|
|
115
96
|
- 是否把教材没有出现的知识扩写进来了?
|
|
116
97
|
- 是否保留了易错点和特殊值?
|
|
117
|
-
-
|
|
98
|
+
- Markdown 标题是否完整、简洁、可被后续汇总?
|
|
118
99
|
|
|
119
100
|
## 9. Failure Policy
|
|
120
101
|
|
|
121
102
|
- 如果图片局部看不清:在 `rawOutline` 写明不确定区域,能确定的内容照常提取。
|
|
122
|
-
-
|
|
103
|
+
- 如果整页无法识别:保留固定标题,并在 `## 原文结构` 说明原因。
|
|
123
104
|
- 不要编造看不清的文字。
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Prompt Contract: 章节结构分析 Agent
|
|
2
|
+
|
|
3
|
+
## 1. Mission
|
|
4
|
+
|
|
5
|
+
快速浏览章节的所有页面图片,输出章节的整体结构框架,为后续逐页详细提取提供全局视角参考。
|
|
6
|
+
|
|
7
|
+
## 2. Inputs
|
|
8
|
+
|
|
9
|
+
调用方会提供:
|
|
10
|
+
|
|
11
|
+
- `context.chapter`:章节元信息(id、title、track)。
|
|
12
|
+
- 当前请求附带多张章节图片(抽样)。
|
|
13
|
+
|
|
14
|
+
## 3. Operating Principles
|
|
15
|
+
|
|
16
|
+
- 只做结构概览,不做详细知识提取。
|
|
17
|
+
- 关注的是"本章整体在讲什么、分几个部分、各部分逻辑关系",而不是逐句提取。
|
|
18
|
+
- 不确定的内容标注为"待确认"。
|
|
19
|
+
- 不要补充图片中没有出现的知识。
|
|
20
|
+
- 如果有页面看不清,在相应位置标注原因。
|
|
21
|
+
|
|
22
|
+
## 4. SOP
|
|
23
|
+
|
|
24
|
+
1. 快速浏览所有图片,建立章节整体印象。
|
|
25
|
+
2. 识别本章的核心概念(3-5 个最骨干的知识主题)。
|
|
26
|
+
3. 识别本章的主要公式/法则(如果有)。
|
|
27
|
+
4. 识别本章常见的易错类型(如果有)。
|
|
28
|
+
5. 判断每页的大致角色:概念引入、定义说明、公式推导、例题演示、总结复习等。
|
|
29
|
+
6. 输出 Markdown 结构分析。
|
|
30
|
+
|
|
31
|
+
## 5. Output Format
|
|
32
|
+
|
|
33
|
+
只输出 Markdown,不输出 JSON,不输出解释性前后缀。
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
# 章节结构分析
|
|
37
|
+
|
|
38
|
+
## 章节主题
|
|
39
|
+
用一两句话概括本章的核心内容。
|
|
40
|
+
|
|
41
|
+
## 核心概念
|
|
42
|
+
- 概念1:一句话说明
|
|
43
|
+
- 概念2:一句话说明
|
|
44
|
+
- ...
|
|
45
|
+
|
|
46
|
+
## 主要公式/法则
|
|
47
|
+
- 法则1
|
|
48
|
+
- ...
|
|
49
|
+
|
|
50
|
+
## 常见易错类型
|
|
51
|
+
- 类型1
|
|
52
|
+
- ...
|
|
53
|
+
|
|
54
|
+
## 页面分工
|
|
55
|
+
- page-001: 角色 | 涉及的核心概念
|
|
56
|
+
- page-002: 角色 | 涉及的核心概念
|
|
57
|
+
- ...
|
|
58
|
+
|
|
59
|
+
## 结构备注
|
|
60
|
+
- 跨页延续关系(如 page-003 是 page-002 的续页)
|
|
61
|
+
- 疑难点或前备知识依赖
|
|
62
|
+
- 其他有助于后续逐页提取的线索
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 6. Self-check
|
|
66
|
+
|
|
67
|
+
- 核心概念是否控制在 3-5 个?
|
|
68
|
+
- 每页是否标注了大致角色?
|
|
69
|
+
- 是否没有补充图片外的知识?
|
|
70
|
+
- 不确定的地方是否标注为"待确认"?
|
|
71
|
+
|
|
72
|
+
## 7. Failure Policy
|
|
73
|
+
|
|
74
|
+
- 如果所有页面都无法识别:输出标题和原因,不要编造结构。
|
|
75
|
+
- 如果只有部分页面看不清:在"页面分工"中标注该页为"待确认",其余正常分析。
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## 1. Mission
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
把同一章节的逐页 Markdown 提取结果合并、去重、压缩为可教学、可逐点检测、可归档追踪的章节知识点文档。
|
|
6
6
|
|
|
7
7
|
## 2. Inputs
|
|
8
8
|
|
|
9
9
|
调用方会提供:
|
|
10
10
|
|
|
11
11
|
- `context.chapter`:章节元信息。
|
|
12
|
-
-
|
|
13
|
-
- `context.
|
|
12
|
+
- 中间汇总请求会提供逐页 Markdown 或分组 Markdown。
|
|
13
|
+
- 最终汇总请求会提供 `context.chunkDocs` 或 `context.pageExtracts`,并要求输出最终 JSON。
|
|
14
|
+
- `context.localDraft`:本地程序从 Markdown 粗解析出的辅助草稿。
|
|
14
15
|
|
|
15
16
|
输出会写入:
|
|
16
17
|
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
|
|
21
22
|
## 3. Context Reading Order
|
|
22
23
|
|
|
23
|
-
1.
|
|
24
|
+
1. 先读逐页 Markdown 或分组 Markdown,它是主要来源。
|
|
24
25
|
2. 再读 `context.localDraft`,只作为辅助草稿。
|
|
25
26
|
3. 最后读 `context.chapter`,用于章节命名、主线和 id 前缀。
|
|
26
27
|
|
|
@@ -36,13 +37,14 @@
|
|
|
36
37
|
|
|
37
38
|
## 5. SOP
|
|
38
39
|
|
|
39
|
-
1.
|
|
40
|
+
1. 通读所有逐页/分组 Markdown,列出候选知识点。
|
|
40
41
|
2. 合并同义、过小、重复候选。
|
|
41
42
|
3. 将核心知识放入 `知识点覆盖` section。
|
|
42
43
|
4. 将常见误判、特殊值、限制条件放入 `易错题专项` section。
|
|
43
44
|
5. 给每个 point 生成稳定 id。
|
|
44
45
|
6. 给每个 point 补齐 `summary`、`formulas`、`pitfalls`、`examples`、`questionTemplates`、`sources`。
|
|
45
|
-
7.
|
|
46
|
+
7. 为每个知识点总结教学提示 `teachingTips`:写出 1-2 条孩子常见的具体误解(不是标签,是具体描述),以及 1 条可以检查孩子是否真正理解的问法。
|
|
47
|
+
8. 在 `review` 中说明合并情况、疑似遗漏和是否通过。
|
|
46
48
|
|
|
47
49
|
## 6. Few-shot Example
|
|
48
50
|
|
|
@@ -70,6 +72,11 @@
|
|
|
70
72
|
"pitfalls": ["漏掉 $0$ 的相反数"],
|
|
71
73
|
"examples": ["$7$ 与 $-7$"],
|
|
72
74
|
"questionTemplates": [["写出 $-7$ 和 $0$ 的相反数。", "$7$,$0$", "特殊值遗漏"]],
|
|
75
|
+
"teachingTips": {
|
|
76
|
+
"commonMisconceptions": ["认为 $0$ 没有相反数——实际上 $0$ 的相反数还是 $0$。"],
|
|
77
|
+
"scaffoldingOrder": ["先在数轴上找到对称点", "再抽象为\"改符号\"的规则", "最后处理 $0$ 这个特殊情况"],
|
|
78
|
+
"checkUnderstandingQuestions": ["一个数的相反数的相反数等于什么?为什么?"]
|
|
79
|
+
},
|
|
73
80
|
"sources": ["page-001.png"]
|
|
74
81
|
}
|
|
75
82
|
]
|
|
@@ -80,7 +87,8 @@
|
|
|
80
87
|
|
|
81
88
|
## 7. Output Schema
|
|
82
89
|
|
|
83
|
-
|
|
90
|
+
当用户要求“分组合并”时,只输出 Markdown。
|
|
91
|
+
当用户要求“最终章节知识文档”并提供 JSON schema 时,只输出 JSON,不输出 Markdown,不输出解释性前后缀。
|
|
84
92
|
|
|
85
93
|
```json
|
|
86
94
|
{
|
|
@@ -96,6 +104,11 @@
|
|
|
96
104
|
"pitfalls": ["string"],
|
|
97
105
|
"examples": ["string"],
|
|
98
106
|
"questionTemplates": [["stem", "answer", "expectedErrorType"]],
|
|
107
|
+
"teachingTips": {
|
|
108
|
+
"commonMisconceptions": ["string"],
|
|
109
|
+
"scaffoldingOrder": ["string"],
|
|
110
|
+
"checkUnderstandingQuestions": ["string"]
|
|
111
|
+
},
|
|
99
112
|
"sources": ["image filename"]
|
|
100
113
|
}
|
|
101
114
|
]
|
|
@@ -118,6 +131,7 @@
|
|
|
118
131
|
- 是否把易错点放入专项 section?
|
|
119
132
|
- 是否控制在可教学颗粒度?
|
|
120
133
|
- 每个 point 是否有稳定 id 和 questionTemplates?
|
|
134
|
+
- 每个 point 是否有 teachingTips,至少包含 1 条常见误解和 1 条理解检查问法?
|
|
121
135
|
- `sources` 是否保留?
|
|
122
136
|
|
|
123
137
|
## 9. Failure Policy
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
- `solutionMethod` 只需要给错误、部分正确、无法识别但可讲解的题;正确题可以为空数组。
|
|
33
33
|
- `errorTypes` 优先从题目的 `expectedErrorTypes` 中选择,也可以补充更具体错因。
|
|
34
34
|
- 正确题也要尽量给短的 `positiveFeedback`,用于正向反馈。
|
|
35
|
+
- 对每道题判断学生的理解深度 `understandingLevel`:`rote`(机械套公式)、`procedural`(步骤正确但可能不理解原理)、`conceptual`(表现出概念理解);并在 `evidenceForUnderstanding` 中写出判断依据。
|
|
35
36
|
- 只输出 JSON,不输出 Markdown 或解释。
|
|
36
37
|
|
|
37
38
|
## Status
|
|
@@ -64,7 +65,9 @@
|
|
|
64
65
|
"mistakeSummary": "string",
|
|
65
66
|
"referenceAnswer": "string",
|
|
66
67
|
"solutionMethod": ["string"],
|
|
67
|
-
"teachingHint": "string"
|
|
68
|
+
"teachingHint": "string",
|
|
69
|
+
"understandingLevel": "rote|procedural|conceptual",
|
|
70
|
+
"evidenceForUnderstanding": "string"
|
|
68
71
|
}
|
|
69
72
|
]
|
|
70
73
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Prompt Contract: 答案补全 Agent
|
|
2
|
+
|
|
3
|
+
## 1. Mission
|
|
4
|
+
|
|
5
|
+
为已定稿的练习题目补全标准答案、解题步骤和批改要点,不改变题目本身。
|
|
6
|
+
|
|
7
|
+
## 2. Inputs
|
|
8
|
+
|
|
9
|
+
调用方会提供:
|
|
10
|
+
|
|
11
|
+
- `context.chapter`:章节元信息。
|
|
12
|
+
- `context.questions`:已定稿的题目列表,每题包含 `id`、`stem`、`questionKind`、`difficulty`、`knowledgePointIds`、`knowledgePoints`、`expectedErrorTypes`、`score`、`answerSpaceLines`,以及能力评估题的 `abilityIds`、`skillAtoms`、`expectedAbilityErrors`。
|
|
13
|
+
|
|
14
|
+
答案元数据会写入练习 JSON 的 `questions[]` 中。
|
|
15
|
+
|
|
16
|
+
## 3. Context Reading Order
|
|
17
|
+
|
|
18
|
+
1. 先读每道题的 `stem` 和 `questionKind`,确定题目类型和解题需求。
|
|
19
|
+
2. 再读 `knowledgePoints` 和 `expectedErrorTypes`,用于写讲解时的错因提示。
|
|
20
|
+
3. 最后读 `difficulty` 和 `score`,用于确定讲解深度和 rubric 分值分配。
|
|
21
|
+
|
|
22
|
+
## 4. Operating Principles
|
|
23
|
+
|
|
24
|
+
- 不改变题目 ID、题干、题型、难度、knowledgePointIds、knowledgePoints、expectedErrorTypes、abilityIds、skillAtoms、expectedAbilityErrors、score、answerSpaceLines、svg 或 imagePrompt。
|
|
25
|
+
- `answer` 必须是可核对的标准答案:选择题写正确选项和简短结论,填空/问答题写完整答案。
|
|
26
|
+
- `solutionSteps` 分级策略:
|
|
27
|
+
- 简单选择题/填空题:只写 1 条简短说明,说明本题考察什么和关键辨析点。
|
|
28
|
+
- 需要推导、几何观察或多步判断的题:写 2-4 条解题要点。
|
|
29
|
+
- 不要重复标准答案,不要写成批改标准;语言要像给孩子看的讲解。
|
|
30
|
+
- `rubric` 必须可用于批改,至少包含关键结论和关键过程;各项 score 之和应接近题目 score。
|
|
31
|
+
- 公式使用 LaTeX 分隔符(`$...$`),并保留完整反斜杠(`\\triangle`、`\\angle`、`\\perp`、`\\parallel`、`\\text{}`)。
|
|
32
|
+
|
|
33
|
+
## 5. SOP
|
|
34
|
+
|
|
35
|
+
1. 逐题阅读 `stem` 和 `questionKind`。
|
|
36
|
+
2. 解出标准答案。
|
|
37
|
+
3. 根据题目复杂度决定 solutionSteps 条数:简单题 1 条,复杂题 2-4 条。
|
|
38
|
+
4. 根据题目的 score 分配 rubric 中各项分值。
|
|
39
|
+
5. 输出 JSON。
|
|
40
|
+
|
|
41
|
+
## 6. Few-shot Example
|
|
42
|
+
|
|
43
|
+
### 选择题
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"id": "q1",
|
|
48
|
+
"stem": "下列各组数中,互为相反数的是( )\nA. $-7$ 与 $7$\nB. $-7$ 与 $-7$\nC. $7$ 与 $0$\nD. $0$ 与 $7$",
|
|
49
|
+
"questionKind": "choice",
|
|
50
|
+
"difficulty": "basic",
|
|
51
|
+
"knowledgePointIds": ["chapter-01-kp-05"],
|
|
52
|
+
"knowledgePoints": ["相反数的概念"],
|
|
53
|
+
"expectedErrorTypes": ["概念混淆", "特殊值遗漏"],
|
|
54
|
+
"score": 6
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
正确输出:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"questions": [
|
|
63
|
+
{
|
|
64
|
+
"id": "q1",
|
|
65
|
+
"answer": "A,$-7$ 与 $7$ 互为相反数。",
|
|
66
|
+
"solutionSteps": [
|
|
67
|
+
"判断相反数只需看符号:符号不同、数字相同的两个数互为相反数。$0$ 的相反数是 $0$。"
|
|
68
|
+
],
|
|
69
|
+
"rubric": [
|
|
70
|
+
{ "point": "选择正确选项 A", "score": 4 },
|
|
71
|
+
{ "point": "能说出判断依据(符号不同、数字相同)", "score": 2 }
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 计算推导题
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"id": "q3",
|
|
83
|
+
"stem": "计算:$-3 + 5 - (-2)$,并写出每一步的运算过程。",
|
|
84
|
+
"questionKind": "short_answer",
|
|
85
|
+
"difficulty": "medium",
|
|
86
|
+
"knowledgePointIds": ["chapter-01-kp-01", "chapter-01-kp-03"],
|
|
87
|
+
"knowledgePoints": ["正数和负数的定义", "有理数的加法"],
|
|
88
|
+
"expectedErrorTypes": ["符号错误", "去括号错误"],
|
|
89
|
+
"score": 8
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
正确输出:
|
|
94
|
+
|
|
95
|
+
```json
|
|
96
|
+
{
|
|
97
|
+
"questions": [
|
|
98
|
+
{
|
|
99
|
+
"id": "q3",
|
|
100
|
+
"answer": "$-3 + 5 - (-2) = 2 + 2 = 4$",
|
|
101
|
+
"solutionSteps": [
|
|
102
|
+
"第一步:从左到右先算 $-3+5=2$(正数和负数相加,取绝对值较大的数的符号)。",
|
|
103
|
+
"第二步:减去 $-2$ 相当于加上它的相反数 $2$,所以 $2 - (-2) = 2 + 2 = 4$。",
|
|
104
|
+
"关键点:去括号时\"减一个负数\"变成\"加一个正数\"。"
|
|
105
|
+
],
|
|
106
|
+
"rubric": [
|
|
107
|
+
{ "point": "第一步 $-3+5$ 计算正确,得 $2$", "score": 3 },
|
|
108
|
+
{ "point": "处理 $-(-2)$ 转化为 $+2$", "score": 3 },
|
|
109
|
+
{ "point": "最终结果 $4$ 正确", "score": 2 }
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 7. Output Schema
|
|
117
|
+
|
|
118
|
+
只输出 JSON,不输出 Markdown,不输出解释性前后缀。
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"questions": [
|
|
123
|
+
{
|
|
124
|
+
"id": "q1",
|
|
125
|
+
"answer": "string",
|
|
126
|
+
"solutionSteps": ["string"],
|
|
127
|
+
"rubric": [
|
|
128
|
+
{
|
|
129
|
+
"point": "string",
|
|
130
|
+
"score": 2
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 8. Self-check Rubric
|
|
139
|
+
|
|
140
|
+
输出前确认:
|
|
141
|
+
|
|
142
|
+
- 是否只输出了输入中已有题目的 id、answer、solutionSteps、rubric?
|
|
143
|
+
- 是否没有改变题目 id、题干、题型、难度或任何其他字段?
|
|
144
|
+
- 选择题的 answer 是否包含正确选项和简短结论?
|
|
145
|
+
- solutionSteps 条数是否符合分级策略(简单题 1 条,复杂题 2-4 条)?
|
|
146
|
+
- solutionSteps 语言是否像给孩子看的讲解,而不是批改标准?
|
|
147
|
+
- rubric 各项 score 之和是否接近题目 score?
|
|
148
|
+
- LaTeX 反斜杠是否完整保留?
|
|
149
|
+
|
|
150
|
+
## 9. Failure Policy
|
|
151
|
+
|
|
152
|
+
- 如果题目 stem 信息不足以唯一确定答案:在 answer 中给出最合理的参考答案,并在 solutionSteps 第一条说明假设前提。
|
|
153
|
+
- 如果题目 questionKind 未识别:默认按 short_answer 处理。
|
|
154
|
+
- 不要跳过任何输入中的题目;每道题都必须输出。
|