给孩子做错题根因分析的智能工具。一道错题发来,3秒内告诉你最该先补的底层知识点(不是订正这一题,而是补上"为什么错"的根本原因)。覆盖 K-9(小学+初中)七科:数学、英语、语文、物理、化学、生物、地理。底层是按教材目录手工拆解的 1500+ 知识点先修依赖图,根因定位零模型依赖,稳定可复现;验证题由对话模型实时出。
Marble K-9 七科错题诊断 · 图谱与引擎工作流是一项面向实际任务的技能,主要用于Overview;把"Marble 那套知识图谱结构"(原子知识点 + 先修依赖 DAG + 掌握证据)落到中国 K-9 七科;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
把"Marble 那套知识图谱结构"(原子知识点 + 先修依赖 DAG + 掌握证据)落到中国 K-9 七科, 做成错题 → 根因诊断工具:孩子一道题做错,沿知识图谱往回反推,列出最该先查的前置根因。 引擎一套(沿 DAG 反向遍历求全部祖先 + 年龄窗口/局部汇聚度排序),各科图谱各自一张,复用引擎。
当前状态(2026-07-19 收口,七科全建完 + 统一审查通过):
| 学科 | 结构 | 节点 | 边 | 版本 | 年级 |
|---|---|---|---|---|---|
| 数学 | 1-9 合并总图 | 371 | 892 | 人教版(部编) | G1-G9 |
| 英语 | 1-9 合并总图 | 245 | 439 | 人教PEP + Go for it! | G3-G9 |
| 语文 | 1-9 合并总图 | 241 | 455 | 部编(统编) | G1-G9 |
| 物理 | 初中单图 | 97 | 202 | 人教版 | G8-G9 |
| 化学 | 初中单图 | 58 | 118 | 人教版 | G9 |
| 生物 | 初中单图 | 93 | 180 | 部编(统编) | G7-G8 |
| 地理 | 初中单图 | 66 | 137 | 部编(统编) | G7-G8 |
所有图谱目录:本技能根目录下的 中国*图谱(共 7 个)。
<技能根目录> ├── 中国中小学数学图谱 graph.json(371节点,小学+初中合并) ├── 中国中小学英语图谱 graph.json(245) ├── 中国中小学语文图谱 graph.json(241) ├── 中国初中物理图谱 graph.json(97)+ _cn_phys_build/gen_assets/_audit ├── 中国初中化学图谱 graph.json(58) ├── 中国初中生物图谱 graph.json(93) ├── 中国初中地理图谱 graph.json(66) ├── engine diagnose.py(Agent主入口·对话内CLI) / app.py(引擎+7套确定性定位) / config.py / product.py(可选Web) / locate_demo.py ├── validate review.py(技能内自洽) / review_all_3repo.py(三处MD5) / fix_graphs.py / regen_and_sync.py ├── references locate_logic.md / restart.md / schema.md └── scripts validate_graph.py / verify_locate.py(旧时代工具,见TODO③)
这个 Skill 是给 Agent 用的,不是给人开网站的。 装好技能后,用户直接在对话里发一道错题,Agent 就跑诊断、在对话里给根因+验证题——不用起服务、不用开浏览器、不用贴图。
触发:用户发来错题文字 / 说「诊断这题」「为什么错」「根因是什么」「出个验证题」。
Agent 工作流(严格按此走):
He like playing → 一般现在时第三人称单数;直径6cm圆用6×6×3.14算面积 → 圆的面积)。python engine/diagnose.py --subject <科目key或中文名> --text "<概念术语> <原题文字>"
把概念术语前置进 --text,让确定性定位层锁死节点(纯原题文字有时缺术语会漏,见诚实边界)。
例:python engine/diagnose.py --subject 英语 --text "一般现在时第三人称单数 He like playing football 漏掉动词加s"ok / node_name / node_domain / roots[]。若 ok=false(没定位到),换更具体的概念术语重调一次(最多 2 次)。要点:根因 = 确定性逻辑(图谱 DAG 反推,稳定可复现,零模型依赖);验证题 = 对话模型现出。出验证题不靠引擎,靠你。
可选:看图谱依赖关系(想可视化根因怎么一层层倒推时)才用 Web:python engine/product.py 起服务开浏览器——这是辅助,不是主形态。
仅当用户明确想看图谱与根因的依赖结构时才用(辅助,非主形态)。需 flask 装在隔离 venv(使用 WorkBuddy 管理的 Python 环境):PORT=6900 python product.py,浏览器开 http://localhost:6900。选科(数学/英语/语文/物理/化学/生物/地理,编程与剪辑不在成品内)→ 贴错题 → 点「诊断」出知识点+根因链(响应约 2 秒)。根因自动剔除年级/册/章容器。
engine/diagnose.py 拿根因,在对话里给根因链+验证题。这是主场景。engine/app.py 的 locate_node 确定性分层,或拆复合节点为子技能。_cn_xxx_build.py 模板改内容,用 GRAPH_PATH 起独立实例。每科四步,产物三处同步:
_cn_xxx_build.py:结构化 RAW 定义(册容器 + 知识点 + 跨年级桥边/增强边),内置 pre 引用校验 + 增量环检测(would_cycle,判据=加边前查 topic 是否已能到达 pre,写反会误删共同地基边)→ 生成 graph.json(节点含 deg=被依赖数)。gen_assets_xxx.py:从 graph.json 真源生成 HTML(含诊断模式) + xlsx + 验证报告。模板继承:事件委托点击 + Array.isArray(ev) 防御 + 动态 segs(由真实 grade 推算,跳过空学段) + 交付前 node --check 校验内联 JS。_audit_xxx.py:独立硬审计(环/悬空/孤岛/evidence类型/册容器子节点/语义簇共享根祖先),与生成脚本解耦。graph.json 与 HTML 的 MD5 必须一致。数学/英语/语文三科的图谱构建脚本曾为早期模板,其生成器缺点击加固;数据层已与后建科目对齐,审核统一用
review_all_3repo.py覆盖。
当诊断把"分数加法"这类复合节点当根因、但真正薄弱在更细一层时:在 RAW 末尾加子技能节点,把原复合节点的粗粒度先修边改为指向各子技能,子技能再各自指回更底层概念。
engine/app.py 的 locate_node(text) 分层(越靠前越确定、越不依赖模型):
① 精确双向命中(取最长节点名优先,避免"力"误中"摩擦力")→
①-extra 数学 _fraction_subnode(分数加减) / _ratio_node(比家族) →
①-extra 英语 _en_node → ①-extra 语文 _cn_node →
①-extra 物理 _phy_node / 化学 _chem_node / 生物 _bio_node / 地理 _geo_node →
② 语义标签 extract_tags + 确定性打分(7B 仅并列裁判)→ ③ 全量 7B 兜底。
各 _xx_node 按该科常见错误/考点关键词确定性命中,绕开不稳的 7B;由 IS_XX 网关(any(t["id"].startswith("前缀")))按图谱前缀自动生效。
铁律:定位绝不能依赖 7B(见 references/locate_logic.md)。加新科目照 ①-extra 套路建 _xx_node + IS_XX 门控即可。
详细:references/locate_logic.md。
config.py 支持 GRAPH_PATH 覆盖(默认指数学图谱)。起某科实例:
GRAPH_PATH="../中国初中生物图谱/graph.json" PORT=6805 python app.py。
app.py 诊断逻辑无需改,只读 graph.json 的 topics/dependencies。
| 脚本 | 用途 |
|---|---|
validate/review.py |
技能内自洽校验:扫本技能根目录 7 张图,查 DAG 无环/悬空/自引/重复/孤岛/evidence数组/册容器子节点/元数据。纯本地、不调 LLM。python review.py [--md] |
validate/review_all_3repo.py |
三处一致性审查:源/skill/归档三份 graph+HTML 算 MD5 比对 + 全结构检查,输出 Markdown 报告(覆盖全部 7 图) |
validate/fix_graphs.py |
数据层修复:evidence 字符串→数组、补 subject/title/edition/grade_span 顶层元数据,并三处同步 |
validate/regen_and_sync.py |
产物重算:对"直接读 graph.json 且已加固"的科重跑生成器刷新 HTML/xlsx/报告 + 三处同步 |
典型流程:review.py 复验 → 发现问题 → fix_graphs.py 修数据层 → regen_and_sync.py 重算产物 → review_all_3repo.py 出三处一致报告。
拍题 → 工具判对错 → 对了过 → 错了追根因出验证题 → 再拍判 → 循环。
answer_match(standard, student) 归一化比对(数字整串 / 整串互含 / 英文单词级全包含)→ True/False/None。验证题由 gen_verify 出、自带标准答案,故判对错根本不调模型。/api/check:验证题作答判对错(优先 answer_match,比对不了才 grade_answer 走 LLM 兜底)。/api/deeper:验证题判错后,对该根因节点 diagnose(root_id) 下钻更基础验证题,闭环。只有用户要开 product.py 看图谱可视化时才需起服务,务必按此规程,否则旧字节码/旧进程污染结果:
严格按 references/restart.md:① 停旧进程(taskkill 可能静默失败,要 netstat 复核端口只剩 1 个新 PID,最稳用 TaskStop)→ ② rm -rf __pycache__ → ③ 用 WorkBuddy 管理的 Python 环境起服务(flask 已装)。
曾因跳过清缓存导致"化简比 2:3"在线仍错定位成"比例尺",清缓存重启后复测才正确。
qwen2.5:7b llama-server 会中途崩溃(HTTP 500),所有依赖 7B 兜底定位的科目在 Ollama 宕机时整条链断。七科现已全部建确定性定位层,即使 7B 死也能定位+反推根因。OCR/出验证题/原题变形仍要 LLM,Ollama 宕机优雅降级为 ai_fail(定位+根因不受影响)。answer_match 直接比对;模型只做兜底。避开了本机 7B 弱且会崩的坑。__pycache__ = 旧逻辑/旧图谱继续生效(最隐蔽的坑);taskkill 可能静默失败,务必 netstat 复核端口只剩 1 个 PID。diagnose 反推的"根因"偶尔带上年级/册容器节点(如"八年级下"),技术上正确但 pedagogically 无用。需在 diagnose 返回前过滤容器 id(CONTAINER_ID 规则见 validate/review.py)。str→数组 防御),仅数据层已修。若要彻底统一可升级这 2 个生成器。{"no","question","answer","node?"} 给本工具,家长拍卷面→extract_student(按题号切片OCR)+answer_match逐题零模型判→错题 locate_node/diagnose 出根因。/api/grade_card 为后端入口。所有图谱均按教材目录手工拆解,覆盖全课标单元与核心知识点/考点,非学科专家逐册逐题审定。 物理/化学/生物/地理四科为初中单学段图(无小学版),无跨年级桥边、无合并三件套——已如实反映。 诊断精度上限 = 图谱拆解质量;图谱未覆盖的细分薄弱点,定位会退化到 ② 语义标签层或 ③ 7B 兜底。
对话内诊断的定位注意(重要):各科 _xx_node 是关键词门控的确定性层,需要题目文字含概念术语(如「三单」「浮力」「圆的面积」)才锁死节点。家长发来的裸错题文字往往没有术语(如纯句子 He like playing football),直接调会 ok=false 或误命中。工作流 step 2/3 已规定:Agent 先用 LLM 判断出概念,把术语前置进 --text 再调一次即可精确命中(这也是「你判断根因」的体现)。数学「圆面积」类裸文本偶尔会被「乘法符号」权重拉偏误命中「小数乘法」,同样靠前置「圆的面积」术语纠正。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 133.9万人学习
共49课时 | 82.5万人学习