# 教学覆盖层 · 对照卡(机制①) 把"智能体理论 ↔ 平台代码"做成可浏览的三栏对照课件。每张**对照卡**是一个 YAML, 渲染成一页:**教科书概念 │ 平台源码落点 │ 形式化对象**,并可挂一个真实 run 的 trace。 不改平台内核,纯寄生在现有源码与 run workspace 之上。 ## 用法 ```bash python3 teaching/gen.py # 生成静态站点 → teaching/site/ python3 teaching/gen.py --check # 只校验锚点是否有效(锚点失效则 exit 1,可进 CI) open teaching/site/index.html # 浏览 ``` **关键性质:源码 span 在生成时实时从仓库读取**(不是抄一份),所以代码一改、行号 一漂,`--check` 立刻报警 —— 对照卡永不与代码脱节。建议把 `gen.py --check` 接进 CI。 ## 写一张新对照卡 在 `teaching/cards/` 下加一个 `NN-.yml`: ```yaml id: <唯一 slug,同时是页面文件名> module: A # A/B/C/D,见 gen.py 的 MODULE_NAMES week: 2 # 第几周 title: "..." concept: # 📖 教科书概念栏 textbook: | # 概念正文(可多行) ... key_point: "..." # 一句话要点(黄条高亮) code: # 💻 源码栏:可多个锚点,生成时实时读取该 span - file: lambdagent/src/lambdagent/fromconfig/compiler.py # 仓库相对路径 symbol: _compile_react # 仅作标注,显示用 lines: "878-933" # 实际渲染的行范围,格式 a-b note: "..." # 这段代码在讲什么 formal: # ∑ 形式化栏 term: "Loop(ConversationLam ∘ action_parser, cond, max_steps)" effect: "IO[tool] ⊕ Partial" note: "..." live_demo: # 🎞 可选:挂一个真实 run,自动算步数/token/抽工具调用 run: agentexample/research67/workspace/run_20260520_004928 # 仓库相对 run 目录 highlight: "..." # 这个 run 想让学生看到什么;run 留空则只显示这段文字 related: [tool-native-fc, tool-claude-code-native] # 可选:相关卡 id,生成超链接 takeaway: | # 学习目标 ... ``` 跑 `python3 teaching/gen.py` 即可。`live_demo.run` 指向不存在的 trace 时页面会显式标注, 不会静默成功。 ## 现有卡片(骨架样例) | 周 | 卡 | 对照点 | |---|---|---| | 2 | `tool-react-over-text` | ReAct ↔ `_compile_react`/`ConversationLam` ↔ `action_parser` 部分性 | | 2 | `tool-native-fc` | function calling ↔ `_run_fc_loop` ↔ 消除 Partial | | 2 | `tool-claude-code-native` | 外包给运行时 ↔ `run_native` ↔ 能力授权 Cap | | 8 | `sandbox-effect-cap` | 沙箱 ↔ `check_write_allowed`/`_resolve` ↔ effect 限制 ↾ Cap | 第 2 周三张卡构成旗舰对比(三种工具调用范式);第 8 周这张展示同一套形式化语言 (effect / Cap)如何复用到安全维度。后续按 14 周大纲继续加卡即可。 ## 下一步(对接其他机制) - `live_demo` 目前挂的是仓库里已有的 react-over-text run。范式②③的对照 run 待「双车道对比台」(机制③,包 `evals/bench_providers.py`)统一录制后回填。 - Trace 解说器(机制②)可在此基础上把 trace 每步标注成概念,作为卡片的深入页。