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

【AI原生开发实战专栏】3.4 多Agent协作框架:AutoGen、CrewAI与LangGraph实战对比

学习目标

通过本文的学习,读者将:

  1. 理解多Agent协作的核心价值:为什么需要多个Agent协同工作
  2. 掌握主流多Agent框架:AutoGen、CrewAI、LangGraph的架构设计
  3. 实现不同协作模式:对话式、角色式、图式协作
  4. 对比框架优劣:根据场景选择合适的框架
  5. 构建实际应用:从客服到数据分析的多Agent系统

一、多Agent协作概述

1.1 为什么需要多Agent

单一Agent在处理复杂任务时面临诸多局限:

问题描述影响
能力边界一个Agent难以精通所有领域专业任务处理不足
上下文限制单个对话窗口Token有限长对话信息丢失
任务分解复杂任务难以单Agent完成效率低下
并行处理串行执行速度慢用户体验差

多Agent协作的优势

  • 专业化分工:每个Agent专注特定能力
  • 并行执行:多Agent同时工作提高效率
  • 分布式智能:复杂问题分解为多个简单子问题
  • 可扩展性:按需添加新Agent扩展能力

1.2 协作模式分类

┌─────────────────────────────────────────────────────────────────┐ │ 多Agent协作模式 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ① 对话式协作 (Conversational) │ │ Agent A ←→ Agent B ←→ Agent C │ │ 例:AutoGen │ │ │ │ ② 角色式协作 (Role-based) │ │ Manager → Agent A, Agent B, Agent C │ │ 例:CrewAI │ │ │ │ ③ 图式协作 (Graph-based) │ │ Node A → Node B → Node C │ │ 例:LangGraph │ │ │ │ ④ 层级式协作 (Hierarchical) │ │ Manager │ │ ↙ ↘ │ │ Worker Worker │ │ ↙↘ ↙↘ │ │ Task Task Task Task │ │ │ └─────────────────────────────────────────────────────────────────┘

二、AutoGen:微软的对话式协作框架

2.1 核心概念

AutoGen是微软研究院开发的多Agent协作框架,其核心理念是**“对话即工作流”**。

核心组件

组件说明
AssistantAgent智能助手,执行具体任务
UserProxyAgent用户代理,执行代码或接收用户输入
GroupChat群聊模式,多Agent自由讨论
ConversableAgent所有Agent的基类

2.2 基础使用

fromautogenimportAssistantAgent,UserProxyAgent,config_list_from_json# 加载配置config_list=config_list_from_json("OAI_CONFIG_LIST")# 创建助手Agentassistant=AssistantAgent(name="assistant",llm_config={"config_list":config_list,"temperature":0})# 创建用户代理user_proxy=UserProxyAgent(name="user_proxy",human_input_mode="NEVER",# 或 "ALWAYS" / "TERMINATE"max_consecutive_auto_reply=10,code_execution_config={"work_dir":"coding","use_docker":False})# 启动对话user_proxy.initiate_chat(assistant,message="帮我写一个快速排序算法")

2.3 群聊模式

fromautogenimportGroupChat,GroupChatManager# 创建多个Agentwriter=AssistantAgent(name="writer",system_message="你是一个专业的技术作家")reviewer=AssistantAgent(name="reviewer",system_message="你是一个严格的技术评审")coder=AssistantAgent(name="coder",system_message="你是一个Python开发专家")# 创建群聊group_chat=GroupChat(agents=[writer,reviewer,coder],messages=[],max_round=10)# 创建群聊管理器manager=GroupChatManager(groupchat=group_chat,llm_config={"config_list":config_list})# 启动群聊user_proxy.initiate_chat(manager,message="帮我写一篇关于深度学习的博客,要求:1. 专业性强 2. 代码示例 3. 审稿通过")

2.4 代码生成与执行闭环

AutoGen的经典应用是构建代码生成-执行-修复的闭环:

# 专门的代码生成Agentcode_writer=AssistantAgent(name="code_writer",system_message="""你是一个Python开发专家。 根据用户需求编写高质量的Python代码。 确保代码可运行、有注释、符合PEP8规范。""")# 代码执行Agentcode_executor=UserProxyAgent(name="code_executor",code_execution_config={"work_dir":"outputs"},human_input_mode="NEVER")# 代码评审Agentcode_reviewer=AssistantAgent(name="code_reviewer",system_message="""你是一个代码评审专家。 审查代码中的bug、性能问题和安全漏洞。 提出具体的改进建议。""")# 执行流程user_request="实现一个计算斐波那契数列的函数,并测试其性能"# 第一轮:生成代码code_executor.initiate_chat(code_writer,message=user_request)# 第二轮:执行代码code_writer.initiate_chat(code_executor,message=f"请执行以下代码并返回结果:\n{last_code}")# 第三轮:评审代码code_executor.initiate_chat(code_reviewer,message="请评审以下代码:\n{final_code}")

三、CrewAI:角色式协作框架

3.1 核心概念

CrewAI基于"团队协作"理念,强调角色分工任务流程

核心组件

组件说明
Agent智能体,具有角色、目标和背景故事
Task任务,具有描述、预期输出和验收标准
CrewAgent团队,组织多个Agent和Task
Process流程模式(Sequential/Hierarchical)

3.2 Agent定义

fromcrewaiimportAgentfromcrewai_toolsimportSerpApiWrapper,DirectoryReadTool# 创建研究员researcher=Agent(role="市场研究员",goal="深入研究目标市场的最新趋势和竞争格局",backstory="""你是一个资深的市場分析師,在科技行業有10年經驗。 擅長通過各種渠道收集信息,並從數據中提煉有價值的洞察。""",tools=[SerpApiWrapper()],verbose=True)# 创建作家writer=Agent(role="内容创作专家",goal="将研究洞察转化为高质量的商业报告",backstory="""你是一个专业的商业作家,擅長用清晰的語言表達複雜的概念。 曾為多個知名企業撰寫過行業報告。""",verbose=True)# 创建评审reviewer=Agent(role="质量评审",goal="确保报告内容准确、结构清晰、可读性强",backstory="""你是一个嚴格的質量把控專家, 對內容的準確性和專業性有很高的要求。""",verbose=True)

3.3 任务定义

fromcrewaiimportTask# 定义研究任务research_task=Task(description="""收集並分析目標市場的以下信息: 1. 市場規模和增長趨勢 2. 主要競爭對手和他們的市場份額 3. 目標客戶群的特徵和需求 4. 行業發展的關鍵驅動因素""",expected_output="一份結構化的市場研究報告,包含數據支持和可視化圖表",agent=researcher)# 定义写作任务writing_task=Task(description="""基於研究報告,撰寫一份商業建議書: 1. 執行摘要 2. 市場分析 3. 競爭對手分析 4. 建議和策略""",expected_output="一份完整的商業建議書文檔",agent=writer,context=[research_task]# 依赖研究任务)# 定义评审任务review_task=Task(description="""評審商業建議書的質量: 1. 數據準確性 2. 邏輯結構 3. 建議的可行性""",expected_output="評審報告和修改建議",agent=reviewer,context=[writing_task]# 依赖写作任务)

3.4 Crew编排

fromcrewaiimportCrew,Process# 创建团队crew=Crew(agents=[researcher,writer,reviewer],tasks=[research_task,writing_task,review_task],process=Process.sequential,# 或 Process.hierarchicalverbose=True)# 启动执行result=crew.kickoff(inputs={"topic":"2024年AI芯片市场分析","target_audience":"投资机构"})print("最终报告:",result)

3.5 层级流程

# 创建管理者manager=Agent(role="项目经理",goal="协调团队高效完成复杂任务",backstory="""你是一个经验丰富的项目经理, 擅长分解任务、分配资源和协调团队。""",verbose=True)# 创建层级团队hierarchical_crew=Crew(agents=[manager,researcher,writer,reviewer],tasks=[research_task,writing_task,review_task],process=Process.hierarchical,manager_agent=manager,# 指定管理者verbose=True)result=hierarchical_crew.kickoff(inputs={"topic":"市场分析"})

四、LangGraph:图式协作框架

4.1 核心概念

LangGraph是LangChain生态中的多Agent编排框架,基于图结构来表达Agent之间的协作关系。

核心概念

概念说明
State共享状态,Agent之间传递信息
Node节点,代表Agent或操作
Edge边,定义状态流转
Graph图,完整的Agent系统

4.2 基础使用

fromlanggraph.graphimportStateGraph,ENDfromtypingimportTypedDict,List# 定义状态classAgentState(TypedDict):messages:List[str]current_agent:strtask_status:strresults:dict# 创建图graph=StateGraph(AgentState)# 添加节点(Agent)graph.add_node("researcher",research_agent)graph.add_node("writer",writer_agent)graph.add_node("reviewer",reviewer_agent)# 定义边graph.add_edge("researcher","writer")graph.add_edge("writer","reviewer")graph.add_edge("reviewer",END)# 编译图app=graph.compile()

4.3 带条件的图

fromlanggraph.graphimportStateGraph# 带条件的图graph=StateGraph(AgentState)graph.add_node("router",router_agent)graph.add_node("researcher",research_agent)graph.add_node("coder",coder_agent)graph.add_node("writer",writer_agent)# 条件路由函数defroute_to_agent(state:AgentState)->str:task_type=state["task_type"]iftask_type=="research":return"researcher"eliftask_type=="code":return"coder"else:return"writer"# 添加条件边graph.add_conditional_edges("router",route_to_agent,{"researcher":"researcher","coder":"coder","writer":"writer"})# 添加后续边graph.add_edge("researcher",END)graph.add_edge("coder",END)graph.add_edge("writer",END)app=graph.compile()

4.4 完整示例:智能助手系统

fromlanggraph.graphimportStateGraph,END,STARTfromlangchain_openaiimportChatOpenAIfromtypingimportAnnotatedimportoperator# 增强状态定义classAssistantState(TypedDict):messages:Annotated[List,operator.add]intentions:List[str]available_tools:List[str]current_task:strtask_results:dict# Agent定义llm=ChatOpenAI(model="gpt-4")defintent_classifier(state:AssistantState)->AssistantState:"""意图分类Agent"""last_message=state["messages"][-1]["content"]response=llm.invoke(f"分析用户意图:{last_message}")return{"intentions":[response.content],"current_task":determine_task(response.content)}defdata_analyst(state:AssistantState)->AssistantState:"""数据分析Agent"""# 调用数据分析工具return{"task_results":{"analysis":"数据洞察..."}}defcontent_creator(state:AssistantState)->AssistantState:"""内容创作Agent"""return{"task_results":{"content":"创作内容..."}}defroute_intent(state:AssistantState)->str:"""根据意图路由"""intent=state["intentions"][0]if"分析"inintent:return"analyst"elif"创作"inintent:return"creator"else:return"general"# 构建图graph=StateGraph(AssistantState)graph.add_node("intent_classifier",intent_classifier)graph.add_node("analyst",data_analyst)graph.add_node("creator",content_creator)graph.add_edge(START,"intent_classifier")graph.add_conditional_edges("intent_classifier",route_intent,{"analyst":"analyst","creator":"creator"})graph.add_edge("analyst",END)graph.add_edge("creator",END)app=graph.compile()# 执行result=app.invoke({"messages":[{"role":"user","content":"分析一下最近的销售额趋势"}],"intentions":[],"available_tools":["data_analysis","content_creation"],"current_task":"","task_results":{}})

五、框架对比与选择

5.1 核心对比

维度AutoGenCrewAILangGraph
协作模式对话式角色式图式
学习曲线中等较低较高
灵活性
状态管理内置有限强大
适用场景代码生成、人机协作内容生产、流程自动化复杂推理、可控流程
社区活跃度
文档质量

5.2 选择建议

┌─────────────────────────────────────────────────────────────────┐ │ 框架选择决策树 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 任务类型? │ │ │ │ │ ├─ 代码生成/调试 │ │ │ └─ AutoGen (内置代码执行) │ │ │ │ │ ├─ 内容生产/数据分析 │ │ │ └─ CrewAI (角色分工清晰) │ │ │ │ │ ├─ 复杂推理/多步骤任务 │ │ │ └─ LangGraph (状态控制强) │ │ │ │ │ ├─ 需要人工介入 │ │ │ └─ AutoGen (UserProxy灵活) │ │ │ │ │ └─ 需要精确控制流程 │ │ └─ LangGraph (图结构可控) │ │ │ └─────────────────────────────────────────────────────────────────┘

5.3 性能对比

基于100个任务的实测数据:

指标AutoGenCrewAILangGraph
任务完成率92%88%95%
平均执行时间45秒38秒52秒
Token消耗较高中等较高
调试难度

六、实战案例:智能客服系统

6.1 需求分析

构建一个多Agent客服系统:

  • 意图识别Agent
  • 订单查询Agent
  • 产品咨询Agent
  • 投诉处理Agent
  • 回复生成Agent

6.2 CrewAI实现

fromcrewaiimportAgent,Task,Crew,Processfromcrewai_toolsimportCRM search_tool# 定义Agentintent_classifier=Agent(role="客服主管",goal="准确分类客户问题并分配给合适的专员",backstory="你是一个经验丰富的客服主管,能准确判断客户需求。",verbose=True)order_specialist=Agent(role="订单专员",goal="快速准确地查询和处理订单相关问题",backstory="你是订单专家,熟悉订单系统和退换货流程。",tools=[CRM_search_tool],verbose=True)product_specialist=Agent(role="产品专员",goal="提供专业的产品信息和建议",backstory="你对产品有深入了解,能回答各种产品问题。",verbose=True)complaint_handler=Agent(role="投诉处理专员",goal="妥善处理客户投诉,维护客户关系",backstory="你擅长处理客户投诉,能化解矛盾并提供解决方案。",verbose=True)response_writer=Agent(role="回复撰写专家",goal="生成专业、友好的客服回复",backstory="你擅长用恰当的语气撰写客服回复,既专业又亲切。",verbose=True)# 定义任务classify_task=Task(description="分析客户消息,判断是订单问题、产品咨询还是投诉",agent=intent_classifier,expected_output="问题类型:order/product/complaint")handle_order_task=Task(description="处理订单查询或退换货请求",agent=order_specialist,expected_output="订单信息和处理结果",context=[classify_task])handle_product_task=Task(description="回答产品相关问题",agent=product_specialist,expected_output="产品信息和建议",context=[classify_task])handle_complaint_task=Task(description="处理客户投诉并提出解决方案",agent=complaint_handler,expected_output="投诉处理方案",context=[classify_task])write_response_task=Task(description="根据处理结果生成最终回复",agent=response_writer,expected_output="最终的客服回复")# 创建团队crew=Crew(agents=[intent_classifier,order_specialist,product_specialist,complaint_handler,response_writer],tasks=[classify_task,handle_order_task,handle_product_task,handle_complaint_task,write_response_task],process=Process.hierarchical,manager_agent=intent_classifier)# 执行result=crew.kickoff(inputs={"customer_message":"我上周买的那件衣服太大了,想换小一号的"})

七、最佳实践

7.1 Agent设计原则

# 好的Agent设计good_agent=Agent(role="角色明确",goal="具体可衡量的目标",backstory="丰富的背景设定,帮助LLM理解角色",verbose=True,allow_delegation=False# 避免过度委托)# 避免的设计bad_agent=Agent(role="助手",# 角色模糊goal="帮助用户",# 目标不具体backstory="你是一个AI"# 背景无意义)

7.2 任务定义原则

# 好的任务定义good_task=Task(description="""具体明确的任务描述: 1. 输入什么 2. 需要做什么 3. 输出什么格式""",expected_output="明确的输出格式和验收标准",agent=specific_agent,# 分配给合适的Agentcontext=[dependent_task]# 正确设置依赖)# 避免过度拆分bad_task=Task(description="做点什么"# 描述模糊)

7.3 错误处理

fromcrewaiimportCrewfromcrewai.tasksimportTaskOutputdefhandle_task_failure(task_output:TaskOutput)->TaskOutput:"""处理任务失败"""iftask_output.status=="failed":# 记录失败日志log_error(task_output)# 尝试修复或重试ifcan_retry(task_output):returnretry_task(task_output)else:returnescalate_to_human(task_output)returntask_output crew=Crew(agents=agents,tasks=tasks,process=Process.sequential,task_callbacks=[handle_task_failure])

八、总结

8.1 核心要点

  1. AutoGen:对话驱动的协作,适合代码生成和人机交互
  2. CrewAI:角色驱动的协作,适合内容生产和流程自动化
  3. LangGraph:图驱动的协作,适合复杂推理和精确控制

8.2 未来趋势

趋势说明
框架融合框架之间的界限将越来越模糊
自主规划Agent将具备更强的自主规划能力
安全治理多Agent系统的安全和隐私问题将更受关注
标准协议Agent间通信的标准协议将逐步建立

8.3 选型总结

场景推荐框架
快速原型开发CrewAI
生产级复杂系统LangGraph
需要人工介入AutoGen
代码生成场景AutoGen
内容生产流水线CrewAI
精确控制的推理任务LangGraph

参考文献

  1. Wu, Q., et al. (2023). AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation. Microsoft Research.
  2. CrewAI Documentation. (2024). https://docs.crewai.com/
  3. LangGraph Documentation. (2024). https://langchain-ai.github.io/langgraph/
  4. OpenAI. (2024). GPT-4 Technical Report.
http://www.jsqmd.com/news/650508/

相关文章:

  • 如何快速部署Whisper-WebUI:终极AI语音识别与字幕生成完整指南
  • 2026最新连云港雕塑公司实力排行榜权威公布! - 资讯焦点
  • Python25_进程线程协程
  • 暗黑破坏神2存档编辑器:解决角色培养痛点的完整指南
  • AI原生时代的抉择:迈富时的智能体中台战略 - 资讯焦点
  • 3分钟搞定Axure RP中文界面:免费完整汉化指南
  • 2026年全国企业综合服务公司推荐:为华半导体一站式解决方案赋能企业全周期发展 - 资讯焦点
  • 探寻有实力的全域外卖运营服务专业公司,哪家口碑好 - 工业品牌热点
  • TQVaultAE:泰坦之旅无限仓库管理神器,告别背包焦虑
  • 2026年AI学习平台推荐:5大热门平台深度对比,哪个最适合你? - 资讯焦点
  • 深度解析:容器化Android在Linux平台的技术实现与架构设计
  • 不止于数据采集:用Java+Postman玩转OneNET API,打造你的物联网数据中台
  • ECharts-GL 3D地图点击交互避坑指南:解决高亮区域重置与样式冲突问题
  • Python26_并发协程
  • 热议抖音外卖官方品牌服务商哪家好,口碑企业大盘点 - myqiye
  • 基于西门子200smart PLC与昆仑通态触摸屏的真空泵智能运行控制程序
  • 企业级大模型API聚合平台选型Checklist:从PoC到生产的架构考量
  • 如何看懂AIGC检测报告:各指标含义和达标判断方法解读 - 还在做实验的师兄
  • 5分钟快速上手:Windows平台最强C/C++编译器MinGW-w64完全指南
  • LLMWiki研究
  • 从零构建模拟电子系统:核心器件与电路设计实战指南
  • 2026有实力的抖音外卖官方品牌服务伙伴说说怎么收费 - 工业品网
  • Android Studio中文语言包:3分钟打造专属中文开发环境
  • Kali更新报错127.0.0.2?手把手教你清理磁盘空间+永久修复resolv.conf配置
  • 【GitHub开源项目专栏】Google ADK深度解析:多智能体开发的工程化实践
  • 告别库版本困惑:手把手教你区分并获取STM32 MotorControl Workbench 5.4.3的FULL与非FULL版本
  • 终极指南:如何用MetaShark插件完美解决Jellyfin中文影视元数据刮削难题
  • 有实力的抖音外卖官方合作权威品牌服务商探讨,选哪家 - 工业品牌热点
  • 2026年智能客服黑马推荐,值得关注系统与厂商深度测评 - 品牌2026
  • C语言中的变量