news 2026/5/1 7:06:19

大模型应用技术之 Agent框架 AutoGen

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大模型应用技术之 Agent框架 AutoGen

1. AutoGen 原理与介绍

1.1 什么是 AutoGen

AutoGen是由微软(Microsoft)开发的开源多智能体对话框架。它允许开发者通过定义多个可对话的 Agent(Conversable Agents),让它们通过自动对话来协作解决任务。AutoGen 的核心优势在于其强大的代码执行能力灵活的对话模式(支持两方对话、群聊、层级对话等)。

1.2 核心设计理念

  • 对话即计算(Conversation as Computation):将任务求解过程建模为多智能体之间的对话
  • 代码优先(Code First):Agent 可以编写代码、调试代码并在本地/Docker 容器中执行代码
  • 人类介入(Human in the Loop):原生支持在对话的任意阶段引入人工反馈
  • 可定制化(Customizable):Agent 的 LLM 配置、系统提示词、技能均可灵活定制

1.3 技术架构

AutoGen 的架构基于ConversableAgent基类:

┌───────────────────────────────────────────────┐ │ ConversableAgent │ │ (基类:负责接收消息、LLM推理、生成回复) │ └──────────────────────┬────────────────────────┘ │ ┌────────────┴────────────┐ ▼ ▼ ┌────────────────┐ ┌────────────────┐ │ AssistantAgent │ │ UserProxyAgent │ │ (AI 助手) │ │ (用户代理) │ │ - 编写代码 │ │ - 执行代码 │ │ - 制定计划 │ │ - 请求人工输入 │ └────────────────┘ └────────────────┘

1.4 版本信息

重要说明:AutoGen 在 PyPI 上的发行形态是元包pyautogen。在pyautogen==0.10.0下:

  • ✅ 可导入模块:autogen_agentchatautogen_core
  • ❌ 不存在:import autogen(会ModuleNotFoundError
  • AutoGen 最新版本(元包)pyautogen==0.10.0
  • 关键子包autogen-agentchat==0.7.5autogen-core==0.7.5(随pyautogen安装)
  • Python 版本要求:Python 3.8+

2. AutoGen 数据流向

2.1 双智能体对话流

最基础的模式是 UserProxyAgent 与 AssistantAgent 的互答:

AssistantAgentUserProxyAgent用户AssistantAgentUserProxyAgent用户alt[执行出错][执行成功]1. 发起任务 ("画一张股价走势图")2. 转发任务3. 思考 & 编写 Python 代码4. 发送代码块5. (自动/人工) 执行代码6. 发送执行结果 (Success/Error)7. 修正代码8. 发送新代码9. "TERMINATE" (结束对话)

2.2 群聊 (GroupChat) 数据流

多个 Agent 参与的群组对话:

选择发言人策略

发起

广播上下文

广播上下文

广播上下文

回复

回复

回复

1.调用 LLM 选择

Coder

UserProxyAgent

GroupChatManager

Coder

Reviewer

ProductManager

谁下一个发言?


3. AutoGen 核心组件

3.1 AssistantAgent

负责解决任务的 AI 角色。它通常配置了 LLM,能够理解指令、编写代码或给出建议。

fromautogen_agentchat.agentsimportAssistantAgentfromautogen_ext.models.openaiimportOpenAIChatCompletionClient llm=OpenAIChatCompletionClient(model="gpt-4",api_key="YOUR_KEY")assistant=AssistantAgent(name="assistant",model_client=llm)

3.2 UserProxyAgent

代表用户或执行环境的代理。它通常配置 LLM(或只作为辅助),主要职责是:

  1. 执行代码:运行 Assistant 发来的代码块。
  2. 请求人工输入:在关键步骤暂停,等待人类确认。
fromautogen_agentchat.agentsimportUserProxyAgent# 注意:在 pyautogen==0.10.0 中,UserProxyAgent 主要用于“代表人类输入/代理人类”。# 旧版 autogen 的 code_execution_config(自动执行代码块)API 已不适用;# 新版需要通过 tool / workbench / runtime 接入代码执行能力(请参考官方文档示例)。user_proxy=UserProxyAgent(name="user_proxy")

3.3 GroupChat & Manager

用于管理 3 个及以上 Agent 的对话。

  • GroupChat: 维护 Agent 列表和对话历史。
  • GroupChatManager: 特殊的 Agent,利用 LLM 来决定"下一个轮到谁发言"。

4. AutoGen vs CrewAI vs LangGraph 三方对比

特性AutoGenCrewAILangGraph
核心隐喻对话(Conversation)团队/角色(Role/Crew)图/状态机(Graph/State)
代码执行原生强项(UserProxy 自动执行)⚠️ 需通过 Tool 间接实现⚠️ 需自定义 Node 实现
控制流自动 (LLM 决定下一发言人)顺序/层级 (Sequential/Hierarchical)精确 (边/条件分支)
适用场景编程、调试、开放式探索内容生成、报告分析、线性任务复杂业务流、生产级应用
上手难度⭐⭐ (概念少,但调试Prompt难)⭐ (封装好,易上手)⭐⭐⭐ (需理解图论/状态)

4.4 为什么选择 AutoGen?

选择 AutoGen 的主要理由通常是:

  1. 你需要 Agent 真的去"做"事情:不仅仅是生成文本,而是生成代码并运行代码(画图、抓取数据、数值计算)。
  2. 任务需要反复试错:AutoGen 的"生成-执行-报错-修正"循环非常成熟,非常适合编程类任务。

5. AutoGen 适用场景

5.1 自动化编程与数据分析

Agent A 写代码,Agent B (Proxy) 运行代码并反馈报错,Agent A 修正代码。这在数据清洗、机器学习模型训练脚本生成中非常有效。

5.2 复杂问题的多角度研讨

创建一个由 “正方代表”、“反方代表” 和 “主持人” 组成的 GroupChat,让他们针对一个议题进行辩论,生成更全面的观点。

5.3 动态工作流

当任务步骤无法预先确定(例如:先搜索,如果没搜到就去爬虫,如果爬虫失败就换个源),AutoGen 的对话驱动模式比硬编码的工作流更灵活。


6. 快速开始指南

6.1 安装

pipinstallpyautogen==0.10.0 autogen-ext==0.7.5

6.2 最小可运行示例(v0.10.0:验证 import 与接线方式)

创建一个简单的脚本app.py

fromautogen_agentchat.agentsimportAssistantAgent,UserProxyAgentfromautogen_agentchat.teamsimportRoundRobinGroupChatfromautogen_agentchat.conditionsimportTextMentionTerminationfromautogen_ext.models.openaiimportOpenAIChatCompletionClient llm=OpenAIChatCompletionClient(model="gpt-4",api_key="sk-...",# 填入你的 OpenAI Key)assistant=AssistantAgent(name="assistant",model_client=llm)user_proxy=UserProxyAgent(name="user_proxy")team=RoundRobinGroupChat(participants=[user_proxy,assistant],termination_condition=TextMentionTermination("TERMINATE"),max_turns=5,)# 注意:该示例会调用真实 LLM;完成后需让 assistant 回复 TERMINATEresult=team.run(task="请用 Python 打印当前日期的斐波那契数列前 10 位;完成后回复 TERMINATE。")print(result)

6.3 运行

python app.py

你会在coding/目录下看到生成的代码文件和执行结果。


7. 最佳实践

  1. 限制对话轮次:使用max_turns(例如RoundRobinGroupChat(max_turns=5))防止无限对话消耗 Token。
  2. 明确终止条件:使用TextMentionTermination(\"TERMINATE\")(或其他 termination condition)明确结束条件。
  3. 代码执行要隔离:新版 AutoGen 通过 tool/workbench/runtime 接入代码执行能力;生产环境务必使用容器/沙盒隔离执行。
  4. 精细化 System Message:给每个 Agent 设定清晰的人设(如 “你是一个极其严谨的代码审查员,只关注安全性漏洞”)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 3:46:35

艾莉丝努力练剑的256天创作纪念日:在代码星河中逐梦前行

🔥艾莉丝努力练剑:个人主页 ❄专栏传送门:《C语言》、《数据结构与算法》、C/C干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶、测试开发要点全知道 ⭐️为天地立心,为生民立命…

作者头像 李华
网站建设 2026/5/1 3:51:07

redis存储空间复杂度和时间复杂度的平衡

下面是一个案例:根据奖品概率计算奖品存储空间以及时间复杂度的权衡. 1. 内存占用的计算 1.1 不同精度下的内存占用 // 精度范围(rateRange)决定了数组大小 rateRange 10000 // 万分位 (0.0001) rateRange 100000 // 十万分位 (0.00001) r…

作者头像 李华
网站建设 2026/5/1 3:49:55

Spring循环依赖:原理、限制与解决方案深度解析

一、循环依赖的定义与本质在Spring框架中,循环依赖指的是两个或多个Bean之间存在直接或间接的相互引用关系,从而形成一个闭合的依赖环。简而言之,当BeanA依赖BeanB,同时BeanB也依赖BeanA时,便构成了典型的循环依赖。代…

作者头像 李华
网站建设 2026/5/1 3:43:34

漏洞扫描工具深度对比:Burp Suite vs. ZAP

一、工具定位与背景核心解析 1.1 Burp Suite:企业级Web安全审计标杆 开发背景:PortSwigger公司推出的商业化渗透测试套件(2003年至今) 市场定位:专业安全团队的全生命周期Web应用安全解决方案 代表用户:…

作者头像 李华