【从0开发一个 Agent】第十二章:实现多 Agent 协作

📅 2026/7/24 20:08:50
【从0开发一个 Agent】第十二章:实现多 Agent 协作
在第十一章中我们通过 Planner 和 REWOO 架构让单个 Agent 具备了拆解复杂任务、按图执行和失败重规划的能力。然而当面对“调研全球电动汽车市场并生成30页深度报告”这类极端复杂的任务时单个 Agent 依然会暴露出致命的结构性缺陷上下文窗口被海量中间信息撑爆、跨领域专业能力被稀释、以及单点故障导致整个链路崩溃。本章我们将把 Agent 从“全能但平庸的瑞士军刀”升级为“各司其职的专家团队”。通过引入多 Agent 协作架构我们不仅能突破单模型的能力天花板还能实现真正的 112 的企业级生产力。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.tsimport{Agent,tool}fromai;import{z}fromzod;import{openai}from/lib/ai/config;// Researcher Agent专注信息检索exportconstresearcherAgentnewAgent({name:Researcher,model:openai(gpt-4o),instructions:你是专业的信息研究员。你的唯一任务是根据查询要求调用MCP或Tool获取准确、全面的原始资料。 规则 1. 只返回事实和数据不要进行总结或分析。 2. 必须标注信息来源。 3. 如果找不到相关信息明确告知。,tools:{// 注入MCP工具或专用检索工具searchWeb:webSearchTool,queryDatabase:databaseQueryTool,},});// Writer Agent专注内容创作exportconstwriterAgentnewAgent({name:Writer,model:openai(gpt-4o),instructions:你是专业的内容写手。你的任务是根据研究员提供的原始资料撰写结构清晰、语言流畅的初稿。 规则 1. 严格基于提供的资料写作不要编造。 2. 保持客观中立的语气。 3. 输出Markdown格式。,});// Reviewer Agent专注质量把关exportconstreviewerAgentnewAgent({name:Reviewer,model:openai(gpt-4o),instructions:你是严格的内容审校员。你的任务是审核初稿的准确性、完整性和合规性。 规则 1. 检查事实是否与原始资料一致。 2. 检查是否有遗漏的关键信息。 3. 检查是否符合企业内容规范。 4. 只返回审核意见和修改建议不要重写内容。,});3.2 构建 Manager Agent 与协作流程Manager Agent 将 Worker 包装为工具并通过结构化 Prompt 控制协作流程。我们引入“辩论式”审核机制确保输出质量。// src/lib/agents/manager.tsimport{Agent,tool}fromai;import{z}fromzod;import{openai}from/lib/ai/config;import{researcherAgent,writerAgent,reviewerAgent}from./workers;// 将Worker包装为工具constresearchTooltool({description:调用研究员Agent进行信息检索,parameters:z.object({query:z.string().describe(检索查询),}),execute:async({query}){constresultawaitresearcherAgent.run(query);returnresult.text;},});constwriteTooltool({description:调用写手Agent生成初稿,parameters:z.object({materials:z.string().describe(研究员提供的原始资料),outline:z.string().describe(内容大纲),}),execute:async({materials,outline}){constprompt资料\n${materials}\n\n大纲\n${outline};constresultawaitwriterAgent.run(prompt);returnresult.text;},});constreviewTooltool({description:调用审校员Agent审核初稿,parameters:z.object({draft:z.string().describe(待审核的初稿),materials:z.string().describe(原始资料用于核对事实),}),execute:async({draft,materials}){constprompt初稿\n${draft}\n\n原始资料\n${materials};constresultawaitreviewerAgent.run(prompt);returnresult.text;},});// Manager AgentexportconstmanagerAgentnewAgent({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.tsimport{streamText}fromai;import{managerAgent}from/lib/agents/manager;import{sanitizeUserInput}from/lib/prompt/sanitizer;import{retrieveContext}from/lib/rag/retriever;exportasyncfunctionPOST(req:Request){const{messages,userId}awaitreq.json();constlastMessagemessages[messages.length-1];// 1. 安全过滤constsanitizedQuerysanitizeUserInput(lastMessage.content);// 2. 检索长期记忆与RAG上下文注入Manager的System PromptconstmemoryawaitretrieveMemory(userId,sanitizedQuery);constragContextawaitretrieveContext(userId,sanitizedQuery);// 3. 动态增强Manager的指令constenhancedInstructions${managerAgent.instructions}当前用户记忆${memory||无}当前可用知识${ragContext||无};// 4. 执行多Agent协作constresultawaitstreamText({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(finishReasonstop){awaitextractMultiAgentMemory(messages,result.text,userId);}});returnresult.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 建立独立的评估数据集定期测试其专业能力确保问题可归因。问题3Worker 越权或幻觉传播原因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 能够“看”和“读”各种格式的文件。