当前位置: 首页 > news >正文

多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 的安全与伦理问题,包括幻觉、提示注入等风险及防护策略。
http://www.jsqmd.com/news/1100749/

相关文章:

  • GoldHEN Cheats Manager技术评测:重新定义PS4游戏修改体验的开源解决方案
  • POD卖家实测:一张马克杯商品图,3秒提取高清印花(附完整操作)
  • iPhone拍视频也能做NeRF?手把手教你用COLMAP和LLFF脚本搞定数据集制作
  • 从按键消抖到中断响应:用STM32CubeMx和HAL库实现一个稳定可靠的按键检测模块
  • ComfyUI-KJNodes:让AI图像生成工作流像搭积木一样简单
  • 终极PS4游戏修改指南:GoldHEN Cheats Manager完全免费使用教程
  • KS-Downloader:轻松获取快手无水印视频与图片的智能工具
  • openbmc新手编译_网页生成_修改代码
  • 别再让LLM乱输出了!用LM-Format-Enforcer+Llama.cpp精准控制JSON格式(附完整代码)
  • 基于FFmpeg与Python的自动化音视频处理技术实践
  • AI重构全栈开发:基于Codex与Spec Coding的实战指南
  • XSS绕过核心技术:从基础过滤到WAF对抗的实战指南
  • 深入解析Iframe钓鱼攻击:原理、防御与实战安全编码
  • 嵌入式图像转换终极指南:LCD Image Converter核心引擎深度解析
  • R语言ggrcs包3.5版保姆级教程:从Cox回归到逻辑回归,一张图搞定非线性关系与阈值效应
  • 告别真机调试!用unidbg在Windows/Mac上模拟执行Android so文件(保姆级教程)
  • 别再只会用H5跳转了!Android Scheme协议从配置到实战避坑全解析
  • 文件加密软件有哪些?强烈推荐六个文件加密软件,建议码住试试
  • GoldHEN Cheats Manager:PS4游戏修改的终极解决方案
  • Sails.js性能测试实战:Artillery与k6工具选型及瓶颈定位
  • Python的__get__描述符的__set_name__参数的用途
  • 多模态AI如何革新GUI自动化测试:从原理到实践
  • 用西门子S7-200 PLC给立体仓库做个‘大脑’:从硬件选型到梯形图编程全流程拆解
  • LLM 是如何学会调用外部工具的?
  • 【Claude Code】----Claude Code 全套高效开发实战技巧|16个实战高效技巧,程序员必看AI编程提效干货
  • 学习C语言的第十三天06.29
  • 怎么给电脑加密?分享这6款热门电脑加密软件,公认好用
  • 别再只用sleep了!C语言里usleep和nanosleep的实战用法与毫秒级休眠封装
  • 无需专业CAD,轻量化CAD看图绘图工具就够了
  • 保姆级教程:用Cache模拟器手把手理解多核CPU的数据一致性(附避坑指南)