AutoGen使用学习
上篇文件使用使用【autoGen+chainlit+deepSeek】实现【多角色、多用户、多智能体对话系统】,本次系统的学习autoGen的使用方法
文章目录
- AutoGen使用学习
- @[toc]
- 1-核心知识点
- 2-参考网址
- 3-实战案例
- 1-autoGen安装和基础使用
- 主要功能
- 安装方法
- 使用示例
- 注意事项
- 3-使用AssistantAgent
- 4-使用RoundRobinGroupChat
- 4-个人思考
- 1-同一个model_client对象可以复用吗?
- 2-AssistantAgent的TextMessage和其他Message有什么区别,分别使用在什么场景?
- 1. `TextMessage`
- 定义
- 区别
- 适用场景
- 2. 其他消息类型及适用场景
- `MultiModalMessage`
- `StopMessage`
- `ToolCallSummaryMessage`
- `HandoffMessage`
文章目录
- AutoGen使用学习
- @[toc]
- 1-核心知识点
- 2-参考网址
- 3-实战案例
- 1-autoGen安装和基础使用
- 主要功能
- 安装方法
- 使用示例
- 注意事项
- 3-使用AssistantAgent
- 4-使用RoundRobinGroupChat
- 4-个人思考
- 1-同一个model_client对象可以复用吗?
- 2-AssistantAgent的TextMessage和其他Message有什么区别,分别使用在什么场景?
- 1. `TextMessage`
- 定义
- 区别
- 适用场景
- 2. 其他消息类型及适用场景
- `MultiModalMessage`
- `StopMessage`
- `ToolCallSummaryMessage`
- `HandoffMessage`
1-核心知识点
- 1.1 autoGen是什么?
- 1.2 autoGen的基本使用方法
- 1)使用OpenAIChatCompletionClient对话
- 2)使用AssistantAgent对话
- 3)使用RoundRobinGroupChat对话
- 1.3 autoGen的高级使用方法
2-参考网址
- 个人代码实现仓库:https://gitee.com/enzoism/python_autogen
- AutoGen多角色、多用户、多智能体对话系统
3-实战案例
1-autoGen安装和基础使用
autogen-ext[openai]
是一个Python包,为AutoGen框架提供了与OpenAI模型集成的扩展功能。通过安装这个扩展,用户可以利用AutoGen框架与OpenAI的模型(如GPT-3.5-turbo)进行交互,执行诸如聊天补全等任务。
主要功能
- 模型客户端:提供了
OpenAIChatCompletionClient
类,用于与OpenAI的聊天补全模型进行交互。 - API集成:需要用户的OpenAI API密钥进行配置,以便访问OpenAI的模型服务。
安装方法
使用pip命令安装:
pip install "autogen-ext[openai]"
使用示例
- 直接使用OpenAIChatCompletionClient
import asyncio
from autogen_ext.models.openai import OpenAIChatCompletionClient
from autogen_core.models import UserMessageasync def chat_with_model():# 创建OpenAIChatCompletionClient对象model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": False,"json_output": True,"family": "unknown",})result = await model_client.create([UserMessage(content="中国的首都是什么?", source="user")])print(result.model_dump_json())if __name__ == '__main__':asyncio.run(chat_with_model())
注意事项
- 需要Python 3.10或以上版本。
- 在使用前,确保已安装
autogen-core
包,因为autogen-ext
构建于其之上。
3-使用AssistantAgent
import asynciofrom autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.messages import TextMessage
from autogen_core import CancellationToken
from autogen_ext.models.openai import OpenAIChatCompletionClient
from dotenv import load_dotenv# 加载环境变量
load_dotenv()# 创建OpenAIChatCompletionClient对象-更推荐这种写法
model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": False,"json_output": True,"family": "unknown",})# 创建智能体
agent = AssistantAgent(name="storyAssistant",model_client=model_client,system_message="你是一个搞怪的故事大王,负责给孩子们讲睡前故事。你的目标是让在美好的故事中入睡,拥有一个甜美的梦。"
)async def chat_with_model():# 模拟用户发送消息response = await agent.on_messages([TextMessage(content="开始哄睡吧!", source="user")],cancellation_token=CancellationToken())# 打印智能体的回复print(response.chat_message)if __name__ == '__main__':asyncio.run(chat_with_model())
4-使用RoundRobinGroupChat
并且使用chainlit作为前端UI进行模型对话
import chainlit as cl
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models.openai import OpenAIChatCompletionClient@cl.on_chat_start
async def main():await cl.Message(content="您好,这里是超级无敌大医院,有什么可以帮您?").send()async def run_team(query: str):model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": False,"json_output": True,"family": "unknown",}, )assistant_agent = AssistantAgent("assistant", model_client=model_client,system_message="你是一所口腔医院的导诊台机器人,负责解答用户的挂号问题,用户描述症状需求,你回答应该挂的科室。""在本医院中有以下科室:牙体牙髓科、口腔修复科、口腔外科、口腔种植科、儿童口腔专科。""如果用户的问题与挂号咨询不符合,回答:“您的描述与症状无关,暂不支持”")team = RoundRobinGroupChat(participants=[assistant_agent], max_turns=1)response_stream = team.run_stream(task=query)async for msg in response_stream:if hasattr(msg, "source") and msg.source != "user" and hasattr(msg, "content"):msg = cl.Message(content=msg.content, author="Agent Team")await msg.send()@cl.on_message
async def main(message: cl.Message):"""对话运行脚本: chainlit run a04_autogen_chainlit.py -w"""await run_team(message.content)
- 运行脚本
# 对话运行脚本
chainlit run a04_autogen_chainlit.py -w
4-个人思考
1-同一个model_client对象可以复用吗?
可以,同样是和deepSeek聊天,可以结合AssistantAgent和SelectorGroupChat进行同一个model_client复用
- 所以对比之后更推荐以下写法
from autogen_core.models import UserMessage
from autogen_ext.models.openai import OpenAIChatCompletionClient# 创建OpenAIChatCompletionClient对象-更推荐这种写法
model_client = OpenAIChatCompletionClient(model="deepseek-chat", base_url="https://api.deepseek.com",api_key="sk-6d775065fa8c405caebed674c125e67e",model_info={"vision": False,"function_calling": False,"json_output": True,"family": "unknown",})# 使用模型客户端进行交互
async def chat_with_model():result = await model_client.create([UserMessage(content="中国的首都是什么?", source="user")])print(result.model_dump_json())
2-AssistantAgent的TextMessage和其他Message有什么区别,分别使用在什么场景?
ChatMessage = Annotated[TextMessage | MultiModalMessage | StopMessage | ToolCallSummaryMessage | HandoffMessage, Field(discriminator="type")
]
在 AutoGen
框架里,AssistantAgent
会处理不同类型的消息,像 TextMessage
以及其他类型的消息(MultiModalMessage
、StopMessage
、ToolCallSummaryMessage
、HandoffMessage
等)。下面详细阐述它们的区别与适用场景:
1. TextMessage
定义
TextMessage
是最基础且常见的消息类型,它仅包含文本内容。在代码里,它代表单纯的文本交流信息。
区别
- 内容单一:只包含文本数据,不涉及其他模态的数据(例如图像、音频等),也没有额外的控制信息或者工具调用信息。
适用场景
- 日常对话:当智能体之间进行普通的文本交流,如讨论问题、分享观点、询问信息等,就会使用
TextMessage
。例如:
import autogenconfig_list = [{"model": "gpt-3.5-turbo","api_key": "YOUR_API_KEY",}
]assistant = autogen.AssistantAgent(name="assistant")
user_proxy = autogen.UserProxyAgent(name="user_proxy", code_execution_config={"work_dir": "coding"})# 发送文本消息
user_proxy.send("你能给我讲讲机器学习的基本概念吗?", assistant)
- 文本推理和生成:在需要进行文本推理、生成故事、文章摘要等任务时,
TextMessage
是主要的消息载体。
2. 其他消息类型及适用场景
MultiModalMessage
- 区别:这种消息类型支持多种模态的数据,除了文本外,还能包含图像、音频、视频等信息。
- 适用场景:当需要进行多模态交互时使用,比如在一个智能体需要发送包含图像和文字说明的消息给另一个智能体的场景下。例如,在图像识别与描述的任务中,一个智能体可以发送一张图片和相关的文本描述给另一个智能体进行处理。
StopMessage
- 区别:
StopMessage
是一种控制消息,用于指示对话的结束。它不包含实际的文本内容,主要起到控制流程的作用。 - 适用场景:当对话达到某个终止条件,如任务完成、达到最大对话轮数等,就可以发送
StopMessage
来结束对话。
ToolCallSummaryMessage
- 区别:该消息类型用于总结工具调用的结果。当智能体调用外部工具(如数据库查询、API
调用等)后,会使用ToolCallSummaryMessage
来汇报工具调用的情况和结果。 - 适用场景
:在智能体协作完成需要调用外部工具的任务时,例如查询天气信息、获取股票数据等,工具调用完成后就会发送ToolCallSummaryMessage
来分享结果。
HandoffMessage
- 区别:
HandoffMessage
用于在不同智能体之间进行任务交接。它通常包含一些关于任务的上下文信息,以便接收任务的智能体能够继续处理。 - 适用场景:当一个智能体无法完成某个任务,需要将任务转交给其他更适合的智能体时,就会发送
HandoffMessage
。例如,在一个复杂的客服场景中,一个智能体无法回答用户的问题,就可以将任务转交给另一个专业的智能体处理。