多Agent协作系统:从单Agent到Agent Swarm
多Agent协作系统从单Agent到Agent Swarm单Agent能力有限复杂任务需要多个Agent协作完成。本文将介绍多Agent系统的设计思想、主流框架和实战代码。一、为什么需要多Agent单Agent面临的问题任务过于复杂一个Agent难以兼顾所有方面角色冲突同一个Agent既要写代码又要做测试上下文过载长任务导致记忆混乱多Agent的优势专业分工每个Agent负责一个领域并行处理多任务同时进行质量检查Agent之间互相审核容错能力单个Agent失败不影响整体二、多Agent协作模式模式 说明 | 示例 ------------|------顺序协作Agent A - Agent B - Agent C | 需求分析 - 编码 - 测试层级管理管理者分配任务给执行者 | 项目经理 程序员讨论协商多个Agent讨论达成共识 | 辩论式决策竞争投票多个Agent生成方案投票选择 | 代码生成 评审Swarm去中心化Agent自组织协作 | 蚁群算法式任务分配三、CrewAI 实战CrewAI 是基于角色的多Agent框架适合复杂任务分解。安装pip install crewai crewai-tools基础示例内容创作团队from crewai import Agent, Task, Crew, Processfrom langchain_openai import ChatOpenAI定义大模型llm ChatOpenAI(modelgpt-4, temperature0.7)1. 定义Agent角色researcher Agent( role研究员, goal收集和分析最新的AI技术趋势, backstory你是一位资深技术研究员擅长追踪和分析前沿技术动态。, llmllm, verboseTrue)writer Agent( role技术写手, goal将研究成果转化为高质量的技术文章, backstory你是一位经验丰富的技术写手擅长将复杂技术概念通俗易懂地表达。, llmllm, verboseTrue)editor Agent( role编辑, goal审核文章质量确保内容准确、逻辑清晰, backstory你是一位严格的编辑关注文章结构、语法和事实准确性。, llmllm, verboseTrue)2. 定义任务research_task Task( description调研2025年AI Agent领域的最新发展趋势列出3个最重要的方向。, expected_output一份结构化的研究报告包含趋势分析和数据支持。, agentresearcher)writing_task Task( description根据研究员的报告撰写一篇2000字的技术文章。, expected_output一篇完整的Markdown格式文章包含标题、小标题和代码示例。, agentwriter)editing_task Task( description审核技术文章修正语法错误和逻辑问题给出修改建议。, expected_output修改后的文章和修改意见列表。, agenteditor)3. 组建Crew并执行crew Crew( agents[researcher, writer, editor], tasks[research_task, writing_task, editing_task], processProcess.sequential, # 顺序执行 verboseTrue)result crew.kickoff()print(result)进阶并行任务与层级管理from crewai import Crew, Process并行执行多个独立任务crew Crew( agents[researcher, writer, editor, designer], tasks[task1, task2, task3, task4], processProcess.parallel, # 并行执行 memoryTrue # 启用共享记忆)层级管理Manager 分配任务crew Crew( agents[researcher, writer, editor], tasks[task1, task2], processProcess.hierarchical, # 层级管理 manager_llmChatOpenAI(modelgpt-4), # 管理者使用更强的模型 function_calling_llmChatOpenAI(modelgpt-3.5-turbo))四、AutoGen 实战AutoGen 是微软开源的多Agent对话框架核心是Agent之间的消息传递。安装pip install pyautogen基础示例代码生成与调试from autogen import ConversableAgent, GroupChat, GroupChatManager配置LLMconfig_list [{ model: gpt-4, api_key: your-api-key}]创建Agentcoder ConversableAgent( namecoder, system_message你是一个Python程序员。编写简洁、高效的代码。, llm_config{config_list: config_list})tester ConversableAgent( nametester, system_message你是一个代码测试员。检查代码的正确性和边界情况。, llm_config{config_list: config_list})reviewer ConversableAgent( namereviewer, system_message你是一个代码审查员。关注代码风格、可读性和性能。, llm_config{config_list: config_list})群聊协作group_chat GroupChat( agents[coder, tester, reviewer], messages[], max_round10)manager GroupChatManager(groupchatgroup_chat, llm_config{config_list: config_list})启动对话coder.initiate_chat( manager, message请写一个Python函数实现快速排序算法。coder先写代码tester和reviewer随后审查。)自定义对话终止条件def custom_termination(message): return APPROVED in message.get(content, )使用自定义终止group_chat GroupChat( agents[coder, tester, reviewer], messages[], max_round10, speaker_selection_methodround_robin # 轮流发言)五、自研轻量多Agent框架如果不想依赖第三方框架可以用简单Python实现class MultiAgentSystem: def __init__(self): self.agents {} self.message_queue [] def register(self, name, agent, role): self.agents[name] {agent: agent, role: role, inbox: []} def send(self, from_agent, to_agent, message): 发送消息 self.agents[to_agent][inbox].append({ from: from_agent, content: message }) def broadcast(self, from_agent, message): 广播消息 for name in self.agents: if name ! from_agent: self.send(from_agent, name, message) def run(self, task, max_rounds10): 运行多Agent协作 # 初始化广播任务 self.broadcast(system, task) for round_num in range(max_rounds): for name, data in self.agents.items(): if data[inbox]: messages data[inbox] data[inbox] [] # Agent处理消息并回复 response data[agent].process(messages) print(f[{name}] {response}) # 根据角色决定回复对象 if data[role] worker: self.send(name, manager, response) elif data[role] manager: self.broadcast(name, response) return 协作完成使用system MultiAgentSystem()system.register(manager, manager_agent, manager)system.register(coder, coder_agent, worker)system.register(tester, tester_agent, worker)system.run(实现一个用户登录系统)六、多Agent设计最佳实践1. 角色定义清晰每个Agent应该有明确的职责边界避免角色重叠。# 角色模糊researcher Agent(role全能助手, ...)角色清晰researcher Agent(role数据分析师, goal分析数据趋势, ...)writer Agent(role报告撰写员, goal撰写分析报告, ...)2. 控制对话轮次多Agent对话容易无限循环必须设置终止条件。# 设置最大轮次group_chat GroupChat(agents..., max_round10)设置终止条件def should_stop(messages): return any(FINAL ANSWER in m[content] for m in messages)3. 成本管理多Agent意味着多倍的Token消耗使用较便宜的模型处理简单任务设置上下文长度限制启用缓存避免重复计算七、总结多Agent系统是解决复杂任务的强大范式。CrewAI适合角色明确的流水线任务AutoGen适合开放式对话协作。选择框架时要考虑任务特性、成本和可维护性。---下一篇将讨论Agent 的安全与伦理问题包括幻觉、提示注入等风险及防护策略。