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 工具为何带来 Δ,要靠三块相互支撑的证据:
- 双模型同任务集同 judge 的通过数差异(Day 46 DeepSeek-V3 + Day 48 Qwen3)——证明改进不是单模型怪癖;
- Cohen's κ≥0.6(Day 47)——证明判这个 Δ 的裁判与人类一致,Δ 不是裁判口径漂移的产物;
- 活数据仪表盘(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 passing、tscclean——收口前后都要复跑确认不破。
收口证据链自检表(每行必须能填,否则结论不成立)
| 证据 | 来源(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 预算证据,重设计动机悬空 |
| 活数据仪表盘 JSON | Day 49 / dashboard.ts | 脚本待建 / 数据待 key | 数字无法溯源到跑批 |
| 回归全绿 | 本日 / pnpm test | 已实测(378 passing, tsc clean) | 可能为数字牺牲了代码健康 |
- 表里已实测两行(context-budget 的 1760 tokens、回归 378 passing)是当下可引的硬基线;其余四行待 key。
- 收口长文必须照此逐行标注,绝不能把「待跑」那四行写成确定结论——这就是 Day 50 的诚信检查点。
3. 今日实战
- 写 block 长文片段:开头给结论一句话(v2 改进方向 + 限定范围),正文按三支柱组织(双模型 Δ / κ 校准 / 活数据仪表盘)。
- 汇总三件套:v2 工具 Δ(
abCompare输出)+ context-budget 3 行表(Day 44 产物)+ 仪表盘输出(Day 49 JSON/chart)。 - 对每个数字标注状态:tokenizer/测试基线标「已实测」,双模型 Δ / κ 标「待跑(需 key)」。
- 跑
pnpm test回归,确认 378 tests passing、tsc clean 不破。 - 落
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.ts、cohensKappa.ts、dashboard.ts、tokenizer.ts+scripts/run-agent-eval.ts、scripts/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。