hello-agent中的AutoGen学习以及案例实践
1.概念介绍
AutoGen 是微软推出的一个开源的多智能体(Multi-Agent)框架,全程采用异步架构(基于 Python 的 async/await),旨在简化基于大语言模型(LLM)的智能体系统开发,让多个智能体通过对话协作、自动迭代完成复杂任务。
在这个框架中,代理(Agent)是具有特定功能和角色的实体,它们能够通过自然语言进行交流和协作,共同完成复杂的任务。简单来说,就像是组建了一个虚拟的团队,团队中的每个成员(代理)都有自己的专长,通过相互沟通和配合,实现诸如问题解答、任务执行、项目 管理等各类目标。比如:在一个软件开发项目中,产品经理负责将用户的模糊需求转化为清晰、可执行的开发计划、工程师依据开发计划,负责编写具体的应用程序代码、代码审查员负责审查工程师提交的代码,确保其质量、可读性和健壮性。
这种多代理对话机制,极大地提高了任务处理的效率和灵活性,能够应对各种复杂的业务场景。
AutoGen 通过提供一系列的工具和接口,将这些复杂的操作进行了封装和自动化处理。开发者只需关注业务逻辑和任务需求,通过简单的配置和代码编写,就可以实现高效的 LLM 应用开发。
AutoGen 采用模块化的架构设计,使得开发者可以轻松地创建自定义代理,并根据具体需求进行灵活组合。每个模块都具有独立的功能,如代理模块负责与其他代理进行对话和交互,模型模块负责提供语言模型支持,工具模块负责调用外部工具等。这种模块化设计使得框架具有很高的可扩展性和可定制性。开发者可以根据自己的业务需求,选择合适的模块进行组合,或者开发新的模块来满足特定的功能要求。
与其他类似框架如 LangGraph、CrewAI 相比,AutoGen 具有显著的优势。在灵活性方面,AutoGen 的多代理对话模式和模块化设计使其能够适应各种复杂的任务和场景,开发者可以根据实际需求自由组合和定制代理 。
2.基本使用
2.1 模型客户端
OpenAIChatCompletionClient兼容 OpenAI API 格式的所有模型(包括 OpenAI、国内开源 / 闭源模型、Azure OpenAI)
核心参数:
model:模型名称(必填)api_key:模型服务商的密钥(必填)base_url:API 接口地址(非 OpenAI 官方模型必须填)timeout:请求超时时间(单位:秒)。max_retries:最大重试次数。
2.2 智能体Agent
智能体是任务的执行主体,每个智能体有自己的角色、能力、系统提示词,负责完成特定环节的任务。
| 智能体类型 | 核心作用 | 适用场景 | 核心参数 |
|---|---|---|---|
AssistantAgent |
通用助理智能体,原生支持对话、工具调用、多模态 | 绝大多数通用场景,需求分析、代码编写、内容生成 | name(唯一名称)、model_client(模型客户端)、system_message(角色设定)、tools(绑定的工具) |
UserProxyAgent |
用户代理智能体,代表人的行为,支持人工输入、代码执行、结果反馈 | 人机交互、代码执行闭环、人工审核环节 | name、system_message、code_executor(代码执行器)、human_input_mode(人工输入模式) |
CodeExecutionAgent |
专门负责代码执行的智能体,隔离代码执行权限 | 代码安全执行、多智能体分工中的执行环节 | name、code_executor |
关键规则:同一个团队内,每个智能体的
name必须唯一,不能重复。
2.3 对话团队Team
当任务需要多个智能体配合时,用 Team 来管理智能体的对话顺序、发言规则、信息流转。
| 团队类型 | 核心规则 | 适用场景 |
|---|---|---|
RoundRobinGroupChat |
轮询对话,按你传入的智能体列表顺序,依次轮流发言 | 固定流程的任务(比如需求→开发→测试→验收) |
SequentialGroupChat |
序贯对话,严格按顺序执行,上一个智能体完成后才轮到下一个,不可回头 | 线性流程、一步一步的审批 / 执行任务 |
SelectorGroupChat |
智能选择,由 LLM 自动判断下一个该发言的智能体 | 复杂、非固定流程的任务,需要动态调整分工 |
MagnetGroupChat |
磁吸式对话,围绕核心任务,自动唤醒相关的智能体 | 多角色、多分支的复杂协作场景 |
2.3.1 RoundRobinGroupChat
固定顺序、循环轮流发言。严格按照传入的participants列表顺序,A→B→C→A→B→C... 循环往复,每个 Agent 按顺序发言一次,到列表末尾就自动回到开头,直到触发终止条件。
关键提醒:它是循环执行的,不是只走一遍列表,只要没触发终止条件,就会一直循环下去。
| 参数名 | 是否必填 | 作用与说明 | 注意事项 |
|---|---|---|---|
| participants | 是 | 参与团队的 Agent 列表 | 列表顺序 = 发言顺序;所有 Agent 的 name 必须唯一 |
| termination_condition | 否 | 团队终止运行的条件 | 不填会无限循环,建议至少加MaxMessageTermination兜底 |
| max_turns | 可选 | 团队最大运行轮次(1 个轮次 = 列表内所有 Agent 各发言 1 次) | 兜底防无限循环,和终止条件是「或」的关系 |
| allow_repeated_speaker | 可选,默认 False | 是否允许同一个 Agent 连续发言 | 轮询模式下默认关闭,保证轮流发言的规则 |
2.3.2 SequentialGroupChat
严格线性顺序、每个 Agent 仅发言 1 次、不可逆、不循环。按照participants列表的顺序,A 说完→B 说→C 说,每个 Agent 只执行 1 次发言,全部 Agent 发言完毕后会自动终止,中途触发终止条件也会提前停止。
| 参数名 | 是否必填 | 作用与说明 | 注意事项 |
|---|---|---|---|
| participants | 是 | Agent 列表,顺序 = 严格的执行步骤 | 每个 Agent 只会按顺序发言 1 次,name 必须唯一 |
| termination_condition | 可选 | 提前终止的条件 | 即使不填,所有 Agent 发言完毕也会自动终止 |
| max_turns | 可选 | 最大轮次,序贯模式下默认 1 轮 | 一般无需修改,修改后也不会循环执行 |
2.3.3 SelectorGroupChat
放弃固定顺序,由大模型自动决策下一个发言的 Agent。每一轮对话结束后,专门的选择器模型会根据当前对话上下文+所有 Agent 的角色职责,智能判断下一个最应该发言的 Agent,甚至可以决定是否终止对话。完全动态,无固定顺序,可跳步、可返工、可按需调用角色。
| 参数名 | 是否必填 | 作用与说明 | 注意事项 |
|---|---|---|---|
| participants | 是 | 参与团队的 Agent 列表 | 每个 Agent 的 name、description、system_message 必须清晰明确,这是选择器判断的核心依据 |
| model_client | 是 | 选择器使用的模型客户端 | 用于发言者决策,建议用能力强的模型(如 GPT-4o、Qwen-Max),弱模型会出现乱选 Agent 的问题 |
| termination_condition | 否 | 终止条件 | 必须加兜底的MaxMessageTermination,防止无限对话 |
| selector_prompt | 可选 | 自定义选择器的系统提示词 | 用于定制选择规则(如优先级、发言限制、流程规范),是高阶玩法的核心 |
| allow_repeat_speaker | 可选,默认 True | 是否允许同一个 Agent 连续多次发言 | 需要专家连续补充内容可开启,要强制多角色协作可关闭 |
| max_turns | 可选 | 最大发言轮次 | 兜底防无限循环,强烈建议设置 |
| allow_no_op | 可选,默认 False | 是否允许选择器选择「不发言,直接终止」 | 开启后,选择器可直接判断任务完成,终止团队运行 |
2.3.4 MagnetGroupChat
基于主题相关性,按需唤醒 Agent。每个 Agent 需要定义自己的专业领域描述,对话过程中,模型会判断当前对话内容和哪些 Agent 的主题相关,只唤醒相关的 Agent 发言,不相关的 Agent 全程不参与。就像磁铁一样,相关的内容会吸来对应的专家,不相关的完全不打扰。
| 参数名 | 是否必填 | 作用与说明 | 注意事项 |
|---|---|---|---|
| participants | 是 | 参与团队的 Agent 列表 | 每个 Agent 必须设置清晰的description,这是磁吸相关性判断的核心依据 |
| model_client | 是 | 用于主题相关性判断、唤醒 Agent 的模型客户端 | 建议用能力强的模型,保证相关性判断的准确性 |
| termination_condition | 强烈建议必填 | 终止条件 | 必须加兜底的终止条件,防止无限对话 |
| max_speakers_per_turn | 可选,默认 1 | 每一轮最多唤醒几个相关的 Agent | 避免一次唤醒太多 Agent,导致对话冗余混乱 |
| max_turns | 可选 | 最大发言轮次 | 兜底防无限循环,建议设置 |
| magnet_prompt | 可选 | 自定义磁吸判断的提示词 | 定制相关性判断的规则,适配特殊业务场景 |
关键提醒:关键提醒:MagnetGroupChat 的核心是 Agent 的
description参数,这个参数是专门给调度模型看的,必须清晰说明该 Agent 的专业领域、能解决的问题、职责边界,比 system_message 更重要。
2.4 终止条件
控制对话 / 任务什么时候结束,避免智能体无限循环对话。所有终止条件均位于 autogen_agentchat.conditions 模块。
常用终止条件,支持多个条件组合使用:
TextMentionTermination:最常用,当消息中包含指定关键词时终止(比如「任务完成」「验收通过」)
MaxMessageTermination:限制最大消息条数,超过就终止,防止无限循环
TimeTermination:限制最长运行时间,超时终止
StopMessageTermination:当智能体输出STOP时终止
AndTermination/OrTermination:组合多个条件,实现「且 / 或」逻辑
2.4.1 TextMentionTermination
当任意 Agent 的发言内容中包含指定关键词 / 短语时,立即终止 Team 运行。
| 参数名 | 是否必填 | 说明 | 示例 |
|---|---|---|---|
| trigger_text | 是 | 触发终止的关键词 / 短语(支持字符串 / 列表) | "任务完成" / ["测试通过", "开发完成"] |
| case_sensitive | 可选,默认 False | 是否区分大小写 | True = 区分,False = 不区分 |
| match_exact | 可选,默认 False | 是否精确匹配(全字匹配) | True = 仅匹配完整短语,False = 包含即可 |
from autogen_agentchat.conditions import TextMentionTermination
# 当消息中包含「任务完成」时终止(不区分大小写)
termination = TextMentionTermination("任务完成")
2.4.2 MaxMessageTermination
当 Team 内的总消息数(每个 Agent 的一次发言算一条)达到指定上限时,强制终止运行,所有场景必须配置。
| 参数名 | 是否必填 | 说明 | 示例 |
|---|---|---|---|
| max_messages | 是 | 最大消息数上限 | 10 / 20(根据任务复杂度调整) |
from autogen_agentchat.conditions import MaxMessageTermination
# 最多允许 10 条消息,超过则强制终止
termination = MaxMessageTermination(max_messages=10)
2.4.3 TimeTermination
当 Team 运行时间超过指定时长(秒)时,强制终止,适合对执行时长有要求的场景。
| 参数名 | 是否必填 | 说明 | 示例 |
|---|---|---|---|
| max_seconds | 是 | 最大运行时长(秒) | 300(5 分钟)/ 600(10 分钟) |
from autogen_agentchat.conditions import TimeTermination
# 运行超过 5 分钟(300 秒)则强制终止
termination = TimeTermination(max_seconds=300)
2.4.4 StopMessageTermination
当任意 Agent 输出 STOP(全大写)时,立即终止,适合需要 Agent 主动触发终止的场景。
from autogen_agentchat.conditions import StopMessageTermination
termination = StopMessageTermination()
2.4.5 EmptyMessageTermination
当 Agent 输出空消息(无内容)时终止,适合过滤无效发言的场景。
from autogen_agentchat.conditions import EmptyMessageTermination
termination = EmptyMessageTermination()
3. 异步执行
AutoGen必须通过异步函数执行, 框架底层完全基于 Python 异步协程(async/await)设计,核心 API(如 run()/run_stream()/ 工具调用 / LLM 请求)均为异步方法,没有对应的纯同步版本,因此必须在异步函数中调用这些方法。
简单示例模板:
import asyncio # 1. 导入异步库
from autogen_agentchat.agents import AssistantAgent
from autogen_ext.models.openai import OpenAIChatCompletionClient
# 2. 用 async def 定义主函数
async def main():
# 初始化模型和智能体(和同步代码完全一样)
model_client = OpenAIChatCompletionClient(
model="gpt-4o-mini",
api_key="你的API密钥"
)
agent = AssistantAgent(name="demo_agent", model_client=model_client)
# 3. 用 await 调用核心异步方法
await agent.run_stream(task="用一句话介绍AutoGen")
# 4. 用 asyncio.run() 启动异步函数
if __name__ == "__main__":
asyncio.run(main())
4. 案例实践
我们将构建一个模拟的软件开发团队,该团队由多个具有不同专业技能的智能体组成,它们将协作完成一个真实的软件开发任务。
(1)业务目标
我们的目标是开发一个功能明确的 Web 应用:实时显示比特币当前价格。这个任务虽小,却完整地覆盖了软件开发的典型环节:从需求分析、技术选型、编码实现到代码审查和最终测试。这使其成为检验 AutoGen自动化协作流程的理想场景。
(2)智能体团队角色
为了模拟真实的软件开发流程,我们设计了四个职责分明的智能体角色:
-
ProductManager (产品经理): 负责将用户的模糊需求转化为清晰、可执行的开发计划。
-
Engineer (工程师): 依据开发计划,负责编写具体的应用程序代码。
-
CodeReviewer (代码审查员): 负责审查工程师提交的代码,确保其质量、可读性和健壮性。
-
UserProxy (用户代理): 代表最终用户,发起初始任务,并负责执行和验证最终交付的代码。
这种角色划分是多智能体系统设计中的关键一步,它将一个复杂任务分解为多个由领域“专家”处理的子任务。
4.1 客户端配置
在项目根目录下创建一个.env文件,并写入以下内容:
LLM_MODEL_ID="YOUR-MODEL"
LLM_API_KEY="YOUR-API-KEY"
LLM_BASE_URL="YOUR-URL"
LLM_MODEL_ID:模型名称
LLM_API_KEY:调用模型API的key
LLM_BASE_URL:API请求url
案例中并没有直接从openai官方获取的模型,而是使用的推理时代:https://aihubmix.com/,如果是openai官方的则更好
推理时代中申请流程:模型->筛选开发者openai->选择gpt-4o-mini模型->创建key
注意:gpt-4omini模型为收费模型,需要充值token,充值1$大概能运行后续项目30次。
4.2 角色设计
4.2.1 产品经理 (ProductManager)
产品经理负责启动整个流程。它的系统消息不仅定义了其职责,还规范了其输出的结构,并包含了引导对话转向下一环节(工程师)的明确指令。
def create_product_manager(model_client):
system_message = """
你是一位经验丰富的产品经理,专门负责软件产品的需求分析和项目规划。
你的核心职责包括:
1. **需求分析**:深入理解用户需求,识别核心功能和边界条件
2. **技术规划**:基于需求制定清晰的技术实现路径
3. **风险评估**:识别潜在的技术风险和用户体验问题
4. **协调沟通**:与工程师和其他团队成员进行有效沟通
当接到开发任务时,请按以下结构进行分析:
1. 需求理解与分析
2. 功能模块划分
3. 技术选型建议
4. 实现优先级排序
5. 验收标准定义
请简洁明了地回应,并在分析完成后说"请工程师开始实现"。
"""
return AssistantAgent(
name="ProductManager",
model_client=model_client,
system_message=system_message,
)
4.2.2 工程师 (Engineer)
工程师的系统消息聚焦于技术实现。它列举了工程师的技术专长,并规定了其在接收到任务后的具体行动步骤,同样也包含了引导流程转向代码审查员的指令。
def create_engineer(model_client):
system_message = """
你是一位资深的软件工程师,擅长 Python 开发和 Web 应用构建。
你的技术专长包括:
1. **Python 编程**:熟练掌握 Python 语法和最佳实践
2. **Web 开发**:精通 Streamlit、Flask、Django 等框架
3. **API 集成**:有丰富的第三方 API 集成经验
4. **错误处理**:注重代码的健壮性和异常处理
当收到开发任务时,请:
1. 仔细分析技术需求
2. 选择合适的技术方案
3. 编写完整的代码实现
4. 添加必要的注释和说明
5. 考虑边界情况和异常处理
请提供完整的可运行代码,并在完成后说"请代码审查员检查"。
"""
return AssistantAgent(
name="Engineer",
model_client=model_client,
system_message=system_message,
)
4.2.3 代码审查员 (CodeReviewer)
代码审查员的定义则侧重于代码的质量、安全性和规范性。它的系统消息详细列出了审查的重点和流程,确保了代码交付前的质量关卡。
def create_code_reviewer(model_client):
system_message = """
你是一位经验丰富的代码审查专家,专注于代码质量和最佳实践。
你的审查重点包括:
1. **代码质量**:检查代码的可读性、可维护性和性能
2. **安全性**:识别潜在的安全漏洞和风险点
3. **最佳实践**:确保代码遵循行业标准和最佳实践
4. **错误处理**:验证异常处理的完整性和合理性
审查流程:
1. 仔细阅读和理解代码逻辑
2. 检查代码规范和最佳实践
3. 识别潜在问题和改进点
4. 提供具体的修改建议
5. 评估代码的整体质量
请提供具体的审查意见,完成后说"代码审查完成,请用户代理测试"。
"""
return AssistantAgent(
name="CodeReviewer",
model_client=model_client,
system_message=system_message,
)
4.2.4 用户代理 (UserProxy)
UserProxyAgent 是一个特殊的智能体,它不依赖 LLM 进行回复,而是作为用户在系统中的代理。它的description 字段清晰地描述了其职责,尤其重要的是,它负责在任务最终完成后发出 TERMINATE 指令,以正常结束整个协作流程。
def create_user_proxy():
return UserProxyAgent(
name="UserProxy",
description="""
用户代理,负责以下职责:
1. 代表用户提出开发需求
2. 执行最终的代码实现
3. 验证功能是否符合预期
4. 提供用户反馈和建议
完成测试后请回复 TERMINATE。""",
)
4.3 团队协作
软件开发的流程是相对固定的(需求->编码->审查->测试),因此 RoundRobinGroupChat (轮询群聊) 是理想的选择。我们按照业务逻辑顺序,将四个智能体加入到参与者列表中。
team_chat = RoundRobinGroupChat(
participants=[product_manager, engineer, code_reviewer, user_proxy], # 智能体发言先后顺序
termination_condition=termination, # 终止条件
max_turns=20, # 最大轮数,超过此轮数仍未触发终止条件,聊天将强制结束
)
4.4 运行项目
由于 AutoGen 0.7.4 采用异步架构,整个协作流程的启动和运行都在一个异步函数中完成,并最终通过asyncio.run() 来执行。
async def run_software_development_team():
# ... 初始化客户端和智能体 ...
# 定义任务描述
task = """我们需要开发一个比特币价格显示应用,具体要求如下:
核心功能:
- 实时显示比特币当前价格(USD)
- 显示24小时价格变化趋势(涨跌幅和涨跌额)
- 提供价格刷新功能
技术要求:
- 使用 Streamlit 框架创建 Web 应用
- 界面简洁美观,用户友好
- 添加适当的错误处理和加载状态
请团队协作完成这个任务,从需求分析到最终实现。"""
# 异步执行团队协作,并流式输出对话过程
result = await Console(team_chat.run_stream(task=task))
return result
# 主程序入口
if __name__ == "__main__":
result = asyncio.run(run_software_development_team())
4.5 完整代码
import asyncio
import os
from autogen_agentchat.agents import AssistantAgent, UserProxyAgent
from autogen_agentchat.conditions import TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_agentchat.ui import Console
from autogen_ext.models.openai import OpenAIChatCompletionClient
from dotenv import load_dotenv
load_dotenv()
def create_openai_model_client():
"""创建 OpenAI 模型客户端用于测试"""
return OpenAIChatCompletionClient(
model=os.getenv("LLM_MODEL_ID"),
api_key=os.getenv("LLM_API_KEY"),
base_url=os.getenv("LLM_BASE_URL"),
)
def create_product_manager(model_client):
system_message = """
你是一位经验丰富的产品经理,专门负责软件产品的需求分析和项目规划。
你的核心职责包括:
1. **需求分析**:深入理解用户需求,识别核心功能和边界条件
2. **技术规划**:基于需求制定清晰的技术实现路径
3. **风险评估**:识别潜在的技术风险和用户体验问题
4. **协调沟通**:与工程师和其他团队成员进行有效沟通
当接到开发任务时,请按以下结构进行分析:
1. 需求理解与分析
2. 功能模块划分
3. 技术选型建议
4. 实现优先级排序
5. 验收标准定义
请简洁明了地回应,并在分析完成后说"请工程师开始实现"。
"""
return AssistantAgent(
name="ProductManager",
model_client=model_client,
system_message=system_message,
)
def create_engineer(model_client):
system_message = """
你是一位资深的软件工程师,擅长 Python 开发和 Web 应用构建。
你的技术专长包括:
1. **Python 编程**:熟练掌握 Python 语法和最佳实践
2. **Web 开发**:精通 Streamlit、Flask、Django 等框架
3. **API 集成**:有丰富的第三方 API 集成经验
4. **错误处理**:注重代码的健壮性和异常处理
当收到开发任务时,请:
1. 仔细分析技术需求
2. 选择合适的技术方案
3. 编写完整的代码实现
4. 添加必要的注释和说明
5. 考虑边界情况和异常处理
请提供完整的可运行代码,并在完成后说"请代码审查员检查"。
"""
return AssistantAgent(
name="Engineer",
model_client=model_client,
system_message=system_message,
)
def create_code_reviewer(model_client):
system_message = """
你是一位经验丰富的代码审查专家,专注于代码质量和最佳实践。
你的审查重点包括:
1. **代码质量**:检查代码的可读性、可维护性和性能
2. **安全性**:识别潜在的安全漏洞和风险点
3. **最佳实践**:确保代码遵循行业标准和最佳实践
4. **错误处理**:验证异常处理的完整性和合理性
审查流程:
1. 仔细阅读和理解代码逻辑
2. 检查代码规范和最佳实践
3. 识别潜在问题和改进点
4. 提供具体的修改建议
5. 评估代码的整体质量
请提供具体的审查意见,完成后说"代码审查完成,请用户代理测试"。
"""
return AssistantAgent(
name="CodeReviewer",
model_client=model_client,
system_message=system_message,
)
def create_user_proxy():
return UserProxyAgent(
name="UserProxy",
description="""
用户代理,负责以下职责:
1. 代表用户提出开发需求
2. 执行最终的代码实现
3. 验证功能是否符合预期
4. 提供用户反馈和建议
完成测试后请回复 TERMINATE。""",
)
async def run_software_development_team():
"""运行软件开发团队协作"""
print("🔧 正在初始化模型客户端...")
# 先使用标准的 OpenAI 客户端测试
model_client = create_openai_model_client()
print("👥 正在创建智能体团队...")
# 创建智能体团队
product_manager = create_product_manager(model_client)
engineer = create_engineer(model_client)
code_reviewer = create_code_reviewer(model_client)
user_proxy = create_user_proxy()
# 添加终止条件
termination = TextMentionTermination("TERMINATE") # 终止条件,当智能体回复"TERMINATE"时,聊天结束
# 定义团队聊天和协作规则
team_chat = RoundRobinGroupChat(
participants=[product_manager, engineer, code_reviewer, user_proxy], # 智能体发言先后顺序
termination_condition=termination,
max_turns=20, # 最大轮数,超过此轮数仍未触发终止条件,聊天将强制结束
)
# 定义开发任务
task = """
我们需要开发一个比特币价格显示应用,具体要求如下:
核心功能:
- 实时显示比特币当前价格(USD)
- 显示24小时价格变化趋势(涨跌幅和涨跌额)
- 提供价格刷新功能
技术要求:
- 使用 Streamlit 框架创建 Web 应用
- 界面简洁美观,用户友好
- 添加适当的错误处理和加载状态
请团队协作完成这个任务,从需求分析到最终实现。
"""
# 执行团队协作
print("🚀 启动 AutoGen 软件开发团队协作...")
print("=" * 60)
# 使用 Console 来显示对话过程
result = await Console(team_chat.run_stream(task=task))
print("\n" + "=" * 60)
print("✅ 团队协作完成!")
return result
# 主程序入口
if __name__ == "__main__":
try:
# 运行异步协作流程
result = asyncio.run(run_software_development_team())
print(f"\n📋 协作结果摘要:")
print(f"- 参与智能体数量:4个")
print(f"- 任务完成状态:{'成功' if result else '需要进一步处理'}")
except ValueError as e:
print(f"❌ 配置错误:{e}")
print("请检查 .env 文件中的配置是否正确")
except Exception as e:
print(f"❌ 运行错误:{e}")
import traceback
traceback.print_exc()
注意:在运行到“代码审查完成,请用户代理测试”时需要手动模拟用户代理回复内容,回复TERMINATE则终止循环,程序退出。
对于非OpenAI模型配置补充:
如果使用非 OpenAI 系列的模型(如 DeepSeek、通义千问等),在 0.7.4 版本中需要在
OpenAIChatCompletionClient 的参数中传入模型信息字典。以 DeepSeek 为例:
from autogen_ext.models.openai import OpenAIChatCompletionClient
model_client = OpenAIChatCompletionClient(
model="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
model_info={
"function_calling": True,
"max_tokens": 4096,
"context_length": 32768,
"vision": False,
"json_output": True,
"family": "deepseek",
"structured_output": True,
}
)
model_info 字典帮助 AutoGen 了解模型的能力边界,从而更好地适配不同的模型服务
发表评论