KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
11. 怎样证明多个 Agent 比一个更好? — keel 龙骨
最终报告看起来更专业,不代表协作有效。你需要能够回答:哪一个 Agent 产生了哪个工件、哪次委派增加了延迟、哪个失败导致了降级、最终质量相对单 Agent 是否真的提升。
最终报告看起来更专业,不代表协作有效。你需要能够回答:哪一个 Agent 产生了哪个工件、哪次委派增加了延迟、哪个失败导致了降级、最终质量相对单 Agent 是否真的提升。
用图而不是最后一条文本描述运行
一次 TeamRun 可以表示为有向因果图:
run.started
-> task.created(task-metrics)
-> task.assigned(metrics_agent)
-> task.succeeded(artifact-metrics)
-> task.created(task-deploy)
-> task.failed(timeout)
-> gather.degraded
-> review.completed
-> run.completed
每个事件至少需要:
run_id、event_id、sequence;task_id、parent_task_id、attempt_id;agent_name、版本和模型版本;- 时间、耗时、token 和成本(可用时);
- 输入/输出 Artifact 引用;
- 脱敏后的错误码和策略决定。
事件记录已经发生的事实;TeamRun state 表示当前下一步。两者不能互相替代。
先定义指标,再看演示
质量
- 根因判断正确率;
- evidence 引用准确率;
- 关键字段完整率;
- reviewer 发现真实缺陷的召回率;
- 误报和过度自信率。
运行
- 端到端平均/P95 延迟;
- 每个 Agent 的调用次数和 token;
- fan-out 宽度、handoff 跳数和 review 轮数;
- 任务成功、失败、重试、取消和降级比例;
- 并发峰值和队列等待时间。
安全
- 未授权工具调用数;
- 跨 scope 数据泄露数;
- 被拒绝的提示注入样本;
- 未经审批的副作用数。
单 Agent 基线和消融
至少准备三种实现:
single_agent:一个 Agent 读取允许的全部证据;multi_agent_full:指标、变更、reviewer 和 Coordinator;- 消融版本:移除 reviewer、移除并行、移除某个 Worker。
在相同输入、相同模型和相同验收集上比较。否则“多 Agent 更好”可能只是数据、prompt 或模型版本变化造成的。
不要只用 LLM Judge
可以让模型辅助评价开放文本,但关键性质应尽量使用确定性评分:
- evidence ID 是否存在;
- 必填字段是否齐全;
- 任务是否越过 scope;
- 状态转移是否符合状态机;
- 未审批工具是否被执行;
- token、时间和任务数量是否超限。
对事实正确性、解释质量和有用性,再结合人工标注、规则和模型评审,并抽查模型评审的一致性。
用回放定位最早错误
若最终结论错误,沿图向前找:
最终报告错误
-> reviewer 是否漏掉问题?
-> gather 是否丢失 artifact?
-> Worker 是否错误引用证据?
-> Context Builder 是否注入了错误版本?
-> Coordinator 是否分派了错误任务?
因此每个中间工件都要保留版本和来源。只记录 Agent 最终回答,无法区分协作错误与模型错误。
从进程内项目映射到生产运行时
学习项目使用内存 Registry、ThreadPoolExecutor 和本地 Ollama。生产系统通常需要:
API -> Run Store -> Queue -> Coordinator Worker
-> Agent Worker / remote service
-> Artifact Store / Event Store
跨进程后要补上:任务租约、幂等提交、消息重投、版本冲突、服务发现、身份传播、超时预算和脱敏日志。不要因为框架提供 kickoff() 就忽略这些运行时问题。
本章实验
用项目测试输出的事件建立一张运行表,记录:
| 版本 | 质量 | 延迟 | 模型调用 | 失败率 | 结论 |
|---|---|---|---|---|---|
| 单 Agent | |||||
| 多 Agent | |||||
| 无 Reviewer |
先填测量值,再决定是否保留协作。不要先写结论。
检查理解
- 为什么 trace 要保留 task_id 和 artifact 引用?
- 为什么消融实验比一次 demo 更有说服力?
- 哪些性质应该用确定性代码评分?
- 进程内并行代码进入生产后,哪些边界会改变?
下一章把这些协议组合成一个完整但仍然可学习的事件响应协作组。