AutoGen使用学习

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`

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
以及其他类型的消息(MultiModalMessageStopMessageToolCallSummaryMessageHandoffMessage 等)。下面详细阐述它们的区别与适用场景:

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
    。例如,在一个复杂的客服场景中,一个智能体无法回答用户的问题,就可以将任务转交给另一个专业的智能体处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

207、【图论】孤岛的总面积

题目 思路 相比于 206、【图论】岛屿数量,就是在这个代码的基础上。先遍历边界,将边界连接的岛屿变为0,然后再计算一遍当前为1的岛屿面积。 代码实现 import collectionsn, m list(map(int, input().split())) graph []for _ in range(n…

Python Selenium库入门使用,图文详细。附网页爬虫、web自动化操作等实战操作。

文章目录 前言1 创建conda环境安装Selenium库2 浏览器驱动下载(以Chrome和Edge为例)3 基础使用(以Chrome为例演示)3.1 与浏览器相关的操作3.1.1 打开/关闭浏览器3.1.2 访问指定域名的网页3.1.3 控制浏览器的窗口大小3.1.4 前进/后…

在芯片设计的后端流程中,通过metal修timing是什么意思,怎么实施。举个timing违例说明一下

芯片设计后端流程中通过Metal修Timing 在芯片设计后端流程中,"通过metal修timing"是指通过调整金属层布线来解决时序违例问题的一种技术手段。这是物理设计阶段常用的优化方法之一。 什么是通过Metal修Timing 在芯片设计中,Metal(金…

【数据结构】List介绍

目录 1. 什么是List 2. 常见接口介绍 3. List的使用 1. 什么是List 在集合框架中,List是一个接口,继承自Collection。此时extends意为拓展 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示&…

文件上传漏洞

pass-1 判断本关文件上传检测方式 ①显示源码 本pass在客户端使用js对不合法图片进行检查!js前端检测 2、针对防御措施进行绕过上传 通过JS 限制上传的文件类型,对于这种情况,我们可以采用以下几种方式绕过: 修改JS文件; 上传png后缀的…

深入Flink运行时架构:JobManager与TaskManager协作全解析

深入Flink运行时架构:JobManager与TaskManager协作全解析 一、Flink分布式执行模型剖析 1.1 运行时架构全景视图 核心组件交互关系: #mermaid-svg-tMSqMSsKP6vwUZi3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

股票-K线

一根K线记录的是某股票一个周期的价格变动情况,其周期可以分为月k线、周k线、日k线、小时线等等。 单根K线的构成要素,通常有以下几部分: 开盘价、收盘价、最高价、最低价、实体、上影线、下影线。 1、阳K线 在阳K线中, 最上端的线段为上影线,上影线的最高点为最高价,…

行为模式---策略模式

概念 策略模式是一种行为设计摸是,它的核心思想是将一些列的算法封装成独立的对象,并使它们可以相互替换,通过上下文进行调用。 策略模式通过算法抽象为独立的策略类,客户端可以根据自身需求选择不同的策略类来完成任务、这种方…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍:使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径,之后一直点“下一步”直到完成 2 添加元器件 点击元…

Diffusion-Probabilistic-Models环境配置

1、相关地址 代码地址:https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 论文地址:https://arxiv.org/abs/2006.11239 2、python2.7 环境安装 conda create -n theano python2.7 -y conda activate theano3、包安装 下载合适的版本,也就是201…

机器学习(吴恩达)

一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…

electron 安装报错:RequestError: certificate has expired

在使用 yarn 安装 electron 时,报证书过期的错误。原因是以前使用的阿里的镜像已经过期,改成新的镜像地址就可以了。 报错信息 yarn add electron --dev yarn add v1.22.5 info No lockfile found. [1/4] Resolving packages... ⠁ (node:33196) [DEP0…

《历史代码分析》5、动态控制列表的列

​​ 本系列《历史代码分析》为工作中遇到具有代表性的代码。今天我们讲一下,动态展示列表的列,因为找不到代码了,所有本篇用图展示。 举个栗子 ​​ 我们希望能够动态的控制列表的列,例如,英语老师只想知道自己学…

【网络协议详解】——QOS技术(学习笔记)

目录 QoS简介 QoS产生的背景 QoS服务模型 基于DiffServ模型的QoS组成 MQC简介 MQC三要素 MQC配置流程 优先级映射配置(DiffServ域模式) 优先级映射概述 优先级映射原理描述 优先级映射 PHB行为 流量监管、流量整形和接口限速简介 流量监管 流量整形 接口限速…

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily(挥舞着数据报表):“用户反馈我们的股票舆情分析总是缺失最新跟帖!这些动态分页像狡猾的狐狸,每次抓取都漏掉关键数据!” 小王(调试着爬虫代码):“传…

练习-纪律问题(幂运算)

问题描述 一年级一班有 n 个小朋友坐成一排,统计了这些小朋友的爱好后,老师得知了他们一共有 m 种爱好,每个小朋友会拥有这些爱好中的一种。 如果相邻的小朋友爱好相同,那么他们上课时就会忍不住悄悄说话,违反课堂纪…

《基于机器学习的DDoS攻击检测与防御系统设计与实现》开题报告

目录 一、课题的研究目的和意义 1.1课题背景 1.2课题目的 (1)提高DDoS攻击检测的准确性 (2)加强DDoS攻击的防御能力 (3)提升网络安全防护的技术水平 1.3课题意义 (1)理论意义…

【Java项目】基于JSP的幼儿教育管理系统

【Java项目】基于JSP的幼儿教育管理系统 技术简介:采用JSP技术、B/S结构、MYSQL数据库等实现。 系统简介:幼儿教育管理系统,主要的模块包括查看;管理员;个人中心、用户管理、学生信息管理、班级信息管理、缴费信息管理…

如何将本地已有的仓库上传到gitee (使用UGit)

1、登录Gitee。 2、点击个人头像旁边的加号,选择新建仓库: 3、填写仓库相关信息 4、复制Gitee仓库的地址 5、绑定我们的本地仓库与远程仓库 6、将本地仓库发布(推送)到远程仓库: 注意到此处报错&#xff…

限制数据库字段长度的公用写法:length和like和rlike对于限制字段长度的原理与区别

关于数据库字段长度的探索: length和like和rlike对于限制字段长度的原理与区别lengthlike、rlikelike的_下划线通配符rlike的正则表达式regexp、regexp_like的正则表达式 length和like和rlike对于限制字段长度的原理与区别 探索之前先简单介绍下: length函数可以返…