【从0开发一个 Agent】第十二章:实现多 Agent 协作
在第十一章中,我们通过 Planner 和 REWOO 架构,让单个 Agent 具备了拆解复杂任务、按图执行和失败重规划的能力。然而,当面对“调研全球电动汽车市场并生成30页深度报告”这类极端复杂的任务时,单个 Agent 依然会暴露出致命的结构性缺陷:上下文窗口被海量中间信息撑爆、跨领域专业能力被稀释、以及单点故障导致整个链路崩溃。
本章,我们将把 Agent 从“全能但平庸的瑞士军刀”升级为“各司其职的专家团队”。通过引入多 Agent 协作架构,我们不仅能突破单模型的能力天花板,还能实现真正的 1+1>2 的企业级生产力。
1. 为什么一个 Agent 不够用?
在单 Agent 模式下,模型被迫同时扮演研究员、分析师、写手和审校员。这种“全能”在复杂场景下反而成了诅咒:
- 记忆衰减与上下文污染:2026年最先进的模型上下文窗口也不过200K token,但一个真实的企业级任务(如“调研→分析→翻译→排版”)产生的中间信息量远超此限。Agent 读着读着就忘了开头,检索越往后越偏离主题。
- 专业稀释:通用大模型在单一垂直领域的任务成功率,比经过该领域微调的专用 Agent 平均低27%。让一个 Agent 既懂金融又懂法律,既会写代码又会做设计,本身就是悖论。
- 单点故障风险:当所有任务依赖一个 Agent 时,它的一次幻觉、一次工具调用失败,就会让整个流程崩溃。超过93%的企业 Agent 项目卡在从概念验证到生产的最后一公里,核心原因就是可靠性不足。
多 Agent 协作的底层逻辑,不是简单地把工作拆开,而是像真实团队一样,通过分工、制衡和协作,实现能力的专业化与系统的鲁棒性(这句话是从书里看到直接抄过来的 鲁棒性是一个系统或组件在出现不正确的或矛盾的输入时能够正确运行的程度)。
2. 多 Agent 协作架构设计
我们采用业界最成熟、最适合企业级场景的 Orchestrator-Workers 模式。这种模式全局可控、分工明确,完美契合我们已有的 Planner 和 Tool Calling 能力。

架构核心设计思想:
- Manager Agent(指挥官):唯一与用户交互的入口。负责意图识别、任务拆解、Worker 调度、结果整合与质量验收。用户全程只和 Manager 对话,感知不到背后有多个专家在协作。
- Worker Agents(执行者):各司其职的专家。Researcher 专注信息检索,Writer 专注内容创作,Reviewer 专注质量把关。每个 Worker 拥有独立的上下文窗口和专属工具集,避免上下文污染。
- 安全与记忆隔离:Manager 作为唯一对外接口,天然具备权限校验和审计能力。每个 Worker 的记忆和工具调用被严格隔离,即使某个 Worker 被攻破,也无法泄露核心凭证或污染全局状态。
3. 核心代码实现
3.1 定义 Worker Agent 角色
我们将每个 Worker 封装为独立的 Agent 实例,通过 as_tool() 方法将其包装成 Manager 可调用的工具。这确保了 Manager 与 Worker 之间的通信是结构化、类型安全的。
// src/lib/agents/workers.ts
import { Agent, tool } from 'ai';
import { z } from 'zod';
import { openai } from '@/lib/ai/config';
// Researcher Agent:专注信息检索
export const researcherAgent = new Agent({
name: 'Researcher',
model: openai('gpt-4o'),
instructions: `你是专业的信息研究员。你的唯一任务是根据查询要求,调用MCP或Tool获取准确、全面的原始资料。
规则:
1. 只返回事实和数据,不要进行总结或分析。
2. 必须标注信息来源。
3. 如果找不到相关信息,明确告知。`,
tools: {
// 注入MCP工具或专用检索工具
searchWeb: webSearchTool,
queryDatabase: databaseQueryTool,
},
});
// Writer Agent:专注内容创作
export const writerAgent = new Agent({
name: 'Writer',
model: openai('gpt-4o'),
instructions: `你是专业的内容写手。你的任务是根据研究员提供的原始资料,撰写结构清晰、语言流畅的初稿。
规则:
1. 严格基于提供的资料写作,不要编造。
2. 保持客观中立的语气。
3. 输出Markdown格式。`,
});
// Reviewer Agent:专注质量把关
export const reviewerAgent = new Agent({
name: 'Reviewer',
model: openai('gpt-4o'),
instructions: `你是严格的内容审校员。你的任务是审核初稿的准确性、完整性和合规性。
规则:
1. 检查事实是否与原始资料一致。
2. 检查是否有遗漏的关键信息。
3. 检查是否符合企业内容规范。
4. 只返回审核意见和修改建议,不要重写内容。`,
});
3.2 构建 Manager Agent 与协作流程
Manager Agent 将 Worker 包装为工具,并通过结构化 Prompt 控制协作流程。我们引入“辩论式”审核机制,确保输出质量。
// src/lib/agents/manager.ts
import { Agent, tool } from 'ai';
import { z } from 'zod';
import { openai } from '@/lib/ai/config';
import { researcherAgent, writerAgent, reviewerAgent } from './workers';
// 将Worker包装为工具
const researchTool = tool({
description: '调用研究员Agent进行信息检索',
parameters: z.object({
query: z.string().describe('检索查询'),
}),
execute: async ({ query }) => {
const result = await researcherAgent.run(query);
return result.text;
},
});
const writeTool = tool({
description: '调用写手Agent生成初稿',
parameters: z.object({
materials: z.string().describe('研究员提供的原始资料'),
outline: z.string().describe('内容大纲'),
}),
execute: async ({ materials, outline }) => {
const prompt = `资料:\n${materials}\n\n大纲:\n${outline}`;
const result = await writerAgent.run(prompt);
return result.text;
},
});
const reviewTool = tool({
description: '调用审校员Agent审核初稿',
parameters: z.object({
draft: z.string().describe('待审核的初稿'),
materials: z.string().describe('原始资料,用于核对事实'),
}),
execute: async ({ draft, materials }) => {
const prompt = `初稿:\n${draft}\n\n原始资料:\n${materials}`;
const result = await reviewerAgent.run(prompt);
return result.text;
},
});
// Manager Agent
export const managerAgent = new Agent({
name: 'Manager',
model: openai('gpt-4o'),
instructions: `你是企业级AI团队的指挥官。你的职责是协调研究员、写手和审校员完成复杂任务。
协作流程:
1. 分析用户需求,拆解为检索、写作、审核子任务。
2. 调用研究员获取资料。
3. 调用写手生成初稿。
4. 调用审校员审核初稿。
5. 如果审核不通过,将意见反馈给写手进行迭代(最多3轮)。
6. 整合最终结果,以统一、友好的语气回复用户。
重要:你必须以自己的名义回复用户,不要让用户感知到背后有多个专家。`,
tools: {
research: researchTool,
write: writeTool,
review: reviewTool,
},
});
3.3 在 API Route 中集成多 Agent 协作
// src/app/api/chat/route.ts
import { streamText } from 'ai';
import { managerAgent } from '@/lib/agents/manager';
import { sanitizeUserInput } from '@/lib/prompt/sanitizer';
import { retrieveContext } from '@/lib/rag/retriever';
export async function POST(req: Request) {
const { messages, userId } = await req.json();
const lastMessage = messages[messages.length - 1];
// 1. 安全过滤
const sanitizedQuery = sanitizeUserInput(lastMessage.content);
// 2. 检索长期记忆与RAG上下文(注入Manager的System Prompt)
const memory = await retrieveMemory(userId, sanitizedQuery);
const ragContext = await retrieveContext(userId, sanitizedQuery);
// 3. 动态增强Manager的指令
const enhancedInstructions = `${managerAgent.instructions}
当前用户记忆:${memory || '无'}
当前可用知识:${ragContext || '无'}`;
// 4. 执行多Agent协作
const result = await streamText({
model: openai('gpt-4o'),
system: enhancedInstructions,
messages: messages.slice(0, -1), // 移除最后一条用户消息,由Manager直接处理
tools: managerAgent.tools,
maxSteps: 10, // 允许Manager进行多轮Worker调度
});
// 5. 异步提取协作过程中的关键记忆
result.onFinish(async ({ finishReason }) => {
if (finishReason === 'stop') {
await extractMultiAgentMemory(messages, result.text, userId);
}
});
return result.toDataStreamResponse();
}
4. 测试验证
验证清单:
- 专业分工验证:输入“调研2026年欧洲VC投资趋势并生成报告”,验证 Researcher 是否只返回原始数据,Writer 是否基于数据写作,Reviewer 是否指出事实错误。
- 迭代审核验证:故意让 Writer 编造一个数据,验证 Reviewer 是否能识别并反馈,Manager 是否能触发 Writer 重新生成。
- 上下文隔离验证:在 Researcher 的检索过程中注入无关信息,验证 Writer 和 Reviewer 的上下文是否被污染。
- 用户无感知验证:观察前端输出,确认用户只看到 Manager 的统一回复,没有暴露内部 Agent 的对话细节。
5. 常见问题与踩坑分析
问题1:多Agent通信成本过高,Token消耗爆炸
原因:Agent 间通过自然语言传递大量冗余信息,且多轮迭代导致通信次数呈指数级增长。研究显示,多Agent交互消耗的Token可达普通聊天的15倍。
解决:
- 结构化通信:Worker 之间不直接对话,所有通信必须通过 Manager 中转,且使用 JSON 等结构化格式传递关键信息,而非自然语言。
- 摘要压缩:在 Worker 返回结果前,强制其生成摘要,只将摘要传递给 Manager,原始资料存入共享存储(如MinIO),通过引用传递。
- 并行执行:对于无依赖的子任务(如同时调研三个竞品),Manager 应并行调用多个 Researcher,而非串行。
问题2:责任模糊,难以调试与归因
原因:最终错误是多个 Agent 交互的结果,很难定位是 Manager 拆解错了、Worker 执行错了,还是整合时出错了。
解决:
- 全链路追踪:为每个 Agent 的每次调用生成唯一的 Trace ID,记录输入、输出、Token 消耗、执行时间。
- 人工可插拔监督:在 Manager 与 Worker 的通信中插入人工审核节点。当置信度低于阈值时,自动暂停并通知人类介入。
- Worker 独立评估:为每个 Worker 建立独立的评估数据集,定期测试其专业能力,确保问题可归因。
问题3:Worker 越权或幻觉传播
原因:Worker 的 Instructions 不够严格,导致其执行了非预期操作,或产生了幻觉并传递给下游。
解决:
- 最小权限原则:每个 Worker 只拥有完成其任务所需的最小工具集。Researcher 不应有写入权限,Writer 不应有检索权限。
- 输出校验:在 Worker 返回结果后,Manager 必须使用 Zod 等工具进行结构化校验,不符合格式或包含幻觉特征的结果直接丢弃并触发重试。
- 安全网关:所有 Worker 的工具调用必须经过安全网关,网关负责凭证托管、权限校验和审计日志,Worker 本身不持有真实 API Key。
6. 本章总结
- 我们剖析了单 Agent 在复杂任务中的结构性缺陷,并引入了 Orchestrator-Workers 多 Agent 协作架构。
- 实现了 Researcher、Writer、Reviewer 三个专业化 Worker Agent,并通过 as_tool() 机制将其封装为 Manager 可调用的工具。
- 构建了 Manager Agent 的协作流程,支持任务拆解、迭代审核和结果整合,同时确保用户无感知。
- 解决了多 Agent 通信成本、责任归因和安全越权等核心工程问题,为生产环境部署奠定了基础。
至此,你的 AI Agent 已经具备了拆解复杂任务、按图执行和失败重规划的能力,真正实现了从“单步执行者”到“项目管理者”的跨越。
但企业级应用不仅需要强大的规划能力,还需要支持多模态输入(如文件上传、图片分析、OCR)。从下一章开始,我们将实现 文件处理能力,让你的 Agent 能够“看”和“读”各种格式的文件。
更多推荐


所有评论(0)