5. Autogen官网教程 (Tool Use)

简介

工具是agent可以调用的预定义函数。代理不必编写任意代码,而是可以调用工具来执行动作,比如搜索网络、执行计算、读取文件或调用远程API。因为你能够控制提供给代理的工具,所以你能控制代理能够执行的动作。

1. 定义计算器函数

首先,我们需要定义一个计算器函数,它接受两个整数和一个操作符,然后返回计算结果。

from typing import Annotated, LiteralOperator = Literal["+", "-", "*", "/"]def calculator(a: int, b: int, operator: Annotated[Operator, "operator"]) -> int:if operator == "+":return a + belif operator == "-":return a - belif operator == "*":return a * belif operator == "/":return int(a / b)else:raise ValueError("Invalid operator")

2. 创建对话代理

接下来,我们使用 autogen 库创建两个对话代理:一个助手代理和一个用户代理。

import osfrom autogen import ConversableAgentllm_config = { "config_list": [{ "model": "GLM-4-Plus", "api_key": "your api key", "base_url":"https://open.bigmodel.cn/api/paas/v4/"}] }# 创建助手代理
assistant = ConversableAgent(name="Assistant",system_message="You are a helpful AI assistant. ""You can help with simple calculations.""Remember returning 'TERMINATE' when the task is done. Just like this one, The result is ... TERMINATE",llm_config=llm_config,
)# 创建用户代理
user_proxy = ConversableAgent(name="User",llm_config=False,is_termination_msg=lambda msg: msg.get("content") is not None and "TERMINATE" in msg["content"],human_input_mode="NEVER",
)

3. 注册计算器工具

我们将计算器函数注册到助手代理和用户代理中。

# 注册计算器函数到助手代理
assistant.register_for_llm(name="calculator", description="A simple calculator")(calculator)# 注册计算器函数到用户代理
user_proxy.register_for_execution(name="calculator")(calculator)

另一种注册方式:

from autogen import register_function# Register the calculator function to the two agents.
register_function(calculator,caller=assistant,  # The assistant agent can suggest calls to the calculator.executor=user_proxy,  # The user proxy agent can execute the calculator calls.name="calculator",  # By default, the function name is used as the tool name.description="A simple calculator",  # A description of the tool.
)
d:\soft\anaconda\envs\autogen\Lib\site-packages\autogen\agentchat\conversable_agent.py:2585: UserWarning: Function 'calculator' is being overridden.warnings.warn(f"Function '{tool_sig['function']['name']}' is being overridden.", UserWarning)
d:\soft\anaconda\envs\autogen\Lib\site-packages\autogen\agentchat\conversable_agent.py:2504: UserWarning: Function 'calculator' is being overridden.warnings.warn(f"Function '{name}' is being overridden.", UserWarning)

4. 使用计算器工具

现在,我们可以使用用户代理发起对话,并询问助手代理进行计算。

chat_result = user_proxy.initiate_chat(assistant, message="What is (44232 + 13312 / (232 - 32)) * 5?")

助手代理会自动调用计算器工具,并返回计算结果。

[33mUser[0m (to Assistant):What is (44232 + 13312 / (232 - 32)) * 5?--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:15:31] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217975049170105444): calculator *****[0m
Arguments: 
{"a": 44232, "b": 13312, "operator": "+"}
[32m***********************************************************************[0m
[32m***** Suggested tool call (call_-9217975049170105443): calculator *****[0m
Arguments: 
{"a": 232, "b": 32, "operator": "-"}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217975049170105444) *****[0m
57544
[32m******************************************************************[0m--------------------------------------------------------------------------------
[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217975049170105443) *****[0m
200
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:15:31] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217971235238016078): calculator *****[0m
Arguments: 
{"a": 13312, "b": 200, "operator": "/"}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217971235238016078) *****[0m
66
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:15:33] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217971063439119888): calculator *****[0m
Arguments: 
{"a": 44232, "b": 66, "operator": "+"}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217971063439119888) *****[0m
44298
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:15:33] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217974465053955698): calculator *****[0m
Arguments: 
{"a": 44298, "b": 5, "operator": "*"}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217974465053955698) *****[0m
221490
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:15:34] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):The result is 221490. TERMINATE--------------------------------------------------------------------------------

Tool Schema

assistant.llm_config["tools"]
[{'type': 'function','function': {'description': 'A simple calculator','name': 'calculator','parameters': {'type': 'object','properties': {'a': {'type': 'integer', 'description': 'a'},'b': {'type': 'integer', 'description': 'b'},'operator': {'enum': ['+', '-', '*', '/'],'type': 'string','description': 'operator'}},'required': ['a', 'b', 'operator']}}}]

5. 改进计算器工具

为了更好地处理嵌套表达式,我们可以将计算器函数的输入参数改为一个包含所有信息的对象。

from pydantic import BaseModel, Fieldclass CalculatorInput(BaseModel):a: Annotated[int, Field(description="The first number.")]b: Annotated[int, Field(description="The second number.")]operator: Annotated[Operator, Field(description="The operator.")]def calculator(input: Annotated[CalculatorInput, "Input to the calculator."]) -> int:if input.operator == "+":return input.a + input.belif input.operator == "-":return input.a - input.belif input.operator == "*":return input.a * input.belif input.operator == "/":return int(input.a / input.b)else:raise ValueError("Invalid operator")

重新注册计算器工具,并再次发起对话进行测试。

assistant.register_for_llm(name="calculator", description="A calculator tool that accepts nested expression as input")(calculator
)
user_proxy.register_for_execution(name="calculator")(calculator)chat_result = user_proxy.initiate_chat(assistant, message="What is (1423 - 123) / 3 + (32 + 23) * 5?")

Tool Schema

assistant.llm_config["tools"]
[{'type': 'function','function': {'description': 'A calculator tool that accepts nested expression as input','name': 'calculator','parameters': {'type': 'object','properties': {'input': {'properties': {'a': {'description': 'The first number.','title': 'A','type': 'integer'},'b': {'description': 'The second number.','title': 'B','type': 'integer'},'operator': {'description': 'The operator.','enum': ['+', '-', '*', '/'],'title': 'Operator','type': 'string'}},'required': ['a', 'b', 'operator'],'title': 'CalculatorInput','type': 'object','description': 'Input to the calculator.'}},'required': ['input']}}}]

助手代理会根据嵌套表达式调用计算器工具,并返回最终的计算结果。

[33mUser[0m (to Assistant):What is (1423 - 123) / 3 + (32 + 23) * 5?--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:32] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217969001854210906): calculator *****[0m
Arguments: 
{"input": {"a": 1423, "b": 123, "operator": "-"}}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217969001854210906) *****[0m
1300
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:33] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217975289688536441): calculator *****[0m
Arguments: 
{"input": {"a": 1300, "b": 3, "operator": "/"}}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217975289688536441) *****[0m
433
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:34] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217971200878211977): calculator *****[0m
Arguments: 
{"input": {"a": 32, "b": 23, "operator": "+"}}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217971200878211977) *****[0m
55
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:35] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217974224535631038): calculator *****[0m
Arguments: 
{"input": {"a": 55, "b": 5, "operator": "*"}}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217974224535631038) *****[0m
275
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:36] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):[32m***** Suggested tool call (call_-9217975117889680342): calculator *****[0m
Arguments: 
{"input": {"a": 433, "b": 275, "operator": "+"}}
[32m***********************************************************************[0m--------------------------------------------------------------------------------
[35m
>>>>>>>> EXECUTING FUNCTION calculator...[0m
[33mUser[0m (to Assistant):[33mUser[0m (to Assistant):[32m***** Response from calling tool (call_-9217975117889680342) *****[0m
708
[32m******************************************************************[0m--------------------------------------------------------------------------------
[31m
>>>>>>>> USING AUTO REPLY...[0m
[autogen.oai.client: 11-25 13:28:37] {351} WARNING - Model GLM-4-Plus is not found. The cost will be 0. In your config_list, add field {"price" : [prompt_price_per_1k, completion_token_price_per_1k]} for customized pricing.
[33mAssistant[0m (to User):The result is 708. TERMINATE--------------------------------------------------------------------------------

总结

本教程展示了如何使用 Python 和 autogen 库创建一个简单的计算器工具,并将其集成到对话代理中。通过注册工具函数和发起对话,我们可以轻松地使用计算器工具进行计算。

参考链接:
https://microsoft.github.io/autogen/0.2/docs/tutorial/tool-use#tool-schema
如果有任何问题,欢迎在评论区提问。

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

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

相关文章

【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!

文章目录 修改哈希表模板参数迭代器HashTable 的默认成员函数HashTable 迭代器相关函数HashTable 的 Insert 函数HashTable 的 Find函数HashTable 的 Erase函数 封装 unordered_set封装 unordered_map测试 unordered_set 和 unordered_map 修改哈希表 我们基于链地址法实现的哈…

TEA加密逆向

IDA伪代码 do{if ( v15 )v17 v38; // x120x0->0x79168ba790, 输入字符串经过check1处理后字符串elsev17 v40;v18 (unsigned int *)&v17[v16]; // 0x78cbbd47fc add x12, x12, x8 ; x120x79168ba790->…

android 性能分析工具(03)Android Studio Profiler及常见性能图表解读

说明:主要解读Android Studio Profiler 和 常见性能图表。 Android Studio的Profiler工具是一套功能强大的性能分析工具集,它可以帮助开发者实时监控和分析应用的性能,包括CPU使用率、内存使用、网络活动和能耗等多个方面。以下是对Android …

【FPGA】Verilog:利用 4 个串行输入- 串行输出的 D 触发器实现 Shift_register

0x00 什么是寄存器 寄存器(Register)是顺序逻辑电路中使用的基本组成部分之一。寄存器用于在数字系统中存储和处理数据。寄存器通常由位(bit)构成,每个位可以存储一个0或1的值。通过寄存器,可以设计出计数器、加法器等各种数据处理电路。 0x01 寄存器的种类 基于 D 触发…

用 Python 从零开始创建神经网络(十):优化器(Optimizers)(持续更新中...)

优化器(Optimizers) 引言1. 随机梯度下降/Stochastic Gradient Descent (SGD)2. 学习率(Learning Rate)3. 学习率衰减(Learning Rate Decay)4. 带动量的随机梯度下降法(Stochastic Gradient Des…

鱼眼相机模型-MEI

参考文献: Single View Point Omnidirectional Camera Calibration from Planar Grids 1. 相机模型如下: // 相机坐标系下的点投影到畸变图像// 输入:相机坐标系点坐标cam 输出: 畸变图像素点坐标disPtvoid FisheyeCamAdapter::…

Spring Boot 实战:基于 Validation 注解实现分层数据校验与校验异常拦截器统一返回处理

1. 概述 本文介绍了在spring boot框架下,使用validation数据校验注解,针对不同请求链接的前端传参数据,进行分层视图对象的校验,并通过配置全局异常处理器捕获传参校验失败异常,自动返回校验出错的异常数据。 2. 依赖…

20241125复盘日记

昨日最票: 南京化纤 滨海能源 广博股份 日播时尚 众源新材 返利科技 六国化工 丰华股份 威领股份 凯撒旅业 华扬联众 泰坦股份 高乐股份高均线选股: 理邦仪器高乐股份日播时尚领湃科技威领股份资金最多的票: 资金攻击最多的票: …

STM32WB55RG开发(5)----监测STM32WB连接状态

STM32WB55RG开发----5.生成 BLE 程序连接手机APP 概述硬件准备视频教学样品申请源码下载参考程序选择芯片型号配置时钟源配置时钟树RTC时钟配置RF wakeup时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙LED配置设置工程信息工程文件设置参考文档SVCCTL_A…

游戏引擎学习第23天

实时代码编辑功能的回顾 当前实现的实时代码编辑功能已经取得了显著的成功,表现出强大的性能和即时反馈能力。该功能允许开发者在修改代码后几乎立即看到变化在运行中的程序中体现出来,极大提升了开发效率。尽管目前的演示内容较为简单,呈现…

ARM CCA机密计算安全模型之概述

安全之安全(security)博客目录导读 目录 1、CCA的要素 2、CCA平台 2.1 CCA 系统安全域 2.2 监控安全域 2.3 领域管理安全域 3、与系统平台安全服务的关系 3.1 安全配置 3.2 平台认证 1、CCA的要素 高层次的 CCA 架构如下图中概述。 在硬件层面,CCA 系统安全域包括可…

2024 java大厂面试复习总结(一)(持续更新)

10年java程序员,2024年正好35岁,2024年11月公司裁员,记录自己找工作时候复习的一些要点。 java基础 hashCode()与equals()的相关规定 如果两个对象相等,则hashcode一定也是相同的两个对象相等,对两个对象分别调用eq…

【R语言管理】Pycharm配置R语言及使用Anaconda管理R语言虚拟环境

目录 使用Anaconda创建R语言虚拟环境1. 安装Anaconda2. 创建R语言虚拟环境 Pycharm配置R语言1. 安装Pycharm2. R Language for IntelliJ插件 参考 使用Anaconda创建R语言虚拟环境 1. 安装Anaconda Anaconda的安装可参见另一博客-【Python环境管理工具】Anaconda安装及使用教程…

系统设计时应时刻考虑设计模式基础原则

目录 :star2:单一职责原则 (Single Responsibility Principle, SRP):star2:开放-封闭原则 (Open-Closed Principle, OCP):star2:依赖倒转原则 (Dependency Inversion Principle, DIP):star2:里氏代换原则 (Liskov Substitution Principle, LSP):star2:迪米特原则 (Law of Demet…

Spring 中的 ProxyFactory 创建代理对象

一、jdk 动态代理 和 cglib动态代理 简单介绍 1.jdk动态代理 public interface AService {public String serviceA(String param);public String serviceAA(String param); } public interface BService {public String serviceB(String param);public String serviceBB(Str…

FreeRTOS之链表源码分析

文章目录 前言一、结构体1、链表List_t2、链表项xLIST_ITEM3、头节点xMINI_LIST_ITEM4、链表示意图 二、函数分析1、初始化函数vListInitialise2、初始化链表项vListInitialiseItem3、链表尾部添加节点vListInsertEnd4、按序插入节点vListInsert5、删除节点uxListRemove 总结 前…

【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…

Matlab 深度学习工具箱 案例学习与测试————求二阶微分方程

clc clear% 定义输入变量 x linspace(0,2,10000);% 定义网络的层参数 inputSize 1; layers [featureInputLayer(inputSize,Normalization"none")fullyConnectedLayer(10)sigmoidLayerfullyConnectedLayer(1)sigmoidLayer]; % 创建网络 net dlnetwork(layers);% 训…

51单片机-独立按键与数码管联动

独立键盘和矩阵键盘检测原理及实现 键盘的分类:编码键盘和非编码键盘 键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如:计算机键盘。靠软件编程识别的称为非编码键盘;在单片机组成…

华为无线AC+AP组网实际应用小结

之前公司都是使用的H3C的交换机、防火墙以及无线AC和AP的,最近优化下无线网络,说新的设备用华为的,然后我是直到要部署的当天才知道用华为设备的,就很无语了,一点准备没有,以下为这次的实际操作记录吧&…