来源:互联网 更新时间:2026-08-08 07:33
单个 Agent 的局限:

单 Agent 瓶颈│├── 1. 上下文窗口有限│ └── 塞太多指令 → 遵循率下降│├── 2. 工具集臃肿│ └── 100 个工具选哪个?选择成本高│├── 3. 角色混乱│ └── 让一个 Agent 同时写代码 + 做测试 + 写文档 → 质量全拉│└── 4. 容错差└── 一个环节出错,整个链路崩
Multi-Agent 的核心思想:拆职责、专精化、可组合。
Multi-Agent 优势│├── 职责单一 → 每个 Agent 只做一件事,Prompt 更精准├── 工具隔离 → 每个 Agent 只访问自己需要的工具├── 并行执行 → 无依赖的步骤可以同时跑├── 容错兜底 → 单个 Agent 失败不影响整体└── 可测试性 → 每个 Agent 可以独立测试和优化
最简单的模式:Agent A 的输出作为 Agent B 的输入,逐级传递。
顺序链│├── 输入 → [翻译Agent] → [润色Agent] → [排版Agent] → 输出│├── 特点│ ├── 简单可靠│ ├── 每步只依赖上一步│ └── 延迟 = 各步之和│└── 适用场景├── 内容生产流水线└── 数据处理管道
代码示例:
public class PipelineOrchestrator {private final List
一个协调者把任务分给多个专业 Agent,各自独立完成后汇总。
分发-聚合│├── 协调者│ ├── → [代码审查Agent]│ ├── → [安全扫描Agent]│ ├── → [性能分析Agent]│ └── → [风格检查Agent]│├── 各 Agent 并行执行│├── 协调者聚合结果│ ├── 合并各 Agent 报告│ ├── 去重和冲突处理│ └── 生成最终报告│└── 适用场景├── 代码审查├── 多维度分析└── 并行信息收集
代码示例:
public class FanOutOrchestrator {private final List
一个路由 Agent 根据输入判断该交给谁处理,类似微服务网关。
以路由模式为例,其核心架构设计如下:
路由模式│├── 输入 → [路由Agent]│ ││ ├── 技术问题 → [技术支持Agent]│ ├── 订单相关 → [订单处理Agent]│ ├── 投诉建议 → [客服Agent]│ └── 无法判断 → [通用Agent]│├── 特点│ ├── 动态选择,按需分发│ ├── 路由 Agent 的判断力是关键│ └── 可以多级路由│└── 适用场景├── 客服系统├── 智能工单分配└── 多技能助手
代码示例:
public class RouterOrchestrator {private final Agent router;private final Map
多个 Agent 对同一问题给出不同方案,由一个裁决 Agent 或投票机制选最优。
辩论-裁决│├── 输入 → [方案A Agent] → 方案 A│→ [方案B Agent] → 方案 B│→ [方案C Agent] → 方案 C│├── [裁决Agent] 评估各方案│ ├── 打分│ ├── 指出各方案优劣│ └── 选出最佳或合并│├── 特点│ ├── 提高决策质量│ ├── 适合开放性、创造性问题│ └── 成本高(多次 LLM 调用)│└── 适用场景├── 方案评审├── 代码架构设计└── 创意生成
| 维度 | 顺序链 | 分发-聚合 | 路由 | 辩论-裁决 |
|---|---|---|---|---|
| 复杂度 | 低 | 中 | 中 | 高 |
| 延迟 | 高(串行) | 低(并行) | 低 | 高(多轮) |
| 成本 | 1x | Nx | 1-2x | Nx+1 |
| 容错 | 差(链式) | 好(隔离) | 中 | 好 |
| 适用 | 流水线 | 多维度 | 分类 | 决策 |
| 关键风险 | 单点故障 | 聚合冲突 | 路由误判 | 成本失控 |
Multi-Agent 最大的坑不是编排,而是状态传递。
状态传递方式│├── 1. 直接传参(最简单)│ ├── Agent A 的输出 → Agent B 的输入│ ├── 适合简单字符串传递│ └── 问题:结构复杂时容易丢信息│├── 2. 共享上下文(最常用)│ ├── 所有 Agent 读写同一个 Context 对象│ ├── 类似黑板模式(Blackboard Pattern)│ └── 问题:并发写入、覆盖冲突│└── 3. 消息总线(最解耦)├── Agent 通过消息队列通信├── 发布-订阅模式└── 问题:实现复杂、调试难
public class AgentContext {private final Map
| 原则 | 说明 | 反例 |
|---|---|---|
| 命名空间隔离 | 各 Agent 用前缀区分 key | 两个 Agent 都写 result |
| 只追加不覆盖 | 用 list 而非单值 | 后写的覆盖先写的 |
| 不可变传递 | 传深拷贝而非引用 | Agent A 修改了 Agent B 正在读的对象 |
| 记录来源 | 每个 key 标记写入者 | 不知道数据谁写的 |
容错策略│├── Level 1: 重试│ ├── 对失败 Agent 自动重试(最多 N 次)│ ├── 适合:LLM 调用超时、网络抖动│ └── 不适合:逻辑错误、参数错误│├── Level 2: 降级│ ├── 主 Agent 失败 → 切换到备选 Agent│ ├── 复杂 Agent 失败 → 切换到简单版本│ └── 适合:非核心路径│└── Level 3: 隔离├── 失败 Agent 的结果标记为 error├── 其他 Agent 继续执行└── 适合:分发-聚合模式
public class ResilientOrchestrator {private static final int MAX_RETRY = 2;public String executeWithRetry(Agent agent, String input) {Exception lastError = null;for (int i = 0; i <= MAX_RETRY; i++) {try {return agent.run(input);} catch (AgentException e) {lastError = e;log.warn("Agent [{}] attempt {} failed: {}",agent.getName(), i + 1, e.getMessage());}}// 重试耗尽,走降级Agent fallback = agent.getFallback();if (fallback != null) {log.warn("Falling back to [{}] for input",fallback.getName());return fallback.run(input);}throw new AgentException("All retries exhausted", lastError);}}
把四种模式组合起来,设计一个完整的代码审查系统。
代码审查 Multi-Agent 架构│├── [路由Agent] 判断变更类型│ ├── 前端变更 → [前端审查组]│ │ ├── [样式检查Agent]│ │ ├── [组件规范Agent]│ │ └── [可访问性Agent]│ ││ ├── 后端变更 → [后端审查组]│ │ ├── [代码规范Agent]│ │ ├── [安全扫描Agent]│ │ └── [性能分析Agent]│ ││ └── 全栈变更 → 两组都执行│├── [聚合Agent] 汇总各组结果│ ├── 去重│ ├── 按严重度排序│ └── 生成审查报告│└── [辩论Agent](可选)└── 对冲突意见进行裁决
public class CodeReviewOrchestrator {private final Agent router;private final Map
安全扫描 Agent 的 System Prompt:
你扮演的是代码安全审查专家,职责范围很明确:1. 排查 SQL 注入风险2. 排查 XSS 漏洞3. 排查硬编码密钥或密码4. 排查不安全的反序列化5. 排查权限绕过风险输出时请按这个格式来:- 严重级别:CRITICAL / HIGH / MEDIUM / LOW- 问题描述- 所在位置(行号)- 修复建议仅报告安全问题,代码风格不在本次审查范围内。
| 框架 | 语言 | 编排方式 | 特点 |
|---|---|---|---|
| LangGraph | Python | 图(有向无环图) | 灵活、支持循环、可维护状态 |
| CrewAI | Python | 角色协作 | 入门门槛低,角色定义也足够直观 |
| AutoGen | Python | 对话驱动 | Agent 之间通过自然语言协同交流 |
| Spring AI | Java | 编程式 | 偏企业级,和 Spring 生态结合紧密 |
| Semantic Kernel | C# | 编程式 | 更贴近微软生态,插件化能力突出 |
public class MultiAgentConfig {public Agent codeReviewAgent(ChatClient chatClient,List
问题:Agent A 的中间状态被泄露进了 Agent B 的 Prompt原因:上下文对象被共享,但没有做命名空间隔离修复:├── 每个 Agent 只读写自己的 namespace├── 敏感中间状态不要写入共享上下文└── 聚合前先做数据脱敏
问题:路由 Agent 把请求又路由回自己 → 形成无限循环原因:路由表配置有误修复:├── 设置最大路由深度(例如 3 层)├── 将路由历史写入 Context,用于检测循环└── 一旦无法路由,强制走 default
问题:安全 Agent 给出"拒绝",性能 Agent 却给出"通过"原因:不同 Agent 的优化目标并不一致修复:├── 先把优先级定清楚:安全 > 正确 > 性能 > 风格├── 由聚合 Agent 按优先级做最终裁决└── 如果存在冲突,则标记为"需人工确认"
问题:4 个 Agent 并行审查 × 3 轮辩论 = 12 次 LLM 调用原因:缺少成本预算机制修复:├── 设置 Token 上限├── 非核心路径优先使用小模型├── 对相同输入结果做缓存└── 辩论最多保留 2 轮,避免没完没了地讨论
| # | 检查项 | 说明 |
|---|---|---|
| 1 | Agent 职责是否单一? | 一个 Agent 只负责一件事 |
| 2 | 工具集是否最小化? | 只提供必要工具 |
| 3 | 状态传递是否安全? | 命名空间隔离、保持不可变 |
| 4 | 容错策略是否到位? | 重试 + 降级 + 隔离 |
| 5 | 路由是否可观测? | 记录路由决策及其原因 |
| 6 | 成本是否可控? | Token 上限 + 缓存 |
| 7 | 是否有兜底? | 失败时是否具备 default 行为 |
| 8 | 调试是否方便? | 执行日志 + 状态快照 |
Q:Multi-Agent 和单 Agent 有什么区别?
Q:Multi-Agent 编排有哪些模式?
Q:Agent 间状态怎么传?
下一篇我们聊 Agent 可观测性与调试:Multi-Agent 系统出了问题怎么查?执行日志怎么设计?如何给 Agent 加"黑匣子"?让每个决策都有据可查。
本文是 AI Agent 开发实战系列第 11 篇,系列目录:
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
晶核艾尔莎角色盘点 晶核艾尔莎强度分析与实战表现
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
区块链OTC交易所有哪几家比较正规?
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
腾讯ima怎么创建共享知识库?
AMD英特尔集体失眠!英伟达Rosa CPU搭载Rigel核:单核性能碾压x86
潜水员戴夫丛林DLC接吻的鱼任务攻略
原神霜月三处月灵龛具体位置汇总
合集38个项目筹集5.406亿美元 Figure融资2亿
快手手机版设置关闭展示亲密朋友的方法
2026热门直线加速赛车手游推荐:高人气、爽快加速体验的精品榜单
遗忘之海密室通关教程 遗忘之海密室全关卡解谜思路与难点解析
五菱星光L六座新能源SUV上市:三版可选,中配12.28
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
华为Mate 70系列首发的红枫镜头下放至千元档:全员普及原色影像
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc