大模型应用
使用 Microsoft AutoGen 构建多智能体…
在需要用 Python 和 Microsoft AutoGen 搭建多代理协作、工具调用、代码执行与容错编排时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
使用 Microsoft AutoGen特定
解决思路
- 安装 AutoGen:执行 `pip install autogen-agentchat autogen-ext`,并从 `autogen_agentchat.agents`、`autogen_agentchat.teams`、`autogen_ext.models.openai` 导入 `AssistantAgent`、`RoundRobinGroupChat`、`OpenAIChatCompletionClient`。
- 配置模型客户端:从 `os.environ.get("OPENAI_API_KEY")` 读取密钥,创建 `OpenAIChatCompletionClient(model="gpt-4o", api_key=os.environ.get("OPENAI_API_KEY"))`。
- 遵循关键原则:写简洁、技术性回答,并提供准确的 Python 示例。
- 代理通信使用 `async/await` 模式。
- 实现完善的错误处理与日志记录。
- 遵循事件驱动架构模式。
- 所有函数签名都使用类型提示。
- 了解并使用 AutoGen 代理类型:`AssistantAgent` 用于对话和任务完成;`UserProxyAgent` 代表人类用户并可执行代码;`GroupChat` 用于编排多代理对话;`ConversableAgent` 作为自定义代理的基类。
- 创建基础 `AssistantAgent`:设置 `name`、`model_client`、`system_message`,系统消息要求提供清晰简洁回答并在需要时追问澄清。
- 定义工具函数并写清 docstring:例如 `search_database(query: str) -> str` 用于搜索数据库;`calculate(expression: str) -> str` 用 `eval(expression)` 计算表达式并用 `try/except` 捕获异常返回错误。
- 用 `FunctionTool` 包装工具:如 `FunctionTool(search_database, description="Search the database")`、`FunctionTool(calculate, description="Perform calculations")`。
- 创建带工具的代理:把包装后的 `tools=[search_tool, calc_tool]` 传给 `AssistantAgent`,并在 `system_message` 中说明代理可访问搜索和计算工具。
- 创建两代理聊天:分别创建 `researcher` 和 `writer` 两个 `AssistantAgent`,并配置各自专注的 `system_message`。
- 设置终止条件:使用 `TextMentionTermination("TASK_COMPLETE")`。
- 创建轮询群聊:使用 `RoundRobinGroupChat([researcher, writer], termination_condition=termination)`。
- 运行两代理对话:用异步函数执行 `await team.run(task="Research and document Python best practices")` 并返回结果。
- 创建多代理群聊:为 `planner`、`coder`、`reviewer` 等创建专门 `AssistantAgent`,分别负责拆解计划、写代码、审查代码。
- 使用选择器群聊:创建 `SelectorGroupChat([planner, coder, reviewer], model_client=model_client, termination_condition=MaxMessageTermination(20))`。
- 设置本地代码执行:使用 `LocalCommandLineCodeExecutor(work_dir="./workspace", timeout=60)`。
- 创建可执行代码的代理:把 `code_executor=code_executor` 传给 `AssistantAgent`,并在 `system_message` 中要求写代码解决问题、测试代码后再给最终答案。
- 使用 Docker 安全执行代码:使用 `DockerCommandLineCodeExecutor(image="python:3.11-slim", timeout=120, work_dir="./workspace")`。
- 实现顺序工作流:创建 `analyst`、`developer`、`tester` 代理,并通过 `handoffs=["developer"]`、`handoffs=["tester"]` 将任务交接给下一代理。
- 创建基于交接的工作流:使用 `Swarm([analyst, developer, tester])`。
- 实现层级结构:创建 `manager` 代理负责协调团队成员、委派任务、汇总结果;同时创建 `researcher`、`analyst`、`writer` 等 worker 代理。
- 利用对话记忆:代理会自动维护对话历史;直接用 `await team.run(task="Follow-up question")` 继续带上下文的追问;遍历 `result.messages` 打印 `message.source` 和 `message.content` 查看历史。
- 实现自定义事件处理:从 `autogen_core` 导入 `Event`,订阅事件如 `async def on_message_received(event: Event)`,用于代理激活、工具执行、错误处理和状态变化。
- 添加错误处理:配置 `logging.basicConfig(level=logging.INFO)` 并创建 logger。
- 编写带重试的安全运行函数:实现 `safe_run_team(team, task: str, max_retries: int = 3)`,循环中用 `await team.run(task=task)` 运行,捕获异常并记录;最后一次重试失败时抛出,否则返回 `None`。
- 代理设计最佳实践:给代理清晰、聚焦的职责;使用描述性 `system_message`;实现完善的工具描述;设置合适的终止条件;对复杂工作流使用 handoffs。
- 性能最佳实践:并发操作使用异步模式;对重复查询实现缓存;设置合理超时;监控 token 使用;为每个代理选择合适的模型大小。
- 安全最佳实践:绝不直接执行不可信代码;使用 Docker 执行代码;验证工具输入;实现速率限制;记录所有代理动作。
- 测试最佳实践:对单个代理做单元测试;对多代理工作流做集成测试;测试终止条件;验证工具执行;监控对话质量。
- 安装和管理依赖:`autogen-agentchat`、`autogen-core`、`autogen-ext`、`openai`(或其他 LLM 提供商)、`python-dotenv`、`docker`(用于安全代码执行)。
- 应用研究与写作模式:创建 `researcher`、`analyst`、`writer`、`reviewer` 代理,按 Research -> Analyze -> Write -> Review 组织流程。
- 应用代码生成模式:创建 `architect`、带 `code_executor` 的 `developer`、`tester`、`reviewer` 代理,按 Plan -> Code -> Test -> Review 组织流程。
- 应用数据分析模式:创建 `data_engineer`、带 `calc_tools` 的 `analyst`、`reporter` 代理,按 Extract -> Transform -> Analyze -> Report 组织流程。
适用边界 · 注意事项
- 不适用于简单单轮 LLM 调用或不需要多智能体协作的场景。
- 不适用于非 Python 技术栈或无法安装 AutoGen 及 LLM 客户端的环境。
- 不适用于无法安全隔离代码执行且需要运行不可信代码的场合。