AutoGen 核心 Agent 聊天与对话模式

AutoGen 核心 Agent 聊天与对话模式 AutoGen 核心Agent 聊天与对话模式一、概念速查AgentChat 架构核心接口接口 / 类角色说明BaseAgentAgent 基类定义 name、messages、on_messages 等核心协议ChatAgent聊天 Agent扩展 BaseAgent支持 generate_reply 和 generate_streamAssistantAgent助手 Agent使用 LLM 生成回复可配置工具调用ToolAgent工具 Agent执行具体工具函数不依赖 LLMGroupChat群聊管理器维护多 Agent 对话历史的共享缓冲区GroupChatManager群聊调度器控制发言顺序和轮次终止条件判断Team运行容器驱动 Agent 执行和对话循环的统一入口BaseTool工具基类定义工具 schema、执行函数、错误处理代码示例最小双 Agent 对话fromautogen_agentchat.agentsimportAssistantAgentfromautogen_agentchat.teamsimportRoundRobinGroupChatfromautogen_agentchat.messagesimportTextMessagefromautogen_ext.models.openaiimportOpenAIChatCompletionClient modelOpenAIChatCompletionClient(modelgpt-4o-mini)plannerAssistantAgent(nameplanner,model_clientmodel,system_message你是一个项目规划师负责制定任务计划。回复要简洁、结构化。,)executorAssistantAgent(nameexecutor,model_clientmodel,system_message你是一个执行者根据计划逐步执行。每步完成后等待下一步指示。,)teamRoundRobinGroupChat([planner,executor])resultawaitteam.run(task写一篇 500 字的博客大纲)formessageinresult.messages:print(f{message.source}:{message.content}\n)消息类型fromautogen_agentchat.messagesimportTextMessage,ToolCallMessage,ToolResultMessage# 文本消息TextMessage(content你好,sourceuser)# 工具调用请求ToolCallMessage(content,sourceassistant,tool_calls[{id:1,function:{name:search,arguments:{q:AutoGen}}}],)# 工具调用结果ToolResultMessage(content搜索结果...,sourcetool,tool_call_id1,)二、底层原理AutoGen v2 的执行架构RoundRobinSelectorMagenticOneToolCallTextMessage否是Team.run(task)Team 驱动循环选择下一个 Agent轮流发言LLM 选择发言人Manager 统一调度Agent.on_messages()Agent 内部处理返回类型执行工具消息加入历史ToolResult 加入历史终止条件Team.run() 返回AutoGen v2 的核心架构围绕Team作为运行容器展开。Team 内部维护一个消息循环循环中调用 Agent 的on_messages方法Agent 返回消息后 Team 将其追加到对话历史然后判断终止条件。Agent 内部的消息处理流程当Agent.on_messages()被调用时将新消息追加到Agent._messages内部缓冲区调用 LLM 生成回复如果是 AssistantAgent如果 LLM 返回 tool call 请求暂停文本生成执行工具函数工具结果通过ToolResultMessage返回再次调用 LLM重复步骤 2-4 直到 LLM 的回复不包含工具调用返回最终消息这种LLM → 工具 → LLM的内循环对用户完全透明Team 层面看到的只是 Agent 最终输出的一条消息。RoundRobinGroupChat 调度逻辑classRoundRobinGroupChat(Team):def__next_speaker(self):idxself._current_turn%len(self._participants)self._current_turn1returnself._participants[idx]轮询调度是最简单的多 Agent 对话模式。它不考虑发言内容的相关性仅按固定顺序轮转。虽然简单但在结构化任务如规划→执行→审查三轮流水线中效果出奇好。SelectorGroupChat 的智能调度Selector 模式使用 LLM 来决定下一个发言人。调度 prompt 包含以下信息当前对话历史每个 Agent 的 name 和 system_message下一位发言者的选择标准“谁最适合处理当前上下文中的下一步”LLM 的选择结果被限制在参与者列表内无效选择会触发重试。这种模式的精度取决于 LLM 的推理能力GPT-4o-mini 级别的模型通常需要配合 fallback 轮询机制。终止条件的三种配置条件配置方式行为最大轮次max_turnsN达到 N 轮对话后强制终止终止消息Agent 回复中包含指定关键词识别到终止信号结束自定义函数termination_conditioncallable每次新消息后评估返回 True 即终止三、架构设计原则1. 消息即通信协议Agent 之间不直接调用方法只交换消息。这种设计让 Agent 实现完全解耦——你可以用任何语言实现 Agent只要它理解统一的 Message 协议。工具调用通过ToolCallMessage/ToolResultMessage对实现天然支持异步。2. 运行容器与 Agent 逻辑分离Team 负责调度、终止判断、消息路由Agent 只负责收到消息→生成响应。职责边界清晰。这种分离使你可以为同一组 Agent 切换不同的调度策略而无需修改 Agent 本身。3. 工具内循环对调度层透明Agent 内部可能调用多个工具工具内循环但调度层Team只看到 Agent 返回的一条消息。这降低了调度层的复杂度——无论 Agent 内部做了多少步推理和工具调用调度层只需等待最终结果。4. 流式优先所有 Agent 的回复都支持流式输出。generate_stream方法返回迭代器Team 在完整消息可用前就可以逐 token 转发。这对用户体验至关重要在需要长时间推理的场景中用户不需要等待全部推理完成就能看到中间输出。5. 可观测性内置Team 执行过程中产生的所有消息都保存在result.messages中。每条消息包含 source、content、type 和时间戳完整记录了 Agent 的思考链和工具调用。配合 LangFuse 或自定义回调可以构建完整的 Agent 审计日志。