返回 AICAP-180
B5 · Day 50tool/context engineering + 指标树

Block 收口与归因

B5 这十天(Day 41-50)走完了一条完整的「用 eval 证明工具改进」的方法论闭环:审计 token(41-44)→ 重设计工具 v1→v2(45)→ 受控 A/B(46)→ 校准裁判(47)→ 跨模型复核(48)→ 活数据仪表盘(49)。

阶段: B5 · tool/context engineering + 指标树(Day 41-50) 标签: #attribution #evidence-chain #block-summary #evals

今日导引(由浅入深)

B5 这十天(Day 41-50)走完了一条完整的「用 eval 证明工具改进」的方法论闭环:审计 token(41-44)→ 重设计工具 v1→v2(45)→ 受控 A/B(46)→ 校准裁判(47)→ 跨模型复核(48)→ 活数据仪表盘(49)。

今天(Day 50)在 B1→B18 曲线上是 B5 的收口节点:把前九天的产物拧成一条可归因的证据链,写成 block 长文片段,定稿 tool/context 三件套(v2 工具 Δ + context-budget 表 + 仪表盘),并跑回归确保全测试绿。

明天起进入 B6(真 MCP server,对齐 2026-07-28 spec)。

今天的最小可判定产出:committed 的 block 总结 md(docs/aipa/day50-block-summary.md)+ 回归全绿;里程碑的双模型 Δ 归因数字诚实标注「待跑(需 key)」。

1. 机理精读

收口的本质是「用数字归因」而非「用形容词总结」。 一个糟糕的收口写「我们重设计了工具,效果更好了」;一个合格的收口写「v2 工具在 DeepSeek-V3 上 Δ=+X pp(配对 bootstrap 95% CI […]),在 Qwen3 上方向一致,judge 与人标 κ≥0.6(N≥50)」。 差别在于后者每个论断都挂着一个可溯源的数字。 Anthropic《Demystifying evals》(2026-01) 的 eval-driven 文化要求结论必须由证据反推,而非先有结论再找佐证。

完整证据链的三个支柱。 v2 工具为何带来 Δ,要靠三块相互支撑的证据:

  1. 双模型同任务集同 judge 的通过数差异(Day 46 DeepSeek-V3 + Day 48 Qwen3)——证明改进不是单模型怪癖;
  2. Cohen's κ≥0.6(Day 47)——证明判这个 Δ 的裁判与人类一致,Δ 不是裁判口径漂移的产物;
  3. 活数据仪表盘(Day 49)——证明这些数字来自真实跑批报告而非硬编码。

三者缺一,结论强度都打折:缺①是单模型偶然,缺②是裁判不可信,缺③是数字无法溯源。

归因的范围必须诚实限定。 即使三块证据齐备,结论也只能限定在「这两个模型、这批任务、这个 judge」的范围内,不能宣称「v2 对所有场景普适更好」。 受控实验给的是内部效度(在受控条件下 Δ 可信),不是外部效度(推广到任意条件)。 收口写作要显式写明这个边界,这是 eval 诚信的一部分——不夸大也不藏掖。

为什么收口要跑回归。 三件套定稿不只是写文档,还要保证 Day 45 引入的 v2 工具、Day 49 的仪表盘脚本没有打破既有测试基线。 pnpm test 回归全绿是「我没有为了好看的数字牺牲代码健康」的证明。 本仓当前真实基线 378 tests passing、tsc clean 是可直接引用的硬数字,收口必须维持它。

边界:收口 ≠ 终点,而是一个里程碑快照。 Block 收口固化的是「截至 Day 50、在当前 key 可用性下」能得到的结论。 其中 token/测试基线是已落地的真实数(可引),而双模型 Δ 的 95% 归因数字仍待 key 跑批。 收口的诚实之处正在于:把「已有的」和「待跑的」清清楚楚分开列,不用前者的确定性给后者背书。

这条证据链为什么是 AISA 作品集的硬通货。 回到顶层 KPI——「可链接资产 + eval 数字 + 单位成本」而非笔记数量。 B5 收口产出的恰是这三样的雏形:可链接的代码(abCompare/cohensKappa/dashboard)、eval 数字(Δ + κ + CI,待 key 落地)、单位成本(tokenizer 的 c/t × 价格表)。 一个能在面试里把这条链从「token 预算 → 工具重设计 → A/B → κ 校准 → 跨模型复核 → 活数据仪表盘」一气讲通的人,证明的不是「会写 prompt」,而是「能把 AI 改动当工程系统来度量和归因」——这正是 AI Solutions Architect 区别于普通 prompt 工程师的分水岭,也是 B5 这十天在 B1→B18 曲线上想沉淀的能力坐标。

2. 代码走读 / 可引基线

收口本身是写作 + 回归,不引入新逻辑,但它引用的每个数字都要能落到真实代码/报告:

  • tokenizer 真实基线src/agent/eval/tokenizer.ts):tokenReport(texts, model) 对一组文本逐条 encode(t, model).length 计 token,聚合出 totalChars/totalTokens/meanCharsPerToken。这就是 3536 chars→1760 tokens、≈2.01 c/t 的产出函数。
  • vocab 来源trainBpe(corpus, numMerges) 返回 size = 256 + merges.size,即 vocab=456(256 字节基 + 200 次合并);全部纯函数、无 key、单测绿——是收口里可直接引用的实测。
  • A/B Δ 来源src/agent/eval/abCompare.ts):abCompare(a, b)deltaMean + ci95 是「v2>v1 Δ + 95% CI」的产出口,但需 Day46/48 真实报告喂入,故 Δ 数字本身待 key
  • κ 来源src/agent/eval/cohensKappa.ts):cohensKappaWithCI(...) 产 κ + 95% bootstrap CI,校准链路已绿,κ 数值待 key 产 judge 输出。
  • 仪表盘来源src/agent/eval/dashboard.ts + scripts/build-dashboard.ts):buildDashboard(reports) 聚合 NSM + 叶子,缺数据时 note 诚实降级。
  • 回归基线pnpm test 维持 378 tests passingtsc clean——收口前后都要复跑确认不破。

收口证据链自检表(每行必须能填,否则结论不成立)

证据来源(Day / 代码)状态标注缺它的后果
v2 工具 Δ + 95% CI(DeepSeek-V3)Day 46 / abCompare.ts待跑(需 key)无受控对比,「v2 更好」只是断言
同方向 Δ(Qwen3 复核)Day 48 / abCompare.ts待跑(需 key)可能是单模型怪癖
judge–人标 κ≥0.6 + CI(N≥50)Day 47 / cohensKappa.ts待跑(需 key)裁判口径不可信,Δ 被污染
context-budget 3 行表Day 44 / tokenizer.ts已实测(1760 tokens)无 token 预算证据,重设计动机悬空
活数据仪表盘 JSONDay 49 / dashboard.ts脚本待建 / 数据待 key数字无法溯源到跑批
回归全绿本日 / pnpm test已实测(378 passing, tsc clean)可能为数字牺牲了代码健康
  • 表里已实测两行(context-budget 的 1760 tokens、回归 378 passing)是当下可引的硬基线;其余四行待 key
  • 收口长文必须照此逐行标注,绝不能把「待跑」那四行写成确定结论——这就是 Day 50 的诚信检查点。

3. 今日实战

  1. 写 block 长文片段:开头给结论一句话(v2 改进方向 + 限定范围),正文按三支柱组织(双模型 Δ / κ 校准 / 活数据仪表盘)。
  2. 汇总三件套:v2 工具 Δ(abCompare 输出)+ context-budget 3 行表(Day 44 产物)+ 仪表盘输出(Day 49 JSON/chart)。
  3. 对每个数字标注状态:tokenizer/测试基线标「已实测」,双模型 Δ / κ 标「待跑(需 key)」。
  4. pnpm test 回归,确认 378 tests passing、tsc clean 不破。
  5. docs/aipa/day50-block-summary.md 并 commit。

4. 今日实测 / 产出

  • 当前仓库基线真实可引378 tests passing、tsc clean;tokenizer 3536 chars→1760 tokens(≈2.01 c/t)已绿(vocab=456)。
  • Block 里程碑的 v2>v1 Δ 的 95% 归因数字「待跑(需 OPENROUTER_API_KEY 完成 Day46/48 双模型跑批)」
  • 产出 committed block 总结 md(docs/aipa/day50-block-summary.md)+ 回归全绿
  • 本日把待跑 Δ/κ 升级成已完成;已有真实数(token/测试基线)与待跑数(双模型 Δ)清楚分列。

5. 常见误区 / 陷阱

  • 单模型单次跑批就下结论:无 CI、无跨模型复核,证据链缺支柱①——seed 点名的反模式。
  • 用形容词代替数字归因:「效果更好」不是结论,「Δ=X pp [CI…]、κ≥0.6、双模型方向一致」才是。
  • 用已实测的 token/测试基线给待跑的 Δ 背书:两类数字必须分开标注状态,不能混用确定性。
  • 收口只写文档不跑回归:可能 v2 工具/仪表盘脚本悄悄打破了 378 测试基线而不自知。
  • 把结论外推到没测过的模型/任务:内部效度 ≠ 外部效度,结论必须显式限定在「这两个模型、这批任务、这个 judge」。
  • 收口后不更新 SOTA 复查点:key 到位、Δ/κ 落地后忘了回头把占位换真实数并重验模型 id,导致归因永远停在「待跑」。

6. 学习资源(每条带 YYYY-MM)

  • Anthropic, Demystifying evals — 2026-01(eval-driven 归因、完整证据链)。
  • Anthropic, Writing effective tools for agents — 2025-09(v1→v2 工具重设计原则)。
  • Anthropic, Effective context engineering for AI agents — 2025-09(context-budget 表,三件套之一的方法论来源)。
  • 本仓代码:src/agent/eval/abCompare.tscohensKappa.tsdashboard.tstokenizer.ts + scripts/run-agent-eval.tsscripts/build-dashboard.ts — 2026-06。
  • 经典统计:配对 bootstrap CI、Cohen's κ(重抽样推断 + inter-rater 一致性,无过时风险)。

SOTA检查 (2026-06 更新)

  • 当前主流:双模型 + κ 校准 + 活数据仪表盘的归因法,2026-06 仍 current,是 eval-driven 结论的标准证据链。
  • 是否仍 SOTA:是。受控 A/B + 配对 CI + 跨模型复核 + judge 校准的组合无更优替代。
  • 过时黑名单:单模型单次跑批就下结论(无 CI、无跨模型复核);用形容词代替数字归因;硬编码数字冒充实测。
  • 下次复查点:执行当周重验 OpenRouter 上 DeepSeek-V3 / Qwen3 模型 id;key 到位后把 Δ/κ 占位替换为真实数并更新本收口。

衔接

  • 昨天:Day 49 — 指标仪表盘雏形(活数据聚合)。
  • 今天:把双模型 Δ + κ 校准 + 活数据仪表盘拧成可归因证据链,定稿 tool/context 三件套,回归全绿,B5 收口。
  • 明天:Day 51 — 进入 B6,精读 MCP 2026-07-28 stateless 规范,从进程内 mock 走向真网络 MCP server。