AutoGen :打造专属智能体 (Custom Agents)

  • 👉👉👉本人承接各类AI相关应用开发项目(包括但不限于大模型微调、RAG、AI智能体、NLP、机器学习算法、运筹优化算法、数据分析EDA等) !!!
  • 👉👉👉 有意愿请私信!!!

AutoGen 的 AgentChat 模块为我们提供了内置预设的智能体,它们在不同场景下能展现出各种能力。 但是,在现实应用中,我们经常需要更具个性化和定制化的智能体行为。 幸运的是 AutoGen 允许我们创建自定义智能体,以满足特定的需求。

本文将带你深入了解如何打造专属的自定义智能体,并通过示例代码,让你能够充分利用AutoGen的灵活性和可扩展性。

核心要点:继承 BaseChatAgent

在 AutoGen 中,所有智能体都继承自 BaseChatAgent 类。 因此,要创建一个自定义智能体,你需要继承这个基类并实现以下抽象方法和属性:

  • on_messages(): 这是定义智能体如何响应消息的核心方法。 你需要在此方法中编写智能体的核心逻辑,包括接收消息、处理信息、调用工具、生成回复等。它需要返回一个Response对象。

  • on_reset(): 此方法用于重置智能体的内部状态。 在对话开始或需要清除历史信息时,可以调用此方法。

  • produced_message_types: 这是一个属性,用于声明智能体可以生成的消息类型。 你需要在此指定你的智能体可能产生的 ChatMessage 类型。

除了上述必需的成员,你还可以选择性地实现  on_messages_stream() 方法来实现流式响应,如果未实现此方法,智能体将使用调用on_messages_stream() 该on_messages()方法的默认实现,并在响应中生成所有消息,从而提供更流畅的用户体验。

示例一:CountDownAgent (倒计时智能体)

首先,让我们创建一个简单的智能体,它可以从指定的数字倒数到零。

from typing import AsyncGenerator, List, Sequence
from autogen_agentchat.agents import BaseChatAgent
from autogen_agentchat.base import Response
from autogen_agentchat.messages import AgentEvent, ChatMessage, TextMessage
from autogen_core import CancellationTokenclass CountDownAgent(BaseChatAgent):def __init__(self, name: str, count: int = 3):super().__init__(name, "A simple agent that counts down.")self._count = count@propertydef produced_message_types(self) -> Sequence[type[ChatMessage]]:return (TextMessage,)async def on_messages(self, messages: Sequence[ChatMessage], cancellation_token: CancellationToken) -> Response:# 调用 on_messages_stream。response: Response | None = Noneasync for message in self.on_messages_stream(messages, cancellation_token):if isinstance(message, Response):response = messageassert response is not Nonereturn responseasync def on_messages_stream(self, messages: Sequence[ChatMessage], cancellation_token: CancellationToken) -> AsyncGenerator[Agen

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

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

相关文章

CentOS 7配置YOLOv8环境指南:无显卡版教程 - 幽络源

看本篇教程前请确保Centos7系统已安装配置Python3环境,参考幽络源上一篇文章>CentOS 7安装Python3环境详细指南:从源码编译到PIP配置 步骤1:建立python虚拟环境项目 在home目录下执行如下命令新建虚拟环境python项目 python3 -m venv y…

Confluence知识库管理系统安装步骤(Windows版本)

我们介绍的是安装7.15.1以下版本的安装方式,8.0以上的安装方式暂不支持。 如果你要安装8.0以上的版本,请参考本文末尾的附录中提供的相关网址。 首先我们安装之前需要准备安装所需文件以上文件可以在这里下载:【https://download.csdn.net/download/Elegant_Kevin/90412040】…

Uniapp 开发中遇到的坑与注意事项:全面指南

文章目录 1. 引言Uniapp 简介开发中的常见问题本文的目标与结构 2. 环境配置与项目初始化环境配置问题解决方案 项目初始化注意事项解决方案 常见错误与解决方案 3. 页面与组件开发页面生命周期注意事项示例代码 组件通信与复用注意事项示例代码 样式与布局问题注意事项示例代码…

学习笔记--电磁兼容性EMC

一、基本概念 电磁兼容性(Electromagnetic Compatibility,EMC)是电子电气设备在特定电磁环境中正常工作的能力,同时不会对其他设备产生不可接受的电磁干扰。其核心目标是确保设备在共享的电磁环境中既能抵抗干扰,又能避…

Unity百游修炼(2)——Brick_Breaker详细制作全流程

一、项目简介 Brick Breaker 是一款经典的打砖块游戏,本次案例将使用 Unity 引擎来实现该游戏的核心功能。 游戏画面如下: Brick_ breaker 二、项目结构概览和前期准备 (1)在 Unity 项目视图中,我们可以看到几个重要…

Java基础常见的面试题(易错!!)

面试题一:为什么 Java 不支持多继承 Java 不支持多继承主要是为避免 “菱形继承问题”(又称 “钻石问题”),即一个子类从多个父类继承到同名方法或属性时,编译器无法确定该调用哪个父类的成员。同时,多继承…

算法题(77):数组中的第k个最大元素

审题: 需要我们在时间复杂度O(n)的前提下找到数组中第k个最大元素 思路: 方法一:建堆实现 首先写一个dowmset函数,实现对第i个索引位置的向下调整。然后创建build函数,利用dowmset实现向下调整建堆,再根据k…

PCIe学习笔记1:PCIe体系架构——PCIe简介

目录 一、PCIe简介 1.1 串行传输 1.1.1 相对于并行传输的优化 1.1.2 带宽计算 1.1.3 差分信号传输 1.1.4 基于数据包的传输协议 1.2 PCIe的系统拓扑结构 1.2.1 根组件(Root Complex,RC) 1.2.2 上行端口与下行端口 1.2.3 交换机与桥 …

一天记20个忘10个之4:man

据说,给你一个支点,你就能撬起地球。 那好,今天,我给你一个 man,如果你能完成记20个忘10个的任务,你就真的很 man 了。 零、热身 young manold manmedical man 一、man之复合词 1.1 man复合词 chairm…

SpringBoot之自定义简单的注解和AOP

1.引入依赖 <!-- AOP依赖--> <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.8</version> </dependency>2.自定义一个注解 package com.example.springbootdemo3.an…

利用开源小智AI制作桌宠机器狗

本文主要介绍如何利用开源小智AI制作桌宠机器狗 1 源码下载 首先下载小智源码,下载地址, 下载源码后,使用vsCode打开,需要在vscode上安装esp-idf,安装方式请自己解决 2 源码修改 2.1添加机器狗控制代码 在目录main/iot/things下添加dog.cc文件,内容如下; #include…

深入理解IP子网掩码子网划分{作用} 以及 不同网段之间的ping的原理 以及子网掩码的区域划分

目录 子网掩码详解 子网掩码定义 子网掩码进一步解释 子网掩码的作用 计算总结表 子网掩码计算 子网掩码对应IP数量计算 判断IP是否在同一网段 1. 计算步骤 2. 示例 3. 关键点 总结 不同网段通信原理与Ping流程 1. 同网段通信 2. 跨网段通信 网段计算示例 3. P…

利用python和gpt写一个conda环境可视化管理工具

最近在学习python&#xff0c;由于不同的版本之间的差距较大&#xff0c;如果是用环境变量来配置python的话&#xff0c;会需要来回改&#xff0c;于是请教得知可以用conda来管理&#xff0c;但是conda在管理的时候老是要输入命令&#xff0c;感觉也很烦&#xff0c;于是让gpt帮…

Linux内核,slub分配流程

我们根据上面的流程图&#xff0c;依次看下slub是如何分配的 首先从kmem_cache_cpu中分配&#xff0c;如果没有则从kmem_cache_cpu的partial链表分配&#xff0c;如果还没有则从kmem_cache_node中分配&#xff0c;如果kmem_cache_node中也没有&#xff0c;则需要向伙伴系统申请…

使用Windbg调试目标进程排查C++软件异常的一般步骤与要点分享

目录 1、概述 2、将Windbg附加到已经启动起来的目标进程上&#xff0c;或者用Windbg启动目标程序 2.1、将Windbg附加到已经启动起来的目标进程上 2.2、用Windbg启动目标程序 2.3、Windbg关联到目标进程上会中断下来&#xff0c;输入g命令将该中断跳过去 3、分析实例说明 …

51单片机测试题AI作答测试(DeepSeek Kimi)

单片机测试题 DeepSeek Kimi 单项选择题 &#xff08;10道&#xff09; 6题8题判断有误 6题判断有误 智谱清言6题靠谱&#xff0c;但仔细斟酌&#xff0c;题目出的貌似有问题&#xff0c;详见 下方。 填空题 &#xff08;9道&#xff09; 脉宽调制&#xff08;Pulse …

模版语法vscode

这里注意&#xff1a;<template></template>里面只能写一个根标签&#xff0c;其他在嵌套&#xff1a; <script > export default {data(){return{tthtml:"<a hrefhttps://itbaizhan.com>百战程序员</a>"}} } </script><tem…

洛谷B3637 最长上升子序

B3637 最长上升子序列 - 洛谷 代码区&#xff1a; #include<bits/stdc.h>using namespace std;int main(){int n;cin >> n;int arry[n],dp[n];for(int i0;i<n;i){cin >>arry[i];dp[i]1;}/*在 i 之前可能存在多个 j 满足 arry[j] < arry[i]&#xff0c…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的&#xff0c;因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化&#xff0c;就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前&#xff0c;Java 是没有泛型功能的&#xff0c;…

Day 49 卡玛笔记

这是基于代码随想录的每日打卡 1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变…