dsh-mastery-loop 0.0.0-stage → 0.2.0
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/CHANGELOG.md +49 -0
- package/LICENSE +21 -0
- package/README.md +81 -2
- package/cordis.patch.yml +10 -0
- package/lib/index.js +9 -0
- package/package.json +47 -4
- package/skills/mastery-loop/SKILL.md +201 -0
- package/skills/mastery-loop/exam-templates.md +102 -0
- package/skills/mastery-loop/scripts/_lib.mjs +408 -0
- package/skills/mastery-loop/scripts/aggregate.mjs +155 -0
- package/skills/mastery-loop/scripts/graph.mjs +448 -0
- package/skills/mastery-loop/scripts/ledger.mjs +223 -0
- package/skills/mastery-loop/scripts/rewrite-links.mjs +81 -0
- package/skills/mastery-loop/scripts/scan.mjs +276 -0
- package/skills/mastery-loop/scripts/validate.mjs +181 -0
- package/skills/mastery-loop/templates.md +255 -0
- package/skills/mastery-loop-setup/SKILL.md +161 -0
- package/skills/mastery-loop-setup/seeds/config.json +39 -0
- package/skills/mastery-loop-setup/seeds/error-taxonomy.json +4 -0
- package/skills/mastery-loop-setup/seeds/errors.jsonl +1 -0
- package/skills/mastery-loop-setup/seeds/graph.json +13 -0
- package/skills/mastery-loop-setup/seeds/ledger.jsonl +2 -0
- package/skills/mastery-loop-setup/seeds/moc.md +15 -0
- package/skills/mastery-loop-setup/seeds/note.md +33 -0
- package/skills/mastery-loop-setup/seeds/paper-format.json +15 -0
- package/skills/mastery-loop-setup/seeds/state.jsonl +2 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
**架构重写(不兼容)** —— 库的布局、文件格式、脚本边界全变了。已有的库要重新对齐一次。
|
|
6
|
+
|
|
7
|
+
**修复(自 0.1.0 起就坏的 bug)**:`mastery-loop-setup` 的 frontmatter 是**非法 YAML** —— `description` 写成裸标量,里面含 `mastery-loop: explore` 的「冒号 + 空格」。DSH 加载器对非法 frontmatter 的处理是**把整个 skill 丢弃**,所以 **`/mastery-loop-setup` 从 0.1.0 起就从未出现过**(模型侧、用户侧都没有),不是开关问题。已改成 `>-` 折行块标量(文字未改)。
|
|
8
|
+
|
|
9
|
+
**布局**:工作区根下两个并列文件夹 —— `kb/`(内容区,给人看)+ `sys/`(机器区,给脚本读)。
|
|
10
|
+
|
|
11
|
+
- `kb/knowledge/` 知识点 · `kb/MOC/` 聚合产物(镜像分类层级)
|
|
12
|
+
- `sys/config.json` · `sys/graph.json` · `sys/ledger.jsonl` · `sys/errors.jsonl` · `sys/error-taxonomy.json` · `sys/paper-format.json` · `sys/state.jsonl`
|
|
13
|
+
- `sys/changes.jsonl` 只在「没有 git 且用户不装 git」时启用
|
|
14
|
+
|
|
15
|
+
**知识点契约**
|
|
16
|
+
|
|
17
|
+
- `归属` = **来源文件**(多值、必填);**删 `课程:` / `主题:` / `难度:`** —— 课程与讲次改为**从 `归属` 解析**
|
|
18
|
+
- 正文固定六节,**删 `## 平行关联`**;`## 后置知识` 由图反算、不手写
|
|
19
|
+
- 链接一律**带路径、相对工作区根、带后缀、带别名**
|
|
20
|
+
|
|
21
|
+
**分类与范围**:分类是**全库级定义**(层数不固定、每层一条解析规则、类值经用户确认后写进 config);**范围 = 分类里的一个或多个类值**。
|
|
22
|
+
|
|
23
|
+
**关系图**:`sys/graph.json`(`用途` / `规则` / `coverage` / `edges`);边带 **≤30 字**理由;**后置由图反算**;**六项校验**(双向自洽 / 无自链 / 无悬空 / 同段无重复 / 前后置互斥 / 前置两两不可比)。
|
|
24
|
+
|
|
25
|
+
**聚合与两区**:`kb/MOC/` 的**机器区**由 `aggregate.mjs` 从「`归属` + 图」生成并覆盖;**手写区**(主线、脉络、考点提示)脚本**永不碰**。
|
|
26
|
+
|
|
27
|
+
**脚本边界**:脚本只做重复性、机械性、不需要变通的事(校验 / 渲染 / 聚合 / 哈希跳过 / 账本运算 / 批量写回);判断前置、写理由、出题、批改、**错误原因逐字去重**留给 agent。
|
|
28
|
+
|
|
29
|
+
**git 不硬依赖**:有 git 就用它承担历史(**不自动 commit、绝不 push**);没有且用户不装 → 回退 `sys/changes.jsonl`。
|
|
30
|
+
|
|
31
|
+
**其它**:删掉 `index.md`(索引 = 聚合结果的层级视图);Miyo 仍为**可选**、发布版不依赖。
|
|
32
|
+
|
|
33
|
+
## 0.1.0
|
|
34
|
+
|
|
35
|
+
首个版本。
|
|
36
|
+
|
|
37
|
+
**两个 skill**:
|
|
38
|
+
|
|
39
|
+
- **`mastery-loop`** —— 复习闭环。模型可自动调用,也可手动 `/mastery-loop`。
|
|
40
|
+
- **`mastery-loop-setup`** —— 一次性初始化。**纯手动**(`disable-model-invocation`),只响应 `/mastery-loop-setup`。
|
|
41
|
+
|
|
42
|
+
**内容**:
|
|
43
|
+
|
|
44
|
+
- 出题 → 批改 → 再出题,直到逐点达标(`总共出过 ≥ 5` 且 `熟练程度 ≥ 目标正确率`)
|
|
45
|
+
- **每题必须写思维链**;批改**先判思维链、再判答案**;**蒙对不算对**
|
|
46
|
+
- 错误原因**逐字复用**、按知识点分组、追加日期 → 可统计
|
|
47
|
+
- 错误原因写法**借用 ASD-STE100 原则**(≤20 词、一句一个偏移、动词开头)
|
|
48
|
+
- 初始化生成 **6 个根目录文件**,并可用 `scripts/validate.mjs` **机械校验**
|
|
49
|
+
- 不做间隔重复排程(SM-2 那套)—— 那该由日历与考试表决定
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Noct2vis
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,82 @@
|
|
|
1
|
-
#
|
|
1
|
+
# mastery-loop
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**A general exam-revision loop for DeepSeek Harness.** It reads your course materials and your notes vault, then drills you — question, grade, question again — until **every knowledge point** reaches your target accuracy, and finally hands you a pre-exam list.
|
|
4
|
+
|
|
5
|
+
Two things make it different from a quiz bot:
|
|
6
|
+
|
|
7
|
+
- **Every question requires you to write your reasoning, not just your answer.** Grading checks the reasoning first, then the answer. **A lucky guess does not count as correct.**
|
|
8
|
+
- **Wrong-answer reasons are stored verbatim and reused.** So a mistake you make three times is counted three times, instead of splitting into three near-synonyms and vanishing from the statistics.
|
|
9
|
+
|
|
10
|
+
通用应试复习闭环:读你的课程材料与笔记库 → 出题 → 批改 → 再出题,直到每个知识点的熟练度都达到目标正确率,最后产出考前 list。**每道题都要求你写出思维链**,批改先判思维链再判答案,**蒙对不算对**。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
dsh plugin --profile web add dsh-mastery-loop
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 用法:两步
|
|
21
|
+
|
|
22
|
+
### 1 · 先初始化(只跑一次)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
/mastery-loop-setup
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
它会探测你的课程材料与笔记库,问清路径 / 素材 / 语言 / 融合方式 / 卷子格式,然后在你**知识库根目录**生成 6 个文件并校验:
|
|
29
|
+
|
|
30
|
+
| 文件 | 作用 |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `ledger.md` | 复习账本(进度 + 已初始化的凭据) |
|
|
33
|
+
| `index.md` | 主题 → 知识点的反向索引 |
|
|
34
|
+
| `errors.md` | 错误原因表 |
|
|
35
|
+
| `paper-format.md` | 每个课程的每个考试的卷子格式 |
|
|
36
|
+
| `error-taxonomy.md` | 失分原因分类(**初始为空**,等归纳) |
|
|
37
|
+
| `config.md` | 路径 / 每门课的素材选择 / 语言标准 |
|
|
38
|
+
|
|
39
|
+
> 初始化**有意做成独立的 skill**:它要问六组问题,跟日常复习是两件事。分开之后 `mastery-loop` 本身短得多。
|
|
40
|
+
|
|
41
|
+
### 2 · 之后正常复习
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
/mastery-loop
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
或者直接用自然语言说「我想开始复习了」—— 这个 skill **模型可以自动调用**。
|
|
48
|
+
|
|
49
|
+
## 复习循环长什么样
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
读状态 → 与用户逐步确认(范围 / 目标正确率 / 是否混合考)
|
|
53
|
+
→ 复习清单
|
|
54
|
+
→ 出题(每题后面挂「答案:」「思维链:」两行)
|
|
55
|
+
→ 批改(先判思维链 → 再判答案 → 错了才提炼错误原因)
|
|
56
|
+
→ 写回账本与错误原因表
|
|
57
|
+
→ 达标?→ 问是否继续
|
|
58
|
+
→ 考前 list(从第一轮就开始攒,不是最后生成)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**达标是逐点判断的**:一个知识点要「**总共出过 ≥ 5** 且 **熟练程度 ≥ 目标正确率**」。不到 5 次标「样本不足」,继续出题。
|
|
62
|
+
|
|
63
|
+
## 错误原因为什么写成英文
|
|
64
|
+
|
|
65
|
+
`errors.md` 里的错误原因**默认用英文** —— 因为要套 **ASD-STE100(简化技术英语)** 的写法:一句一个偏移、不超过 20 词、动词开头、不写题号和数字。
|
|
66
|
+
|
|
67
|
+
这样做的目的是**可统计**:同名错误必须逐字一致,才能数出「我在这一点上错了几次」。
|
|
68
|
+
|
|
69
|
+
> ⚠️ 口径说明:本 skill **借用 ASD-STE100 的原则**,**不声称符合** ASD-STE100 —— 官方明说它不适用于一般写作。
|
|
70
|
+
> 另外,「同一表述必须逐字复用」是本 skill 的**跨文档外推**(STE 只要求「一篇文档内一致」)。**这个外推的责任在本 skill,不在 ASD。**
|
|
71
|
+
|
|
72
|
+
## 一次只复习一门课吗
|
|
73
|
+
|
|
74
|
+
**建议**。但范围由你定 —— 跨多门时 skill 会问你是否要**跨课程混合出题**(**默认不混合**)。
|
|
75
|
+
|
|
76
|
+
## 语言
|
|
77
|
+
|
|
78
|
+
**按产物类别分别定**(知识点笔记 / 出的题 / 批改解析 / 记录性文件 / 产出 / 机制层),在初始化时问你。想要中英双语对照、法文、或纯中文都行 —— 除了 `errors.md` 的错误原因默认英文(要套 STE)。
|
|
79
|
+
|
|
80
|
+
## License
|
|
81
|
+
|
|
82
|
+
MIT
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Opt-in mastery-loop filesystem Skill provider for DeepSeek Harness.
|
|
2
|
+
# Resolves the packaged Skill root from the installed npm identity anchored at
|
|
3
|
+
# the DSH profile (Loader baseUrl), never as a path concatenated onto baseUrl.
|
|
4
|
+
- insert:
|
|
5
|
+
- id: mastery-loop-skill-filesystem
|
|
6
|
+
name: '@deepseek-ai/dsh-skill-filesystem'
|
|
7
|
+
config:
|
|
8
|
+
providerName: mastery-loop
|
|
9
|
+
includeDefaultRoots: false
|
|
10
|
+
bundledSkillDir: !!js process.getBuiltinModule('node:path').join(process.getBuiltinModule('node:path').dirname(process.getBuiltinModule('node:module').createRequire(baseUrl).resolve('dsh-mastery-loop/package.json')), 'skills')
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// dsh-mastery-loop carries no runtime code of its own.
|
|
2
|
+
//
|
|
3
|
+
// The bundle works entirely through cordis.patch.yml, which inserts the
|
|
4
|
+
// official `@deepseek-ai/dsh-skill-filesystem` provider and points
|
|
5
|
+
// `bundledSkillDir` at this package's `skills/` directory. Keeping the skill
|
|
6
|
+
// content declarative is deliberate: there is no provider to maintain, no
|
|
7
|
+
// discovery logic to get wrong, and nothing to break when DSH changes.
|
|
8
|
+
|
|
9
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-mastery-loop",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Opt-in DeepSeek Harness skill bundle: mastery-loop — an exam-revision loop that drills until every knowledge point reaches your target accuracy. / 通用应试复习闭环。",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./lib/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./lib/index.js",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"lib",
|
|
14
|
+
"cordis.patch.yml",
|
|
15
|
+
"skills",
|
|
16
|
+
"README.md",
|
|
17
|
+
"CHANGELOG.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"dsh-plugin",
|
|
22
|
+
"deepseek-harness",
|
|
23
|
+
"agent-skill",
|
|
24
|
+
"study",
|
|
25
|
+
"revision",
|
|
26
|
+
"exam",
|
|
27
|
+
"mastery"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": "^22.19.0 || >=24.0.0"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/Noct2vis/dsh-mastery-loop.git"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/Noct2vis/dsh-mastery-loop#readme",
|
|
37
|
+
"bugs": "https://github.com/Noct2vis/dsh-mastery-loop/issues",
|
|
38
|
+
"dsh": {
|
|
39
|
+
"bundle": {
|
|
40
|
+
"patch": "./cordis.patch.yml"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"scripts": {
|
|
44
|
+
"sync": "node scripts/sync-dev.mjs"
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mastery-loop
|
|
3
|
+
description: >-
|
|
4
|
+
通用应试复习闭环 / A general exam-revision loop:读你的课程材料与笔记库 → 出题 → 批改 → 再出题,直到每个知识点的熟练度都达到目标正确率,最后产出考前 list。
|
|
5
|
+
每道题都要求你写出思维链,批改先判思维链再判答案,蒙对不算对。错误原因逐字复用、可统计。
|
|
6
|
+
Use when the user wants to start revising or review for a course ("我想开始复习", "复习某门课", "考前突击", "start revising", "review for my exam"), or mentions review progress, mistakes, weak spots, mastery, or knowledge points.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# mastery-loop —— 复习闭环
|
|
10
|
+
|
|
11
|
+
出题 → 批改 → 再出题,直到**每个知识点的熟练度都达到目标正确率**,最后收成**考前 list**。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 0 · 四条硬规矩
|
|
16
|
+
|
|
17
|
+
1. **不主动扫库。** 初始化之后只在三种情况下才动知识库:① 读到**不符合要求**的文件 → 处理那**一个**;② 出现**新文件** → 处理;③ **用户主动调用** → 才做。
|
|
18
|
+
2. **笔记的定义部分默认不动。** 平时只写 `sys/`(*机器区:账本 / 错误原因 / 关系图 / 状态*)与 `kb/MOC/` 的**机器区**。
|
|
19
|
+
**没有新增或修订知识点时不碰;当知识库的架构本身要改(如关系图重建)时,改写是正当的。**
|
|
20
|
+
3. **不声称符合 ASD-STE100。** 错误原因**尽可能按 STE 的规则写**,这是借用它的原则,不是合规声明。
|
|
21
|
+
4. **脚本只做机械重复的事。** 校验、渲染、聚合、哈希比对、账本运算交给 `scripts/`(Node,零依赖,`node xxx.mjs`);**判断谁是谁的前置、写理由、出题、批改、错误原因逐字去重**留给自己。**不自动 `commit`、绝不 `push`。**
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1 · 入口
|
|
26
|
+
|
|
27
|
+
### 1.1 先确认初始化过
|
|
28
|
+
|
|
29
|
+
读 `sys/config.json` → 找**工作区根** → 读 `sys/ledger.jsonl`。
|
|
30
|
+
|
|
31
|
+
- **`sys/ledger.jsonl` 不存在** → **停下来**,告诉用户:
|
|
32
|
+
|
|
33
|
+
> 这个知识库还没初始化过。先跑一次 `/mastery-loop-setup`,它会把 `kb/` 与 `sys/` 建好,之后我再开工。
|
|
34
|
+
|
|
35
|
+
**不要自己进初始化流程** —— 那件事归 `mastery-loop-setup`。
|
|
36
|
+
|
|
37
|
+
- 初始化过 → 继续。
|
|
38
|
+
|
|
39
|
+
### 1.2 读状态
|
|
40
|
+
|
|
41
|
+
顺序固定:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
sys/config.json(路径 + 分类 + 语言标准)
|
|
45
|
+
→ sys/ledger.jsonl(进度)
|
|
46
|
+
→ sys/paper-format.json(本次考试的格式)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
然后**把读到的状态摆出来**:
|
|
50
|
+
|
|
51
|
+
- **一段话**:「你上次复习到 X,本次范围内 Y 个知识点,已达标 Z 个。」
|
|
52
|
+
- **一张小表**:本次范围的知识点按熟练度排序,标出「样本不足」和 `NULL` 的。
|
|
53
|
+
|
|
54
|
+
### 1.3 与用户确认 —— **用提问窗口,逐步问**
|
|
55
|
+
|
|
56
|
+
⚠️ **不许把问题堆成一条消息。** 拉起**交互式提问窗口**,**一次一问**:
|
|
57
|
+
|
|
58
|
+
1. **状态确认** ——「我查到你复习到这一步,对吗?」
|
|
59
|
+
2. **本次范围** ——(建议一次一门课,但**范围由用户定**)
|
|
60
|
+
3. **本次目标正确率** ——(推荐 90%)
|
|
61
|
+
4. **是否跨课程混合考** —— **仅当范围跨多门时**才问(**默认不混合**)
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 2 · 环境勘察
|
|
66
|
+
|
|
67
|
+
**顺序:问 → 读 → 确认匹配度。**
|
|
68
|
+
|
|
69
|
+
1. **问**:这次要读什么 / 你手上有哪些。**先问,不扫盘猜。**
|
|
70
|
+
2. **读**:按用户指的去读,**不预设文件类型**(别写死 `.pdf`)。
|
|
71
|
+
3. **确认匹配度**:把结论摆出来,逐条说清 —— 哪些**匹配**、为什么;哪些**不匹配**、为什么;还**缺**什么、**去哪找**。
|
|
72
|
+
- **要写出具体后果**(「判分会偏松」,不是「缺少答案」);**不必把文件列全**;判定标准只有一条:**两个类别都有着落**。
|
|
73
|
+
- 问一句:**「有没有你不想让我读的?」**
|
|
74
|
+
4. **缺默认成员时**问用户是否用类里别的成员顶(**换成员必须问**)。**某一类整类为空**才是真缺必需项。
|
|
75
|
+
|
|
76
|
+
> 每门课的**第一讲**(`W1L1 Introduction to the Unit` / `Unit organisation` 这类)通常就是**考试边界的来源** —— 哪些考、哪些不考。
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3 · 复习循环
|
|
81
|
+
|
|
82
|
+
### 3.1 先给复习清单
|
|
83
|
+
|
|
84
|
+
按 `sys/ledger.jsonl` 排:**熟练度低的在前**,`NULL`(没学过)和「样本不足」标出来。
|
|
85
|
+
|
|
86
|
+
### 3.2 出题
|
|
87
|
+
|
|
88
|
+
**卷子参数从 `sys/paper-format.json` 查**对应考试的那一条 —— **不要从往年卷现抄**。
|
|
89
|
+
查不到 → 用**默认出卷法:判断题 + 每题说明理由**。
|
|
90
|
+
|
|
91
|
+
配比(按本次范围的题池算,不按课程切分):
|
|
92
|
+
|
|
93
|
+
| 占比 | 打什么 |
|
|
94
|
+
| --- | --- |
|
|
95
|
+
| 60% | 熟练度最低的点 |
|
|
96
|
+
| 30% | `是否学习过 = 否` 的点 |
|
|
97
|
+
| 10% | `最后复习日期` 最久远的点(防遗忘) |
|
|
98
|
+
|
|
99
|
+
卷子模板 → [exam-templates.md](exam-templates.md#试卷模板)。
|
|
100
|
+
|
|
101
|
+
### 3.3 每题后面必须挂两行
|
|
102
|
+
|
|
103
|
+
**不分题型,思维链是必写的。** 每道题后面就是这两行,别的都不要:
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
答案:
|
|
107
|
+
思维链:
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
- **选题也要写** —— 有足够的推导过程即可,**不强制把所有选项都写出来**。
|
|
111
|
+
- 用户不写思维链 → 那一题**无法判定**,记「**未判**」、**不入账本**,并**提示他补写**。
|
|
112
|
+
|
|
113
|
+
### 3.4 批改 —— 顺序不能反
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
① 先确认思维链的逻辑对不对
|
|
117
|
+
② 再确认答案对不对
|
|
118
|
+
③ 只要错的个数 ≥ 1 → 才去提炼并规范化错误原因
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
- **做对 = 思维链对 且 答案对。** 任一不对 = 错 —— **蒙对不算对**。
|
|
122
|
+
- 两样都错 = **错 2 个** → 很可能要提炼出**两条**错误原因(复合错误要拆)。
|
|
123
|
+
- 两个都对 → 不走第 ③ 步。
|
|
124
|
+
|
|
125
|
+
**批改产出三块**:
|
|
126
|
+
|
|
127
|
+
1. **评分表** —— 逐题「你的判断 vs 正确答案」+ 得分 + 失分点 + 总分与正确率
|
|
128
|
+
2. **详细解析** —— 引用材料原文逻辑;计算题给完整中间步骤
|
|
129
|
+
3. **薄弱点定位** —— 说清**为什么错**(从思维链里看),别笼统说「理解不到位」
|
|
130
|
+
|
|
131
|
+
判分口径 → [exam-templates.md](exam-templates.md#判分口径)。
|
|
132
|
+
|
|
133
|
+
### 3.5 提炼错误原因(只在错 ≥1 时)
|
|
134
|
+
|
|
135
|
+
写法**按 ASD-STE100 的规则**(**英文**):
|
|
136
|
+
|
|
137
|
+
- 句式优先 **`把 A 当成 B`**(概念混淆类,**必须写出 A 和 B**);其余用 **`<动作> + <对象>`**
|
|
138
|
+
- **一句只写一个偏移** —— 出现 `and / but / because / so / then` 就是两个命题,拆开
|
|
139
|
+
- **≤20 词**;**名词短语 ≤3 词**
|
|
140
|
+
- **不写**题号、数字、时间词、第一人称、情绪词
|
|
141
|
+
- **动词开头**且**必须带对象**(禁 `wrong`、`didn't know`)
|
|
142
|
+
- **指代不悬空**
|
|
143
|
+
|
|
144
|
+
然后**去 `sys/errors.jsonl` 里查**:
|
|
145
|
+
|
|
146
|
+
1. **在该知识点分组内全量检索**
|
|
147
|
+
2. 有**逐字一样**的 → **只追加日期**,**绝不重新措辞**
|
|
148
|
+
3. 没有 → 新增一条
|
|
149
|
+
|
|
150
|
+
### 3.6 写回(顺序写死,不许反向;契约正文 → [templates.md](templates.md))
|
|
151
|
+
|
|
152
|
+
- **关系图** —— 本次**若新增或修订了知识点**:先改 `sys/graph.json`(逻辑定前置 → 写边与 ≤30 字理由),再由 `graph.mjs` 算后置并渲染 `## 前置知识` / `## 后置知识`,最后跑六项校验。**没动知识点就跳过这一步。**
|
|
153
|
+
- **账本** —— 你只输出字段(做对 / 总共出过 / 熟练程度 / 最后复习日期 / 是否学习过),由 `ledger.mjs` 写进 `sys/ledger.jsonl`。(`做对` 只在**思维链对且答案对**时 +1。)
|
|
154
|
+
- **错误原因** —— 逐字去重由**你**做(脚本会把「把 A1 和 B 弄混」和「把 A2 和 B 弄混」误判成重复),写完让脚本写进 `sys/errors.jsonl`。
|
|
155
|
+
- **`kb/MOC/` 的机器区** —— 跑 `aggregate.mjs` 从「`归属` + 图」聚合;**手写区一个字不动**。
|
|
156
|
+
|
|
157
|
+
### 3.7 达标与继续
|
|
158
|
+
|
|
159
|
+
**达标是逐点判断的**(不是单轮卷面分):
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
一个知识点达标 ⇔ 总共出过 ≥ 5 且 熟练程度 ≥ 本次目标正确率
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
`总共出过 < 5` → 标「**样本不足**」:继续出题,**不算达标、也不算失败**。
|
|
166
|
+
|
|
167
|
+
- 本次范围内**所有**知识点都达标 → **用提问窗口问**用户是否继续
|
|
168
|
+
- 继续 → 回到 3.2
|
|
169
|
+
- 不继续 → 进第 4 节
|
|
170
|
+
|
|
171
|
+
### 3.8 考前 list 是**攒出来的**,不是最后生成的
|
|
172
|
+
|
|
173
|
+
**从第一轮批改就开始攒。** 每轮出错,就把该点的 `规则 / ⚠️ 常见错误 / 🔑 锚` 三行补进去 —— 出错的那一刻正是信息最鲜活的时候。到复习结束时,它**已经**是成品。
|
|
174
|
+
|
|
175
|
+
模板 → [exam-templates.md](exam-templates.md#考前-list)。
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 4 · 产出:考前 list
|
|
180
|
+
|
|
181
|
+
**独立成文**(一篇 Markdown 笔记,放在 `kb/` 下)。**只收出过错的点**,按知识点一条,三行结构:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
### <知识点>
|
|
185
|
+
> **规则**:<正确说法>
|
|
186
|
+
> ⚠️ **常见错误**:<我实际犯的错>
|
|
187
|
+
> 🔑 **锚**:<一句话记忆钩子 / 反例>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
末尾附「**考前 15 分钟速查**」:最致命的 N 条,一行一条。
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## 固定参考
|
|
195
|
+
|
|
196
|
+
[templates.md](templates.md) —— 试卷模板、判分口径、考前 list 模板。**按需查,别通读。**
|
|
197
|
+
|
|
198
|
+
## 版本与口径
|
|
199
|
+
|
|
200
|
+
- 错误原因的写法**借用 ASD-STE100 的原则**,**不声称符合 ASD-STE100**。
|
|
201
|
+
- **「同一表述复用」是本 skill 的外推**:STE 只要求「一篇文档内一致」,这里放大成「跨全库、跨时间的去重键」—— **这个外推的责任在本 skill,不在 ASD**。
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# 出题 · 判分 · 考前 list 模板
|
|
2
|
+
|
|
3
|
+
> **本文件是三个固定模板**:试卷骨架、判分口径、考前 list。契约正文(*库长什么样*)在 [templates.md](templates.md)。
|
|
4
|
+
> **按需查,别通读。**
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 试卷模板
|
|
9
|
+
|
|
10
|
+
> ⚠️ **参数从 `sys/paper-format.json` 查**对应考试的那一条 —— **不要从往年卷现抄**。
|
|
11
|
+
> 查不到 → 用**默认出卷法:判断题 + 每题说明理由**。
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# PRACTICE EXAM PAPER — ROUND N
|
|
15
|
+
|
|
16
|
+
**Based on**: <paper-format.json 里的考试名>
|
|
17
|
+
**Time Allowed**: <抄自 paper-format.json>
|
|
18
|
+
**Total Marks**: <抄自 paper-format.json>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Question 1 (<marks> marks)
|
|
23
|
+
|
|
24
|
+
<题干>
|
|
25
|
+
|
|
26
|
+
(a) <小问> (<marks> marks)
|
|
27
|
+
(b) ...
|
|
28
|
+
|
|
29
|
+
答案:
|
|
30
|
+
思维链:
|
|
31
|
+
|
|
32
|
+
## Question 2 (<marks> marks)
|
|
33
|
+
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
答案:
|
|
37
|
+
思维链:
|
|
38
|
+
|
|
39
|
+
**END OF PAPER**
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
硬性要求:
|
|
43
|
+
|
|
44
|
+
- **Round N** 每轮递增;**跨轮保持同一套卷子参数**,这样正确率才可比。
|
|
45
|
+
- **每道题后面必须挂 `答案:` / `思维链:` 两行** —— 选择题也要。
|
|
46
|
+
- 判断正误类小题,题干里就写明「**先判对错,再给理由**」。
|
|
47
|
+
- 分值分配**照 `sys/paper-format.json`**,不要自己发明比例。
|
|
48
|
+
- 卷尾之后**不得**出现任何答案、提示、「解析见下」的字样。
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 判分口径
|
|
53
|
+
|
|
54
|
+
| 题型 | 给分 | 扣分 / 零分 |
|
|
55
|
+
| --- | --- | --- |
|
|
56
|
+
| 判断正误 | 分类正确 + 解释命中关键词 | 只写 T/F 没解释 → 0;解释不引材料逻辑 → 减半 |
|
|
57
|
+
| 计算 | 结果正确 + 中间步骤齐全 | 结果对但无 working → 扣步骤分;结果错但步骤对 → 给步骤分 |
|
|
58
|
+
| 定义 | 关键词出现 + 给出具体示例 | 只背课本句式、无示例 → 不满分 |
|
|
59
|
+
| 画图 / 证明 | 图元齐全(轴标签、方向、边界)/ 每步有依据 | 图对但无标注 → 扣分 |
|
|
60
|
+
|
|
61
|
+
**总分与正确率按卷面原始分算**,不折算、不向上取整。
|
|
62
|
+
|
|
63
|
+
### ⚠️ 与「做对」的区别
|
|
64
|
+
|
|
65
|
+
- **判分**用的是上面这张表(看答案)。
|
|
66
|
+
- **账本里的「做对」是另一回事**:必须 **思维链对 且 答案对**。
|
|
67
|
+
**蒙对**在评分表里可能得分,但在账本里**不算做对** —— 而且**要提炼一条错误原因**。
|
|
68
|
+
|
|
69
|
+
批改纪律:
|
|
70
|
+
|
|
71
|
+
- **给分严格,只认关键词。** 别给「思路对了」这种虚分。
|
|
72
|
+
- 判错要**指到用户具体的句子**(在思维链里找),不要笼统说「理解不到位」。
|
|
73
|
+
- 也要指出**答得好**的部分 —— 避免用户误以为整块都薄弱。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 考前 list
|
|
78
|
+
|
|
79
|
+
**独立成文**(一篇 Markdown 笔记,放在 `kb/` 下)。**只收出过错的点**,按知识点一条。
|
|
80
|
+
|
|
81
|
+
**从第一轮批改就开始攒** —— 每轮出错就把三行补进去,别等最后生成。
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
# 考前 list
|
|
85
|
+
|
|
86
|
+
## Section A: <分类里的类值>
|
|
87
|
+
|
|
88
|
+
### <知识点>
|
|
89
|
+
> **规则**:<正确说法>
|
|
90
|
+
> ⚠️ **常见错误**:<我实际犯的错 —— 与 sys/errors.jsonl 里的错误原因一致>
|
|
91
|
+
> 🔑 **锚**:<一句话记忆钩子 / 反例>
|
|
92
|
+
|
|
93
|
+
## ⏱️ 考前 15 分钟速查
|
|
94
|
+
- <最致命的 N 条,一行一条>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
要求:
|
|
98
|
+
|
|
99
|
+
- 一个知识点**只占三行**,超过说明还没提炼干净。
|
|
100
|
+
- **`⚠️ 常见错误` 必须与 `sys/errors.jsonl` 里的错误原因逐字一致** —— 那是同一份事实,不要换措辞。
|
|
101
|
+
- 锚点优先用**反例**或**极端情形**,不要口诀式废话。
|
|
102
|
+
- 涵盖**全部轮次**,不重复同一意思的条目。
|