"加第二个 Agent 之后效果反而更差"——这不是模型退步,而是编排账没算清。多一个 Agent,就多一次上下文搬运、多一段你看不见的推理、多一条可能断的链路;模型拿到的信息少了,系统却更复杂。编排形态的选择本质是三个量的权衡:上下文装得下多少、步骤有多确定、错误有多贵。三者答完,形态基本就定了。
1. 三种形态各自把不确定性交给谁
| 形态 | 擅长 | 明确短板 | 成本结构 | 可调试性 |
|---|---|---|---|---|
| 单 Agent 多工具 | 任务开放,步骤由模型临场决定 | 工具一多就开始选错;长任务上下文膨胀 | 每轮一次全上下文调用 | 高,一条轨迹可回放 |
| 固定工作流 | 步骤可枚举,结果可断言 | 分支靠人写死,遇新情况只能报错 | 调用次数固定,可预算 | 最高,节点边界清晰 |
| 多 Agent 协作 | 子任务可并行、需要角色隔离 | 通信损耗、信息在传递中失真 | 随 Agent 数近似线性增长 | 低,跨 Agent 因果链要拼 |
这不是先进程度排序,是"谁承担不确定性"的排序:单 Agent 让模型承担,固定工作流让代码承担,多 Agent 把不确定性摊到了通信层——而通信层恰恰最难测。
2. 单 Agent 够用的四个数
工具数 ≤ 12,且语义互不重叠 超过后选择错误率明显上升(按具体模型核对)
任务步数 ≤ 上下文可容纳量的 1/3 留出观察与纠错余量
线性度 ≥ 90% 请求走同一条主路径 分支多说明该拆流程,不是拆 Agent
单步错误代价 可重试、可回滚 代价高就该加代码断言
工具数这个数最容易被误读:真正的约束不是个数,而是模型能否在候选集里稳定区分。10 个名字近似的工具(search_doc / search_kb / search_web)比 20 个语义清晰、参数收敛的工具更容易出错。合并同义工具永远优于加提示词去约束它。
3. 固定工作流什么时候赢
| 场景特征 | 固定工作流的收益 | 自主 Agent 的代价 |
|---|---|---|
| 步骤确定(取数 → 校验 → 落库) | 每步可断言,失败点唯一 | 模型可能跳过校验 |
| 需要审计举证 | 每步输入输出即为证据 | 中间推理不能当凭证 |
| 错误代价高(不可逆写、对外发信) | 硬编码前置条件与回滚点 | 一次误判就是真实损失 |
| 高频重复(日均万级) | 延迟与成本恒定 | 每次都在重新决策 |
判断语言很直接:如果"下一步做什么"你能用 if-else 写清,就不要交给模型。该交给模型的是"这一步的输入怎么理解",而不是"流程往哪走"。把控制流交给模型,等于拿可测性换灵活性,而多数业务并不需要这份灵活性。
4. 多 Agent 的两条真收益
| 收益 | 机制 | 成立前提 |
|---|---|---|
| 上下文隔离 | 每个子 Agent 只看自己那段材料,噪声不互相污染 | 子任务依赖确实稀疏 |
| 角色分离 | 生成与审查用不同提示词/模型,削弱自我确认偏差 | 审查者拿到的是证据,不是结论 |
新增的账同样是硬的:
信息损失 子 Agent 只看到被传入的部分;传少了做错,传多了隔离失效
成本倍增 N 个子 Agent ≈ N 份输入 token,再加汇总轮的全量重复
调试困难 一次错误要在 N 条轨迹里找因果,没有 trace 拼不回链路
方差叠加 每层都可能发散,端到端方差随层数放大(不是相加)
辩论模式是典型例子:它提升的是结论稳定性,不是正确性。两个 Agent 共享同一份错误前提时,辩论只会让错误更自信。辩论值得用的前提是:双方能独立取证,裁判能验证证据。
5. 协作模式的适用判据
| 模式 | 结构 | 适用 | 不适用 |
|---|---|---|---|
| 主管-工人 | 规划者拆任务,工人并行执行 | 子任务可并行、结果可合并 | 子任务强顺序依赖 |
| 辩论 | 多角色出结论,裁判裁决 | 判断类、有可验证证据 | 双方共享同一错误前提 |
| 流水线 | 固定阶段逐段加工 | 阶段清晰:抽取 → 校验 → 生成 | 常需回退到前序阶段重做 |
主管-工人最容易被滥用。它的隐含成本是:主管必须把任务描述到"工人不需要全局视野"的程度。做不到这点,工人会各自补全上下文,产出互相冲突,而你还得在汇总层再猜一次谁对。
6. 工具集粒度:先粗后细
粗粒度(默认起点)
search(query, scope) 一个入口,scope 决定范围
write(target, payload) 一个写入入口,target 决定去向
细粒度(工具数确实爆炸后再拆)
search_doc / search_code / search_ticket / search_log
| 粒度 | 优点 | 代价 | 选择信号 |
|---|---|---|---|
| 少而粗 | 选择简单、校验集中 | 单工具内部逻辑变重 | 默认选它 |
| 多而细 | 行为可预测、易单测 | 选择错误上升、提示词变长 | 需要不同权限或不同副作用 |
比数量更该区分的是副作用等级:只读工具可以放任模型多调几次;写工具必须带前置校验与幂等键。给只读工具配重试、给写工具配"再试一次",是同一套编排里最常见的错配。
7. 失败处理的三层
retry:
scope: step # 只重试失败那一步,不重跑整链
max: 2
condition: idempotent # 非幂等步骤禁止自动重试
rollback:
strategy: compensation # 已完成的写按逆序补偿
checkpoint: each_write # 每个写操作前落检查点
escalate:
to: human
trigger: [budget_exceeded, repeated_failure, low_confidence]
| 失败类型 | 处理 | 不该做的 |
|---|---|---|
| 单步超时/限流 | 局部重试 + 退避 | 整体重跑(会重复写) |
| 中间结果不一致 | 回滚到检查点 | 让模型"再想想" |
| 同类失败 ≥2 次 | 转人工,附完整轨迹 | 改提示词硬试 |
| 置信度低但可用 | 降级输出 + 标记待审 | 静默交付 |
转人工率是编排系统最该盯的指标:它上升通常说明自主部分在退化,而不是说明人太忙。
8. 状态与记忆怎么传
| 传递方式 | 适用 | 风险 |
|---|---|---|
| 全量上下文 | 单 Agent、短任务 | token 成本随轮次近似平方增长 |
| 结构化摘要 | 多 Agent 交接 | 摘要即损失,关键约束先被压掉 |
| 外部状态存储 | 长任务、需断点恢复 | 要定义 schema 与版本 |
多 Agent 交接时,把"不能做什么"写进交接结构(禁改文件、必保字段、不许调用的工具),比只写"要做什么"更能压住偏离。原因很朴素:模型对禁止项的敏感度高于对目标的敏感度。
9. 可观测与评估
{"trace_id":"t-9f2c","agent":"planner","step":3,"decision":"dispatch worker_b",
"input_tokens":2140,"output_tokens":310,"latency_ms":1830,
"cost_usd":0.0041,"retry":0,"escalated":false}
| 指标 | 回答什么 | 常见失真 |
|---|---|---|
| 端到端成功率 | 用户是否拿到结果 | 简单请求拉高均值,掩盖长尾 |
| 分步成功率 | 哪一环在退化 | 步骤粒度可被人为调粗 |
| 转人工率 | 自主能力真实水位 | 人工兜底太强会掩盖问题 |
| 单任务成本 | 编排是否经济 | 缓存命中会低估真实成本 |
错误归因必须落到步骤:同一个端到端失败,可能是检索错、工具选错、拼装丢字段,三者修法完全不同。只报"成功率 78%"的看板,等于什么都不说。
10. 排错表
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 加了第二个 Agent 后准确率下降 | 交接摘要丢了关键约束 | 交接结构里显式列禁止项与必保字段 |
| 多 Agent 成本超预算数倍 | 汇总轮重复携带全部子结果 | 子结果先结构化压缩再汇总 |
| 同一请求两次结果差异大 | 方差按层叠加 | 固定流程、降温度、加结果校验 |
| 工具调用频繁选错 | 工具名语义重叠 | 合并同义工具,缩候选集 |
| 卡在某步反复重试 | 该步非幂等,重试无意义 | 改转人工或补偿事务 |
11. 边界
| 情形 | 判断 | 理由 |
|---|---|---|
| 任务简单、步骤 ≤3 | 单 Agent 或纯代码 | 编排开销大于收益 |
| 延迟敏感(P99 个位数秒) | 不要多 Agent | 串行调用次数直接叠加延迟 |
| 错误可廉价发现(有断言/审核) | 可自主,配自动校验 | 发现得早,试错便宜 |
| 只有演示、没有评估集 | 先建评估再上生产 | 演示衡量的是运气 |
| 高频低价值请求 | 固定工作流 + 缓存 | 每次重新决策不经济 |
多 Agent 的演示效果与生产可用是两件事:演示挑的是成功案例,生产面对的是分布。分不清这一点,架构就会围着 demo 长。
12. 自测
- 你的任务里"下一步做什么"能否用 if-else 写清?如果能,为什么还让模型决定?
- 工具从 8 个加到 20 个,你预期选择错误率怎么变,用什么验证?
- 多 Agent 交接时,你传的是结论还是证据?丢了哪条约束?
- 辩论模式在你的场景里,双方能否独立取证、裁判能否验证?
- 转人工率上升,是能力退化还是请求分布变了,你怎么区分?
- 你的评估集里长尾难例占多少,主路径样本占多少?