想象一下,你有一支团队,每个成员都很擅长做不同的事情。一个人擅长规划行程,一个人了解当地有趣的地方,一个人会教你说当地的语言,还有一个人负责把所有想法整合成一个完整的计划。
AutoGen就是让AI组成这样一个团队的工具,让它们一起合作完成任务,而不是只有一个AI试图做所有事情。
代码解析
第一部分:准备工作
import asyncio import os from dotenv import load__dotenv from autogen_agentchat.agents import AssistantAgent 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 load_dotenv()
这就像在做饭前准备所有材料。我们引入了所有需要的工具:
- asyncio:让程序能够同时处理多个任务
- dotenv:帮助我们安全地存储API密钥
- 其他几个导入是AutoGen框架的组件,用来创建和管理AI代理load_dotenv() 加载你存储在.env 文件中的环境变量,比如API密钥。
第二部分:设置AI模型
model_client = OpenAIChatCompletionClient ( mode1="gpt-4o" api_key=os. getenv"OPENAI_API_KEY") )
这就像选择我们团队成员将使用的“大脑”。所有代理都会使用GPT-4o模型,但每个代理会有不同的角色和专长。我们使用 os.getenv(”OPENAI_API_KEY”)从环境变量中获取API密钥,这比直接在代码中写密钥更安全。
第三部分:创建四个专家代理
planner_agent = AssistantAgent ( "planner _agent" model_client=model_Client, description=”一个能够帮助规划旅行的助手。“, system_message=”你是一个有用的助手,能够根据用户的请求提供旅行计划建议。“ )
我们创建了第一个团队成员:旅行规划专家。
- planner_agent:这是代理的名字,类似给团队成员的名牌
- model_client=model_client:告诉代理使用哪个”大脑”
- description:简短描述这个代理的工作
- system_message:这是给代理的详细指令,这个是最重要的了,就像工作说明
接着我们创建了另外三个代理:
local_agent = AssistantAgent ( "local_agent" model_client=model_client, description="一个能够推荐当地活动或景点的本地助手。“ system_message="你是一个有用的助手,能够为用户推荐正宗有趣的当地活动或景点. ) language_agent = AssistantAgent ( "language_agent" model_client=model_client, description=”一个能够提供语言技巧的助手。”, system_message="你是一个有用的助手,能够审查旅行计划,就如何最好地解决给定目的地的语言问题。 ) travel_summary_agent = AssistantAgent( "travel_summary_agent" model_client=model_client, description="一个能够总结旅行计划的助手。”, system_message=”你是一个有用的助手,能够接收其他代理的所有建议和意见,并提供详细的最终旅行计划。 )
接着我们创建了另外三个代理:
- 本地专家(local_agent):了解当地好玩的地方和活动
- 语言专家(language_agent):帮你学会在旅行地如何沟通
- 总结专家(travel_summary_agent):负责整合所有建议,制作最终计划每个代理的 system_message 都不同,这就像给每个团队成员不同的工作指南。
每个代理的 system_message 都不同,这就像给每个团队成员不同的工作指南。
第四部分:设置会议规则
termination = TextMentionTermination "TERMINATE") group_chat = RoundRobinGroupChat ( [planner_agent, local_agent, language_agent, travel_summary_agent], termination_condition=termination )
这部分设置了团队会议的规则:
TextMentionTermination(“TERMINATE”):当任何代理说出“TERMINATE”这个词时,会议就结束了。这告诉系统什么时候任务完成。
RoundRobinGroupChat:这决定了代理们怎么交流。“轮流发言”的方式意味着代理们会按照列表中的顺序一个接一个地发言:
- 先是旅行规划专家
- 然后是本地专家
- 接着是语言专家
- 最后是总结专家
第五部分:启动系统
sync def main(): await Console(group_chat.run_stream(task="计划一个为期3天的美国旅行。“)) await model_client.close() if _name_" == "_main_" asyncio.run(main())
这是启动整个系统的部分:
- 1. 创建 main()函数,使用async 表示它是异步的(可以等待其他操作完成)
- 2. group_chat.run_stream(task=”计划一个为期3天的美国旅行。“)给团队一个任务
- 3. Console()将所有对话显示在屏幕上
- 4.model_client.close()在完成后关闭连接
- 5. asyncio.run(main())启动整个程序
运行结果



系统如何工作的流程
当你运行这个程序时,以下是发生的事情: 1. 开始会议:系统告诉团队"计划一个为期3天的美国旅行" 2. 规划专家发言:首先,旅行规划专家会创建一个基础行程,例如: 第1天:抵达纽约,参观自由女神像和时代广场 第2天:参观博物馆和中央公园 第3天:购物和离开 3.本地专家补充:本地专家看到规划后,会添加当地特色的建议: 推荐正宗的美食 提供更隐蔽但有趣的地点 添加本地文化体验 4.语言专家贡献:语言专家会提供在美国旅行的沟通提示: 美国的礼仪习惯 小费文化注意事项 有用的美国俚语表达 5.总结专家整合:最后,总结专家会把所有建议整合成一个完整的旅行计划,并在完成后说"TERMINATE"结束会议 每个代理都能看到前面代理说的话,所以他们可以互相补充,一起创建一个比单个AI能做出的更全面的计划。
为什么这种方法很强大?
这种多代理协作有几个重要优势:
- 1. 专业化:每个代理专注于自己最擅长的领域,就像专业团队一样
- 2. 知识互补:代理们互相弥补知识空白
- 3. 有序流程:从基础规划到本地知识,再到语言提示,最后整合成完整计划
- 4. 清晰的终点:系统知道何时任务完成(看到”TERMINATE”)
如何修改用于其他目的?
如果你想改变这个系统,可以:
- 1. 修改任务:把“计划一个为期3天的美国旅行。“改为任何你想要的任务
- 2. 更改代理角色:修改每个代理的 system_message 来改变其专长
- 3. 增减代理数量:根据需要添加或减少专家
- 4. 换用不同模型:可以使用不同的AI模型,如 gpt-3.5-turbo 来节省成本
实用应用示例
这种多代理系统可以用于:
- 1.学习计划:一个专家规划课程,一个专家提供资源,一个专家设计测试,一个整合成完整学习计划
- 2.产品开发:市场专家、技术专家、财务专家和项目专家共同工作
- 3.内容创作:创意专家、研究专家、结构专家和编辑专家合作创作内容
运行这个代码需要什么?
要运行这个代码,你需要:
- 安装必要的库:
pip install -U "autogen-agentchat" pip install "autogen-ext [openai]" pip install python-dotenv
- 创建一个.env 文件,里面包含你的OpenAI API密钥:OPENAI_API_KEY-你的密钥
- 运行代码:python 你的文件名.py
记住,使用API会产生费用,因为你是在使用OpenAI的服务
简单总结
想象这段代码就像组建了一个旅行规划团队:
- 一个人擅长鏊体规划
- 一个人了解当地的好地方
- 一个人帮你学当地语言
- 一个人把所有点子整合成一个完美计划
他们轮流发言,每个人都能看到前面的人说了什么,最后一起创造出一个比单个AI做得更好的旅行计划。这种”多人协作”的方法可以应用到几乎任何需要多种专业知识的任务中。