2768 字
约 9 分钟
16
S21-A05 · Agent 编排决策:单 Agent、多 Agent 与固定工作流

"加第二个 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. 自测

  1. 你的任务里"下一步做什么"能否用 if-else 写清?如果能,为什么还让模型决定?
  2. 工具从 8 个加到 20 个,你预期选择错误率怎么变,用什么验证?
  3. 多 Agent 交接时,你传的是结论还是证据?丢了哪条约束?
  4. 辩论模式在你的场景里,双方能否独立取证、裁判能否验证?
  5. 转人工率上升,是能力退化还是请求分布变了,你怎么区分?
  6. 你的评估集里长尾难例占多少,主路径样本占多少?
S21-A05 · Agent 编排决策:单 Agent、多 Agent 与固定工作流
https://www.clxhxhhr.top/posts/6096/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。