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

跨模型稳健性

Day 46 拿到了 v2v1 的 Δ,Day 47 校准了判这个 Δ 的裁判。但还有最后一个隐患没排除:这个 Δ 会不会只是 DeepSeek-V3 这一个模型的怪癖?

阶段: B5 · tool/context engineering + 指标树(Day 41-50) 标签: #robustness #cross-model #sign-agreement #qwen3

今日导引(由浅入深)

Day 46 拿到了 v2>v1 的 Δ,Day 47 校准了判这个 Δ 的裁判。但还有最后一个隐患没排除:这个 Δ 会不会只是 DeepSeek-V3 这一个模型的怪癖?

在 B1→B18 曲线上,今天(Day 48)做的是结论稳健性(robustness)的最后一道关卡——用第二个独立模型 Qwen3 在完全相同的任务集和判分器上重跑 v1/v2,看 Δ 的方向(sign)是否一致。

昨天解决「裁判可信」,今天解决「不是单模型偶然」,两者合起来才让明天(Day 49)的仪表盘有资格把这个 Δ 当作活数据展示。

这是 B5 这条「证明工具改进」证据链里最后一块、也是最容易被偷懒省掉的一块——很多团队只在一个模型上跑完就宣布胜利,正是跨模型复核缺位导致的 eval 过度自信。

今天的最小可判定产出:Qwen3 下 v1=?/M、v2=?/M 两数字 + 「方向是否与 DeepSeek-V3 一致」的判定(待 key)。

1. 机理精读

单模型 Δ 的脆弱性。 一个工具改进在某个特定模型上奏效,可能是因为它恰好契合了那个模型的预训练偏好或 prompt-following 习惯,而非工具设计本身真的更好。 LLM 对 schema 措辞、enum 取值、description 风格的敏感度因模型而异——DeepSeek-V3 偏爱的写法,换 Qwen3 未必。 所以单模型的 Δ 是一个与模型纠缠的量,不能直接外推为「v2 普遍更好」。 Anthropic《Demystifying evals》(2026-01) 的多模型复核思想正是为此:用第二个独立模型证伪「这只是该模型的怪癖」。

sign agreement 是比 Δ 大小更稳的信号。 跨模型比较时,我们要求两个模型的 Δ 数值相等——绝对值受各模型基线影响,本来就会不同。 我们要求的是方向一致:若 DeepSeek-V3 上 v2>v1,Qwen3 上也 v2>v1,则「v2 改进方向」在两个独立模型上都成立,结论稳健性大幅提升。 这叫 sign agreement / 方向一致性。 反之,若一个模型上 v2 更好、另一个上 v1 更好,则说明这个工具改进是模型特异的,不能宣称是普适改进——这本身也是有价值的负结果。

为什么是「独立」模型而非同家族。 复核模型要尽量与首测模型架构/训练数据独立,才能真正证伪怪癖。 用 DeepSeek-V3 的另一个尺寸去复核 DeepSeek-V3,共享的偏好太多,证伪力弱。 Qwen3(Alibaba)与 DeepSeek(深度求索)是不同机构、不同训练 pipeline 的开源模型,构成有效的独立复核。这是选 Qwen3 的设计理由。

约束的传递:same task set + same grader 必须延续。 跨模型复核仍受 Day 46 的受控变量纪律约束——唯一允许变的旋钮是「模型」,任务集(tasks.ts 的同一 tool-use 子集)、判分器(Day 47 校准过的同一 judge)必须和 DeepSeek-V3 那轮完全一致。 否则方向比较又被混杂污染。

边界:方向一致 ≠ 永远更好。 两模型方向一致只把结论从「单模型成立」提升到「两独立模型成立」,仍不是「所有模型/所有任务成立」的全称证明。 它是稳健性的增量证据,不是终点。 收口(Day 50)会诚实地把结论限定在「这两个模型、这批任务、这个 judge」的范围内。

与「不要换错旋钮」的关系。 Day 46 教的是「同任务/同 judge,只换工具版本」;今天教的是「同任务/同 judge/同工具版本对比逻辑,只换模型」。 两者看似矛盾(一个固定模型、一个固定工具),其实是同一受控变量法在不同维度上的两次应用:A/B 固定模型测工具差,跨模型复核固定工具测模型间的方向一致性。 理解这一点就理解了 eval 实验设计的元原则——每张表只允许一个自变量。这条原则会一路贯穿到 B6 对真 MCP server 的端到端评测:换 transport、换 auth、换部署形态时,仍要一次只动一个旋钮,否则归因链立刻断裂。

2. 代码走读:跨 provider 调用与方向判定

跨模型复核不需要新代码,靠的是 runner 的 provider 可切换 + abCompare 的纯函数复用。

  • provider 切换scripts/run-agent-eval.ts):resolveProvider(provider) 根据 --provider 解析 baseURL/默认模型/env key,ENV_KEY 表里 openrouter: 'OPENROUTER_API_KEY'。换模型只需换 --provider/--model,其余 EVAL_TASKS、judge 逻辑不变——这是「跨 provider 调用路径已 wired」的代码依据。
  • 任务集不变:runner 永远 import { EVAL_TASKS } from '../src/agent/eval/tasks',没有按 provider 分叉,保证 Qwen3 跑的是和 DeepSeek-V3 字面相同的任务。
  • judge 一致const judgeModel = judgeId === modelId ? model : buildModel(...)——复核轮要显式指定与 DeepSeek-V3 轮相同的 judge 配置,维持 same-grader。
  • 方向判定靠 abComparesrc/agent/eval/abCompare.ts):对 Qwen3 的 v1/v2 两份报告再调一次 abCompare,拿到 Qwen3 的 deltaMean。比较两个模型的 deltaMean 符号:sign(Δ_deepseek) === sign(Δ_qwen3) 即方向一致。abCompare 是纯函数,对任何 provider 产的报告一视同仁。
  • 报告归档:两轮报告都落 agent-evals/reports/run-<stamp>.json,文件名带时间戳,便于事后核对是同任务集(runner 用 new Date().toISOString().replace(/[:.]/g,'-') 生成 stamp)。
  • dry-run 兜底:无 key 时 runner 打印 Would run ${EVAL_TASKS.length} tasks on "${modelId}"return,所以 Qwen3 的真实两数字同样待 key
  • commit 溯源:runner 用 execSync('git rev-parse --short HEAD') 把短 commit 写进报告,两个模型的报告各自带 commit/时间戳,事后能确证它们跑在同一份工具代码上——跨模型复核的可复现性靠这个落地。

sign-agreement 判定的四种结局

把两模型各自的 Δ 符号列成真值表,结论强度一目了然(Δ>0 记 v2 更好;这里用「v2 优于 v1」口径,与 deltaMean=A−B 的符号需对齐解读):

DeepSeek-V3 ΔQwen3 Δsign 一致?结论
v2>v1v2>v1稳健:改进方向在两独立模型成立,可写进收口
v2>v1v1>v2模型特异:v2 只对 DeepSeek-V3 好,不能宣称普适(有价值的负结果)
v1>v2v1>v2稳健地说明 v2 反而更差——回退 v2 设计
≈0(CI 跨 0)任意单模型本就不显著,跨模型无从谈方向
  • 关键:我们比的是符号,不是数值。即便 DeepSeek-V3 上 +15 pp、Qwen3 上 +4 pp,只要都为正就算方向一致。
  • 第 4 行提醒:若 Day 46 的 Δ 本身 CI 跨 0(不显著),跨模型复核也救不了——得先回去扩大任务集 M 把 CI 收窄。

3. 今日实战

  1. 确认 Qwen3 在 OpenRouter 的具体 variant id(如 qwen3-235b),执行当周用 npm view / OpenRouter 控制台重验。
  2. v1 工具版本跑:pnpm eval:agent --provider openrouter --model <qwen3-variant> --judge <同 Day46 的 judge>
  3. 切到 v2,保持同 provider/judge/任务集,重跑得第二份报告。
  4. abCompare() 算 Qwen3 的 deltaMean,与 Day 46 DeepSeek-V3 的 deltaMean 比符号,给出「方向一致 / 不一致」判定。
  5. 无 key 时:用离线 fixture 模拟 Qwen3 两份报告跑通 abCompare + 符号比较逻辑,commit 占位;真实数字待 key。

4. 今日实测 / 产出

  • 真实结果 「待跑(需 OPENROUTER_API_KEY);可先用离线 fixture 跑通 harness 出 completion%+commit」
  • 产出 transcript:Qwen3 下 v1=?/M、v2=?/M 两数字 + 方向是否与 DeepSeek-V3 一致的判定
  • harness 跨 provider 调用路径已 wired(runner 的 resolveProvider + 固定 EVAL_TASKS)。
  • 本日不臆造 Qwen3 通过数,也把待跑升级成已完成。

5. 常见误区 / 陷阱

  • 用已退役的 Qwen2.5 顶替 Qwen3:seed 明确禁止——复核模型必须是当周仍活跃的 Qwen3 variant。
  • 要求两模型 Δ 数值相等:错;只比方向(sign),绝对值受各自基线影响本就不同。
  • 复核时偷偷换了任务集或 judge:方向比较被混杂污染,复核失去意义。
  • 把方向一致当成「v2 永远更好」:只是两独立模型成立,仍非全称证明。
  • 首测 Δ 本就不显著(CI 跨 0)还硬比方向:方向无从谈起,应先回 Day 46 扩 M 把 CI 收窄。
  • 用闭源旗舰当「独立」复核但不锁版本:模型静默升级会让复核不可复现,复核模型也要记录确切 variant id + 日期。

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

  • Anthropic, Demystifying evals — 2026-01(多模型复核 / robustness 段)。
  • Qwen3 技术报告 / 模型卡(Alibaba)— 2025(2025 主线开源模型,2026-06 仍活跃)。
  • 本仓代码:scripts/run-agent-eval.tsresolveProvider/ENV_KEY)、src/agent/eval/abCompare.tssrc/agent/config/providers.ts(provider 注册表)— 2026-06。
  • DeepSeek-V3 模型卡(深度求索,首测模型基线)— 2025。
  • OpenRouter 模型目录(跨 provider 模型 id / 价格,执行当周重验)— 2026-06。

SOTA检查 (2026-06 更新)

  • 当前主流:跨独立模型的 sign-agreement 复核仍是 eval 结论稳健性的标准做法,2026-06 仍 SOTA。
  • 是否仍 SOTA:是。Qwen3(Alibaba)为 2025 主线开源模型,2026-06 仍活跃,是有效的独立复核模型。
  • 过时黑名单:用已退役的 Qwen2.5 顶替 Qwen3;用同家族不同尺寸冒充「独立」复核;单模型一次跑批就外推全称结论。
  • 下次复查点:执行当周重验 OpenRouter 上 Qwen3 具体 variant id(如 qwen3-235b)是否仍可用、是否有新版本替代。

衔接

  • 昨天:Day 47 — 判分一致性校准(κ≥0.6),保证 judge 可信。
  • 今天:用独立模型 Qwen3 复核 v1/v2 Δ 方向是否与 DeepSeek-V3 一致,证伪「单模型怪癖」。
  • 明天:Day 49 — 指标仪表盘雏形,把 Day46/48 的活数据聚合成可视化。