关于

我不再单独比较模型:先固定任务,再比较 Agent

我越来越不愿意直接回答“哪个模型更好”。

不是因为这个问题没有意义,而是因为它经常把太多变量压缩成了一个名字:模型、Agent 的编排方式、上下文装载、工具权限、任务难度、验收标准,甚至最后有没有人复核。

在一个公开的 Maglev CLI 仓库里,一个很小的版本检查任务让我重新意识到这件事:仓库里的六项 Node 测试全部通过,但运行结果仍然显示 CLI 版本和包内发行物版本不一致。

version --json
{"cli_version":"0.7.4","bundled_version":"0.5.6"}
 
version
maglev-cli: 0.7.4
bundled-dist: 0.5.6
错误: CLI 版本与包内发行物版本不一致
exit code: 2

这不是“模型好不好”的证据。它只是提醒我:评估一个 AI 系统时,能输出结果、能通过已有测试、能识别真正的风险,是三个不同问题。

相关公开资源

模型不是最小评估单位

把模型单独拿出来比较,有点像只比较发动机型号,却不记录车辆、道路、驾驶方式和目的地。

同一个模型,放进不同 Agent 之后,可能会遇到完全不同的工作环境:

  • 一个 Agent 只负责生成答案,另一个 Agent 会先读取仓库、拆任务、调用工具再修改文件;
  • 一个 Agent 要求每次工具调用都经过调用方确认,另一个 Agent 由 SDK 自动执行;
  • 一个 Agent 能保留完整的 Handoff 和验证证据,另一个 Agent 只返回一段最终文本;
  • 一个任务允许模型自由发挥,另一个任务要求严格遵守 schema、退出码和文件边界。

如果这些条件没有固定,最后得到的差异很难归因于模型本身。

所以我现在更愿意把比较单位写成:

模型 × Agent × 任务 × 上下文 × 工具 × 成本约束。

这不是为了让评估表变得复杂,而是为了避免把不同系统的结果误读成模型差异。

三种不同复杂度的公开任务

Maglev 项目里已经有几个适合做评估样本的公开任务。它们的价值不在于已经证明哪个模型更强,而在于它们要求 AI 暴露不同类型的能力。

任务主要考察可观察结果
CLI 版本与发行物检查确定性验证、错误识别、退出码理解JSON 字段、版本差异、错误码、风险解释
Multica completed / blocked 接力Agent 协同、角色边界、失败处理委派、Handoff、阻塞原因、下一责任人
Reality Projection 三场景验证长上下文、证据定位、结构化审查explainlocateverify、evidence refs

任务一:确定性 CLI 验证

这是最容易被低估的一类任务。

表面上,它只是运行命令并解析 JSON;真正的验收却至少有四层:

  1. 输出是否是合法 JSON;
  2. 必填字段是否齐全;
  3. CLI 版本和包内发行物是否一致;
  4. 发现不一致时,是否给出正确的阻断信号。

如果只把“命令有输出”当成成功,评估就会漏掉最后两层。

这个任务适合做低复杂度基准:输入固定、工具数量少、结果容易复核,但仍能区分“会执行命令”和“会解释风险”。

任务二:完成与阻塞的 Agent 接力

协同任务的难点不只是把下一步做出来,而是知道谁应该做、什么情况下不能继续做。

一个公开的 Multica Runtime Proof 契约要求记录:

  • 承载环境;
  • 协调角色和成员 Agent 的对象标识;
  • 触发输入;
  • 精确 mention;
  • 成员的终态 Handoff;
  • 协调角色对 Handoff 的消费结果。

它还明确区分两条路径:

  • completed:成员完成任务并回传,协调角色决定结束或继续派发;
  • blocked:成员发现输入、权限或批准不足,明确阻塞并请求升级或补充。

这类任务不能只用“最终有没有答案”评价。一个 Agent 如果在缺少关键输入时继续编造进度,最终文本再完整,也不应该算成功。

需要说明的是,公开仓库目前提供的是任务契约和验收标准,不等于已经完成了一次可公开复放的第三方 Runtime Proof。因此这里把它当作公开任务样本,而不是现成的横向实验结果。

任务三:Reality Projection 的证据验证

第三类任务更接近长上下文审查:Validator 需要在独立 worktree 中读取模板、Work Contract、Module Map、Gate A/B、完整代码和 Reality 资料,然后覆盖 explainlocateverify 三类场景。

它的输出也不是一句“验证通过”,而是一份带有 commit、digest、review layers、blocking gaps 和 evidence refs 的结构化 Validation Result。

这类任务适合观察:

  • 能不能找到结论对应的证据;
  • 能不能区分已知、未知和阻断;
  • 能不能维持结构化输出;
  • 能不能在资料不足时停止,而不是补一个看起来完整的答案。

它的上下文和审查要求明显高于 CLI 任务。如果把这两个任务混在一个平均分里,复杂度差异就会被隐藏。

互联网资料能说明什么

互联网资料很适合帮助我们识别“可能的差异来源”,但不适合替代同一任务集的实测。

OpenAI 的公开函数调用示例把边界写得很清楚:模型生成工具名和参数,API 不替调用方执行函数;调用方还可以选择强制调用、禁止调用或允许模型自行选择。示例也展示了并行函数调用这一种可能的执行方式。

Google Gemini 的公开示例则展示了另一种接口差异:Interactions API 需要调用方手动处理函数调用和结果,而 Chat SDK 可以启用自动函数执行。

这意味着,在同一个 Maglev 任务上,两个组合之间可能出现这些差异:

  • 谁负责执行工具;
  • 每次调用是否可单独审计;
  • 错误返回由谁处理;
  • 多个工具调用是否并行;
  • Agent 是否保留完整的中间证据。

这些是合理的比较维度,但仍然不是质量结论。

另外,GitHub Copilot cloud agent 的官方文档描述的是一个更完整的 Agent 产品层:它可以研究仓库、制定计划、在分支上修改代码,并进入 review 流程。这样的对象已经包含模型之外的仓库上下文、执行环境、分支和审查机制,不能直接和一次裸模型调用放在同一栏里比较。

我会把这类资料用来拆变量,而不是用来宣布赢家。

一张足够小的评估矩阵

如果真的要比较两个模型或两个 Agent 组合,我会先固定下面这些字段:

字段要记录什么
task_id固定的任务编号和任务说明
input_context允许读取的上下文范围和版本
model模型名称、版本和调用模式
agentAgent 编排方式、角色和停止条件
tools可用工具、权限和自动/手动执行方式
run_id每一次独立运行的标识
output产物、调用记录、错误和退出码
quality任务特定的正确性和完整性判断
traceability是否能回查证据、Handoff 和决策路径
cost_latency成本、耗时和工具调用次数
human_intervention是否需要人工补充、纠偏或复核

这里最重要的是 qualitytraceability 不能只填一个主观总分。

CLI 任务可以检查版本一致性和退出码;协同任务可以检查 Handoff 是否完整、阻塞是否正确;Reality 验证可以检查证据引用和未知项表达。不同任务的质量标准应该随任务定义一起固定,而不是跑完之后再挑一个最方便的指标。

我现在能下的判断,到这里为止

我可以说:

  • 模型比较如果不固定任务和 Agent,很容易把系统差异误判成模型差异;
  • Maglev 的公开任务可以提供不同复杂度、不同证据要求的评估样本;
  • 公开 API 文档显示,工具执行和 Agent 编排方式确实存在不同;
  • “测试通过”和“发现真正风险”应该拆成不同的验收项。

我还不能说:

  • 哪个模型在 Maglev 上最好;
  • 哪个 Agent 一定更稳定或更省成本;
  • 自动工具执行一定优于手动工具循环;
  • 某次厂商文档中的能力一定会在当前权限和接入层中复现。

如果没有统一任务集,我宁愿保留这些未知,也不愿意用一张看起来完整的排行榜替它们做决定。

结尾:先比较组合,再讨论模型

模型当然重要。但在真实工作里,模型只是系统中的一个变量。

任务是否固定,上下文是否一致,Agent 是否能正确调用工具,失败时是否会停下来,结果能不能被复核,这些因素往往决定了一个模型的输出到底能不能变成交付物。

所以我现在会把问题换一种问法:

不先问“哪个模型最好”,先问“在什么任务、什么 Agent、什么上下文和什么成本约束下,哪个组合更合适”。

这个问题的答案可能没有排行榜那么干脆,但更接近真实工作,也更容易被下一次任务验证。

公开资料

Comments