dsh-k12-substrate
English | 中文
给 DeepSeek Harness 接上一套中国 K12 能力底座:模型可以查课标能力锚点、查字表词表篇目、把某个孩子的掌握情况写进本机档案、算出识字量与下一步。
先说清楚它不是什么
这一节放在最前面,因为误以为它覆盖全学科,比不装它更糟。
从课标抽出 1,958 条候选能力锚点,只有 765 条通过了「判定客观、无需教师复核」的门槛并随包分发:
| 数量 | |
|---|---|
| 课标切出的碎片 | 4,841 |
| 过可判定性闸 | 1,958 |
| AI 复审后存活 | 1,219 |
| 可写进孩子档案(本插件暴露的) | 765 |
其中 146 条判定客观(字写对没有、篇背下来没有),另 619 条是 AI 带课标原文裁定的事实性知识、尚无教师签字。
义务教育 14 科均已覆盖,但深浅差别很大:语文 186、科学 126、数学 73,而地理 18、劳动 14。查不到某条具体要求,只代表它没能改写成有标准答案的可判定断言——课标里大量「感受/体会/认同」类要求本质上无法二值判定,已在抽取阶段整批舍弃,这是有意的。
同理,本插件仍然不自动回答「先学什么后学什么」。
2026-08-20 底座完成了先修边的语义重标:一千多条边各自带上了类型(component 子动作 / instrument 手段可绕 / semantic 概念前提)和不具备时的具体可观察失败表现——例如「面对 y=sin x 的坐标系,该学生反复翻书试图寻找一个公式来逐点计算坐标值,而不是利用五点作图法直接描出关键点」。这些通过 k12_find_capability 透出,模型解释「为什么得先学这个」时用得上。
但这些边全部是模型提议、无人复核。 所以插件不拿它们自动排路径——给一个具体孩子排学习顺序,等于把没验过的东西当验过的用,这和当初不肯用未复核锚点是同一条线。
安装
pnpm add dsh-k12-substratepnpm dsh web --patch ./node_modules/dsh-k12-substrate/cordis.patch.yml或者在你自己的 cordis.yml 里插入:
- insert:
- id: k12-substrate
name: 'dsh-k12-substrate'
config:
profileDir: '' # 留空则用 ~/.dsh-k12-substrate/profiles/
readOnly: false # true 则只注册查询工具,不注册档案读写五个工具
| 工具 | 做什么 |
|---|---|
k12_substrate_info | 覆盖范围、数据来源、已知局限。断言「课标要求什么」之前应先调它 |
k12_find_capability | 按学科/学段/关键词检索能力锚点,返回可判定的断言与判定依据 |
k12_lookup_item | 查一个字/词/篇目在课标附录里的位置:哪张表、第几号、要求学段、认还是写 |
k12_record_mastery | 把「这孩子会了什么」写进本机档案 |
k12_learner_progress | 算识字量、词汇量、背诵篇数、各锚点完成度、下一步可学条目 |
后两个可以用 readOnly: true 关掉。
用起来什么样
你:帮我看看「灞」这个字,小学要求会写吗?
→ k12_lookup_item { item: "灞" }
「灞」不在课标附录的任何清单里(已查 12 张表:常用字表 3500、基本字表 299、
背诵篇目 135、英语二级/三级词汇等)。
你:那「口」呢?
→ k12_lookup_item { item: "口" }
「口」命中 2 处:
- 字表一 第 983 号 学段 G1-9 要求:写 → 锚点 ca_5DS8mPj4
- lst_hanzi-jiben-300 未编号 学段 G1-9 → 锚点 ca_GyQEdbby
你:孩子(代号 stu_0001)今天听写,基本字表里的「口、山、巾」都写对了,记一下。
→ k12_record_mastery { learner: "stu_0001", anchorId: "ca_GyQEdbby",
items: ["口","山","巾"] }
已记录 3 条(proposed):能正确书写识字写字教学基本字表中的汉字 3/299(1%)
(标记为待确认 —— 模型判定不等于孩子真的掌握,需教师或家长确认)三条硬规矩
1. 档案只在本机,且只回显计数。 k12_record_mastery 写的是某个具体孩子会什么不会什么——未成年人的学习画像。它只落 profileDir 下的文件,默认 ~/.dsh-k12-substrate/profiles/,不上传任何服务器。工具返回值也只给计数,不逐条列出掌握明细:工具返回值会进模型上下文,进而可能被写进会话日志、被压缩、被发给模型提供方。计数是产品必需的,逐字逐词的明细不是。
learner 会作为文件名,因此建议用不含真实姓名的代号(如 stu_0001);插件会拒绝含路径穿越字符的取值。
2. 模型判定一律 proposed。 只有 holder 以 teacher: 或 parent: 开头时才记为 confirmed。模型说孩子会了不等于孩子会了,沉默更不算确认。k12_learner_progress 会把两者分开报。
3. 只能引用可用锚点。 断言指向一条没人复核过的锚点,等于用没验过的尺子量孩子。传了不在可用集合里的 ID 会直接报错。
开发
pnpm install
pnpm snapshot # 从 ../os-k12-taxonomy 重建数据快照
pnpm verify # typecheck + 75 条自测
pnpm build自测(scripts/smoke.ts)不依赖 DSH 运行时,直接调 execute() 验真实数据、真实边界、真实落盘。它抓到过两个 typecheck 抓不到的问题:required 放在 items 指向的节点根上会在运行时抛 UNSUPPORTED_SCHEMA;以及去重键格式在三个文件里各写一遍、其中一处分隔符是字面 NUL 字节。
许可
代码 MIT;随包数据 ODbL v1.0 + CC BY-SA 4.0(与上游一致)。课标原文不随包分发,权利归中华人民共和国教育部。详见 [LICENSE](LICENSE)。
