多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(model="gpt-4", temperature=0.7)
1. 定义Agent角色
researcher = Agent( role="研究员", goal="收集和分析最新的AI技术趋势", backstory="你是一位资深技术研究员,擅长追踪和分析前沿技术动态。", llm=llm, verbose=True)
writer = Agent( role="技术写手", goal="将研究成果转化为高质量的技术文章", backstory="你是一位经验丰富的技术写手,擅长将复杂技术概念通俗易懂地表达。", llm=llm, verbose=True)
editor = Agent( role="编辑", goal="审核文章质量,确保内容准确、逻辑清晰", backstory="你是一位严格的编辑,关注文章结构、语法和事实准确性。", llm=llm, verbose=True)
2. 定义任务
research_task = Task( description="调研2025年AI Agent领域的最新发展趋势,列出3个最重要的方向。", expected_output="一份结构化的研究报告,包含趋势分析和数据支持。", agent=researcher)
writing_task = Task( description="根据研究员的报告,撰写一篇2000字的技术文章。", expected_output="一篇完整的Markdown格式文章,包含标题、小标题和代码示例。", agent=writer)
editing_task = Task( description="审核技术文章,修正语法错误和逻辑问题,给出修改建议。", expected_output="修改后的文章和修改意见列表。", agent=editor)
3. 组建Crew并执行
crew = Crew( agents=[researcher, writer, editor], tasks=[research_task, writing_task, editing_task], process=Process.sequential, # 顺序执行 verbose=True)
result = crew.kickoff()print(result)
进阶:并行任务与层级管理
from crewai import Crew, Process并行执行多个独立任务
crew = Crew( agents=[researcher, writer, editor, designer], tasks=[task1, task2, task3, task4], process=Process.parallel, # 并行执行 memory=True # 启用共享记忆)
层级管理:Manager 分配任务
crew = Crew( agents=[researcher, writer, editor], tasks=[task1, task2], process=Process.hierarchical, # 层级管理 manager_llm=ChatOpenAI(model="gpt-4"), # 管理者使用更强的模型 function_calling_llm=ChatOpenAI(model="gpt-3.5-turbo"))
四、AutoGen 实战
AutoGen 是微软开源的多Agent对话框架,核心是Agent之间的消息传递。
安装
pip install pyautogen基础示例:代码生成与调试
from autogen import ConversableAgent, GroupChat, GroupChatManager配置LLM
config_list = [{ "model": "gpt-4", "api_key": "your-api-key"}]
创建Agent
coder = ConversableAgent( name="coder", system_message="你是一个Python程序员。编写简洁、高效的代码。", llm_config={"config_list": config_list})
tester = ConversableAgent( name="tester", system_message="你是一个代码测试员。检查代码的正确性和边界情况。", llm_config={"config_list": config_list})
reviewer = ConversableAgent( name="reviewer", system_message="你是一个代码审查员。关注代码风格、可读性和性能。", llm_config={"config_list": config_list})
群聊协作
group_chat = GroupChat( agents=[coder, tester, reviewer], messages=[], max_round=10)
manager = GroupChatManager(groupchat=group_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_round=10, speaker_selection_method="round_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_rounds=10): """运行多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_round=10)设置终止条件
def should_stop(messages): return any("FINAL ANSWER" in m["content"] for m in messages)
3. 成本管理
多Agent意味着多倍的Token消耗:
- 使用较便宜的模型处理简单任务
- 设置上下文长度限制
- 启用缓存避免重复计算
七、总结
多Agent系统是解决复杂任务的强大范式。CrewAI适合角色明确的流水线任务,AutoGen适合开放式对话协作。选择框架时要考虑任务特性、成本和可维护性。
---
下一篇将讨论Agent 的安全与伦理问题,包括幻觉、提示注入等风险及防护策略。
