ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AutoGen v0.4多智能体框架架构解析与生产实战

AutoGen v0.4多智能体框架架构解析与生产实战 AutoGen v0.4 多智能体框架架构解析与生产实战微软 AutoGen 在 2024 年底发布了 v0.4这是一次几乎重写的大版本升级——从对话式 Agent走向了事件驱动的异步多 Agent 运行时。本文从架构层面拆解 v0.4 的核心变化并给出生产环境的实战落地指南。一、AutoGen v0.2 到 v0.4架构的根本性重构1.1 v0.2 的架构局限AutoGen v0.2也就是很多教程里用的那个版本是对话式架构v0.2 模型 Agent A → 说话 → Agent B → 说话 → Agent A → ... 同步、顺序、对话驱动问题同步执行无法并发Agent 间通信只有发消息一种原语扩展性差难以分布式部署执行流程不可观测1.2 v0.4 的新架构v0.4 彻底换了底层模型引入了事件驱动运行时Event-driven Runtimev0.4 模型 AgentRuntime消息总线 ↑↓ publish/subscribe异步 Agent A Agent B Agent C 独立、并发、事件驱动核心变化异步优先所有消息发送都是异步的asyncioawaitTopic 发布订阅Agent 通过 Topic 订阅感兴趣的消息而不是直接通话分布式就绪Agent 可以在不同进程甚至不同机器上运行强类型消息消息是 Pydantic 模型有完整的类型定义二、核心概念解析2.1 AgentRuntimeRuntime 是整个系统的神经中枢——消息路由、Agent 生命周期管理、订阅关系管理都在这里。# v0.4 运行时初始化fromautogen_agentchat.agentsimportAssistantAgentfromautogen_agentchat.teamsimportRoundRobinGroupChatfromautogen_ext.models.anthropicimportAnthropicChatCompletionClient# 单进程运行时开发用fromautogen_coreimportSingleThreadedAgentRuntime runtimeSingleThreadedAgentRuntime()# 分布式运行时生产用# from autogen_ext.runtimes.grpc import GrpcWorkerAgentRuntime2.2 消息Messagev0.4 中消息是强类型的 Pydantic 模型fromdataclassesimportdataclassfromautogen_coreimportDefaultTopicIddataclassclassCodeReviewRequest:代码审查请求消息code:strlanguage:strreviewer_id:strdataclassclassCodeReviewResult:代码审查结果消息issues:list[str]score:intsuggestions:list[str]reviewer_id:str2.3 Agent 定义fromautogen_coreimportRoutedAgent,message_handler,DefaultTopicIdfromautogen_core.modelsimportChatCompletionClientclassCodeReviewAgent(RoutedAgent):代码审查智能体def__init__(self,model_client:ChatCompletionClient):super().__init__(代码审查专家)self._model_clientmodel_client self._system_prompt你是一位资深代码审查专家。 请对提交的代码进行专业审查重点关注 1. 代码质量和可维护性0-100分 2. 潜在的 Bug 或逻辑错误 3. 性能优化点 4. 安全漏洞 返回 JSON 格式的审查报告。message_handlerasyncdefhandle_review_request(self,message:CodeReviewRequest,ctx:MessageContext)-None:处理代码审查请求fromautogen_core.modelsimportUserMessage,SystemMessage responseawaitself._model_client.create(messages[SystemMessage(contentself._system_prompt),UserMessage(contentf请审查以下{message.language}代码\n\n\n{message.code}\n,sourceuser)])# 解析结果并发布importjsontry:result_datajson.loads(response.content)resultCodeReviewResult(issuesresult_data.get(issues,[]),scoreresult_data.get(score,50),suggestionsresult_data.get(suggestions,[]),reviewer_idself.id.type)exceptException:resultCodeReviewResult(issues[解析失败],score0,suggestions[],reviewer_idself.id.type)# 发布结果到 Topicawaitself.publish_message(result,topic_idDefaultTopicId(typereview_results))三、高层接口AgentChat推荐用于快速开发v0.4 提供了更友好的高层 APIautogen_agentchat封装了 Runtime 的复杂度3.1 基础多 Agent 协作importasynciofromautogen_agentchat.agentsimportAssistantAgentfromautogen_agentchat.teamsimportRoundRobinGroupChat,SelectorGroupChatfromautogen_agentchat.conditionsimportTextMentionTerminationfromautogen_ext.models.anthropicimportAnthropicChatCompletionClientfromautogen_ext.models.openaiimportOpenAIChatCompletionClient# 初始化模型客户端claudeAnthropicChatCompletionClient(modelclaude-3-5-sonnet-20241022)gpt4oOpenAIChatCompletionClient(modelgpt-4o)# 定义各专职 Agentproduct_managerAssistantAgent(nameProductManager,model_clientclaude,system_message你是一位产品经理。 负责澄清需求、定义验收标准、评估工期合理性。 每次发言聚焦在产品层面不要写代码。 当你认为需求已经明确、可以进入开发时说需求确认开始开发。)developerAssistantAgent(nameDeveloper,model_clientgpt4o,system_message你是一位高级软件工程师。 负责技术方案设计、代码实现、技术文档编写。 收到开发任务后输出完整可运行的代码实现。 实现完成后说开发完成请 QA 测试。)qa_engineerAssistantAgent(nameQAEngineer,model_clientclaude,system_message你是一位 QA 工程师。 负责测试用例设计、发现 Bug、验证功能。 收到代码后编写测试用例并分析潜在问题。 如果质量达标说测试通过APPROVED。)# 轮询式协作按顺序轮流发言terminationTextMentionTermination(APPROVED)teamRoundRobinGroupChat(participants[product_manager,developer,qa_engineer],termination_conditiontermination,max_turns15# 防止无限循环)asyncdefrun_development_team(task:str):运行开发团队协作resultawaitteam.run(tasktask)returnresult# 运行task 开发一个 Python 函数 parse_log_file(log_path: str) - dict - 解析 Nginx access.log 文件 - 统计总请求数、各状态码数量、Top10 访问 IP、Top10 访问路径 - 返回结构化的字典 - 需要处理文件不存在、权限不足等异常 asyncio.run(run_development_team(task))3.2 SelectorGroupChatLLM 动态决定发言顺序fromautogen_agentchat.teamsimportSelectorGroupChat# 更灵活的协作方式让 LLM 决定谁来发言teamSelectorGroupChat(participants[product_manager,developer,qa_engineer],model_clientclaude,# 用这个 LLM 来选择下一个发言者selector_prompt你是一位项目经理负责协调团队工作。 根据当前对话进展选择最合适的下一个发言者。 - 需求不清楚时选 ProductManager - 需要技术实现时选 Developer - 代码写好需要测试时选 QAEngineer 返回角色名称ProductManager/Developer/QAEngineer,termination_conditiontermination)3.3 带工具的 Agentfromautogen_agentchat.agentsimportAssistantAgentfromautogen_core.toolsimportFunctionTool# 定义工具函数asyncdefsearch_documentation(query:str,framework:strfastapi)-str:搜索官方文档importhttpx# 实际实现中调用 Tavily 或其他搜索 APIasyncwithhttpx.AsyncClient()asclient:responseawaitclient.get(https://api.tavily.com/search,params{q:f{framework}{query},max_results:3},headers{Authorization:fBearer{TAVILY_API_KEY}})resultsresponse.json()return\n.join([r[content]forrinresults[results]])asyncdefrun_python_code(code:str)-str:在沙箱中运行 Python 代码importsubprocess,tempfilewithtempfile.NamedTemporaryFile(suffix.py,modew,deleteFalse)asf:f.write(code)f.flush()resultsubprocess.run([python,f.name],capture_outputTrue,textTrue,timeout30)returnfstdout:{result.stdout}\nstderr:{result.stderr}# 创建带工具的 Agentdeveloper_with_toolsAssistantAgent(nameDeveloper,model_clientgpt4o,tools[FunctionTool(search_documentation,description搜索技术文档),FunctionTool(run_python_code,description执行 Python 代码验证),],system_message你是一位能搜索文档和运行代码的高级工程师。)四、流式输出与实时反馈v0.4 支持流式输出适合 Web 应用fromautogen_agentchat.baseimportTaskResultasyncdefstream_team_response(task:str):流式获取团队协作过程asyncformessageinteam.run_stream(tasktask):ifhasattr(message,content):# 实际发言内容print(f[{message.source}]:{message.content})elifisinstance(message,TaskResult):# 任务完成print(f\n任务完成共{len(message.messages)}条消息)breakWebSocket 推送示例FastAPIfromfastapiimportWebSocketimportasyncioapp.websocket(/ws/collaborate)asyncdefwebsocket_collaborate(websocket:WebSocket,task:str):awaitwebsocket.accept()asyncformessageinteam.run_stream(tasktask):ifhasattr(message,content)andhasattr(message,source):awaitwebsocket.send_json({agent:message.source,content:message.content,timestamp:asyncio.get_event_loop().time()})elifisinstance(message,TaskResult):awaitwebsocket.send_json({status:completed})breakawaitwebsocket.close()五、生产部署注意事项5.1 多模型混搭策略# 不同职责用不同模型控制成本cheap_modelOpenAIChatCompletionClient(modelgpt-4o-mini)smart_modelAnthropicChatCompletionClient(modelclaude-3-5-sonnet-20241022)# 路由、分类等简单任务 → cheap_model# 复杂推理、代码生成 → smart_modeltriage_agentAssistantAgent(Triage,model_clientcheap_model)core_agentAssistantAgent(CoreDeveloper,model_clientsmart_model)5.2 错误处理与超时importasyncioasyncdefsafe_team_run(team,task:str,timeout:int300):带超时和错误处理的团队运行try:resultawaitasyncio.wait_for(team.run(tasktask),timeouttimeout)return{status:success,result:result}exceptasyncio.TimeoutError:return{status:timeout,error:f任务超时{timeout}s}exceptExceptionase:return{status:error,error:str(e)}5.3 对话历史管理长时间运行的 Agent 对话历史会无限增长需要主动管理# 重置团队状态awaitteam.reset()# 或者限制历史长度通过自定义 Agent 实现classHistoryLimitedAgent(AssistantAgent):def__init__(self,*args,max_history:int20,**kwargs):super().__init__(*args,**kwargs)self._max_historymax_historyasyncdefon_messages(self,messages,cancellation_token):# 只保留最近 max_history 条消息iflen(messages)self._max_history:messagesmessages[-self._max_history:]returnawaitsuper().on_messages(messages,cancellation_token)六、v0.4 核心变化总结特性v0.2v0.4执行模型同步对话异步事件驱动Agent 通信直接发消息发布/订阅 Topic分布式支持无原生支持gRPC类型安全弱字符串消息强Pydantic 消息高层 APIConversableAgentAssistantAgent Teams流式输出不支持支持观测性弱内置事件追踪七、避坑总结v0.2 代码不能直接迁移到 v0.4API 几乎完全重写需要重新学习异步陷阱所有操作都是 async同步环境中要用asyncio.run()消息类型一致同一 Topic 上发布的消息类型要一致max_turns 必须设置否则 Agent 可能无限对话下去生产环境换 PostgreSQL Checkpointer内存存储重启后状态丢失参考文献Microsoft AutoGen Documentation v0.4. https://microsoft.github.io/autogen/stable/AutoGen GitHub Repository. https://github.com/microsoft/autogenWu Q, et al. “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation.” arXiv, 2023. https://arxiv.org/abs/2308.08155Microsoft Research Blog. “AutoGen v0.4: A New Foundation for Multi-Agent AI.” 2024.AutoGen AgentChat API Reference. https://microsoft.github.io/autogen/stable/reference/agentchat/
返回列表