smolagents学习笔记系列(五)Tools-in-depth-guide

news2025/2/26 19:36:34

这篇文章锁定官网教程中的 Tools-in-depth-guide 章节,主要介绍了如何详细构造自己的Tools,在之前的博文 smolagents学习笔记系列(二)Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具,那么这篇文章将对这部分内容进一步深入。

  • 官网链接:https://huggingface.co/docs/smolagents/v1.9.2/en/tutorials/tools

What is a tool, and how to build one?

Tool是Agent系统在LLM中使用最广泛的东西,根据smolagents框架的要求,想要使用tool必须对以下内容进行定义:

  • name:工具名,最好是能直接表述工具功能的名字;
  • description:功能描述,对这个工具功能的详细表述;
  • input types and descriptions:输入类型与描述;
  • output type:输出类型;

官网提供了一个将类包装成工具的示例,如果是想通过类的方式定义工具的话需要继承smolagents Tool,并且要重写 forward 这个函数,目前可以粗略地认为这个函数就是最终执行的函数。该工具的作用是找到 HuggingFace 仓库中以 downloads 为分类指定 task 功能的模型,返回最受欢迎的模型信息。

但是直接运行看不到任何结果,需要在后面加一句输出内容,这里我让这个工具对象执行了 text-classification

from smolagents import Tool

class HFModelDOwnloadsTool(Tool):
    name = "model_download_counter"
    description = """
    This is a tool that returns the most downloaded model of a given task on the Hugging Face Hub.
    It returns the name of the checkpoint."""
    inputs = {
        "task": {
            "type": "string",
            "description": "the task category (such as text-classification, depth-estimation, etc)",
        }
    }
    output_type = "string"

    def forward(self, task:str):
        from huggingface_hub import list_models
        model = next(iter(list_models(filter=task, sort="downloads", direction=-1)))
        return model.id
    
model_download_tool = HFModelDOwnloadsTool()

print(model_download_tool.forward("text-classification"))

运行:

$ (LLM) ~/Desktop/LLM $ python demo.py 
cross-encoder/ms-marco-MiniLM-L-6-v2

如果你在运行时报错下面的错:

huggingface_hub.errors.HfHubHTTPError: 401 Client Error: Unauthorized for url: https://huggingface.co/api/models?filter=text-classification&sort=downloads&direction=-1

需要在bash中设置环境变量:

$ export HF_TOKEN="你之前的token码"

Import a Space as a tool

smolagents提供了另一种方式允许你通过 Tool.from_space 这个函数从HuggingFace Hub中直接导入开源的工具,官网的示例用了 FLUX.1-dev 作为示例,如果你直接运行仍然是无法运行的,这个时候需要通过你的 HuggingFace 账户登录 FLUX.1-dev 的仓库:https://huggingface.co/black-forest-labs/FLUX.1-dev

【注意】:如果你没有登录账号,下图中红框是不会出现的。

登录之后会有这么一个页面,点击 Agree and access repository 按钮授权使用。
在这里插入图片描述

对示例代码进行修改以显示生成的图像,并且需要将 FLUX.1-schnell 改为 FLUX.1-dev

from smolagents import Tool
from PIL import Image
import numpy as np
import cv2

image_generation_tool = Tool.from_space(
    "black-forest-labs/FLUX.1-dev",
    name="image_generator",
    description="Generate an image from a prompt",
    api_name="/infer"
)

response = image_generation_tool("A sunny beach")
print(response)

image = Image.open(response)
image = np.array(image)
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)  # PIL 是 RGB,OpenCV 需要 BGR

cv2.imshow("Generated Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面代码中的 response 返回的是你 本地计算机的一个路径,比如我的是下面内容从 /private/var 开始的一长串内容。

运行:

$ python demo
Loaded as API: https://black-forest-labs-flux-1-dev.hf.space ✔
/private/var/folders/zk/vtzyjvmx7f16zrstmmd3t27w0000gn/T/gradio/9026dfa2d826f1dd7a9c5089e051f2bf775bd3e972b298c9d1801a57f2b68981/image.webp

在这里插入图片描述

【注意】:这个可能需要多运行几次,因为涉及到远程GPU资源,如果申请GPU超时了就会返回错误,但是如果你运行次数太多则会报下面的错误提示你GPU使用次数超限,需要你升级到Pro账户。

gradio_client.exceptions.AppError: The upstream Gradio app has raised an exception: You have exceeded your free GPU quota (75s requested vs. 73s left). <a style="white-space: nowrap;text-underline-offset: 2px;color: var(--body-text-color)" href="https://huggingface.co/settings/billing/subscription">Subscribe to Pro</a> to get 5x more daily usage quota.

【Tips】:如果你想直接使用这个图像生成工具,可以在浏览器中直接访问网站:https://black-forest-labs-flux-1-dev.hf.space,这个是 FLUX.1 提供的一个网页,在输入你的prompt后点击 run 即可根据你的提示词生成图像,这个过程是逐步得到的,因此刚开始你会看到一篇马赛克,稍微等待一小会儿即可得到最终结果。

在这里插入图片描述

之后官网提到了可以将这个工具作为Agent的输入,先让 Qwen2.5-Coder 对提示词进行改进,然后再调用 FLUX.1 生成图像。

from smolagents import CodeAgent, HfApiModel
from smolagents import Tool

image_generation_tool = Tool.from_space(
    "black-forest-labs/FLUX.1-schnell",
    name="image_generator",
    description="Generate an image from a prompt"
)

model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct")
agent = CodeAgent(tools=[image_generation_tool], model=model)

response = agent.run(
    "Improve this prompt, then generate an image of it.", additional_args={'user_prompt': 'A rabbit wearing a space suit'}
)

print(response)

【注】因为我当天的GPU资源用完了,后续恢复后我会补上相应的内容。


Use LangChain tools

在使用 LangChain 这个工具之前需要安装一些依赖:

$ pip install -U langchain-community
$ pip install langchain google-search-results -q

但是很遗憾 ,官网的demo仍然无法直接运行,因为你需要申请一个 Serp API Key

  1. 登录Serp官网:https://serpapi.com/users/welcome;
  2. 绑定/注册账号、在邮箱中验证、绑定中国区手机号并获得验证码;
  3. 白嫖一个免费的API

在这里插入图片描述
在这里插入图片描述

在获得 Serp API Key 之后需要在环境变量中注册这个Key值:

$ export SERPAPI_API_KEY="你的Serp API Key"

对示例代码进行稍微修改,添加model对象后运行代码:

from smolagents import Tool, CodeAgent, HfApiModel
from langchain.agents import load_tools

model = HfApiModel()

search_tool = Tool.from_langchain(load_tools(["serpapi"])[0])

agent = CodeAgent(tools=[search_tool], model=model)

agent.run("How many more blocks (also denoted as layers) are in BERT base encoder compared to the encoder from the architecture proposed in Attention is All You Need?")

运行结果,和之前文章中提到的一样,在默认状态下调用的是 Qwen/Qwen2.5-Coder-32B-Instruct 模型:
在这里插入图片描述


Manage your agent’s toolbox

官方提供了一个基于 HuggingFace Hub 的工具箱管理管理功能,但这个功能需要在你已经将工具上传到 Hub 的 Spaces 前提下使用,对于大多数人而言不需要将自己写的工具上传上去,因此这里就放上示例,我也没有运行测试:

from smolagents import HfApiModel
from smolagents import CodeAgent, Tool, load_tool

model_download_tool = load_tool(
    "{your_username}/hf-model-downloads",
    trust_remote_code=True
)

model = HfApiModel("Qwen/Qwen2.5-Coder-32B-Instruct")

agent = CodeAgent(tools=[], model=model, add_base_tools=True)
agent.tools[model_download_tool.name] = model_download_tool

如果你对大家开源的 Tools 感兴趣,可以进入 Spaces 网页: https://huggingface.co/spaces 去查看有哪些可用的工具,网页向下拉就可以看到上面我们使用的 FLUX.1-dev 这个工具,不同的工具有不同的授权和使用方式,需要自己去阅读感兴趣的工具如何使用。
在这里插入图片描述


官方demo中其实还介绍了使用 slugmcp 的方式调用工具,但这两种方式我没有用过,如果后续需要的话我会进行补充。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

axios几种请求类型的格式

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;广泛用于浏览器和 Node.js 中发送 HTTP 请求。它支持多种请求格式&#xff0c;包括 GET、POST、PUT、DELETE 等。也叫RESTful 目录 一、axios几种请求类型的格式 1、get请求 2、post请求 3、put请求 4、delete请求 二…

架构设计系列(六):缓存

一、概述 在应用对外提供服务的时候其稳定性&#xff0c;性能会受到诸多因素的影响。缓存的作用是将频繁访问的数据缓存起来&#xff0c;避免资源重复消耗&#xff0c;提升系统服务的吞吐量。 二、缓存的应用场景 2.1 客户端 HTTP响应可以被浏览器缓存。我们第一次通过HTTP请…

个人电脑小参数GPT预训练、SFT、RLHF、蒸馏、CoT、Lora过程实践——MiniMind图文版教程

最近看到Github上开源了一个小模型的repo&#xff0c;是真正拉低LLM的学习门槛&#xff0c;让每个人都能从理解每一行代码&#xff0c; 从零开始亲手训练一个极小的语言模型。开源地址&#xff1a; GitHub - jingyaogong/minimind: &#x1f680;&#x1f680; 「大模型」2小时…

格式工厂 FormatFactory v5.18.便携版 ——多功能媒体文件转换工具

格式工厂 FormatFactory v5.18.便携版 ——多功能媒体文件转换工具 功能&#xff1a;视频 音频 图片 文档PDF格式 各种转换&#xff0c;同格式调整压缩比例&#xff0c;调整大小 特色&#xff1a;果风图标 好看; 支持多任务队列&#xff0c;完成自动关机 下载地址&#xff1…

KafkaTool

Offset Explorer 第一次打开需要配置kafka相关配置连接 随便先启动一个Kafka(先启动zookeeper) 设置key value 记得刷新

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件&#xff0c;他可以很好的节省连接数据库的时间开销&#xff1b;本文基使用C实现了一个简单的数据库连接池&#xff0c;代码量只有400行只有&#xff0c;但是压力测试效果很好&#xff1b;欢迎收藏 关注&#xff0c;本人将会…

国产编辑器EverEdit - 洞察秋毫!文件比较功能!

1 文件比较 1.1 应用场景 项目开发过程中&#xff0c;可能不同的部分会由不同的人在负责&#xff0c;存在一个文件多人编辑的情况&#xff0c;用户需要寻找差异&#xff0c;并将文档进行合并&#xff0c;比较专业的文本比较工具为BeyondCompare&#xff0c;WinMerge等。   如…

QARepVGG--含demo实现

文章目录 前言引入Demo实现总结 前言 在上一篇博文RepVGG中&#xff0c;介绍了RepVGG网络。RepVGG 作为一种高效的重参数化网络&#xff0c;通过训练时的多分支结构&#xff08;3x3卷积、1x1卷积、恒等映射&#xff09;和推理时的单分支合并&#xff0c;在精度与速度间取得了优…

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

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

Transformer LLaMA

一、Transformer Transformer&#xff1a;一种基于自注意力机制的神经网络结构&#xff0c;通过并行计算和多层特征抽取&#xff0c;有效解决了长序列依赖问题&#xff0c;实现了在自然语言处理等领域的突破。 Transformer 架构摆脱了RNNs&#xff0c;完全依靠 Attention的优…

Qt学习 网络编程 TPC通信

一 基本网络端口 1 网络编程基本概念 通讯方式&#xff1a;信息的通讯时通过网络来进行&#xff0c;通讯方式有两种&#xff0c;TCP和UDP通信&#xff0c;TCP通讯是专用通道&#xff0c;指定某个信息只能走某个通道&#xff0c;UDP则是非专用通道&#xff0c;比如一个车队&am…

ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析

一、基础知识 本篇我们使用 BOOT 按键来学习一下 GPIO 功能&#xff0c;首先补充一下相关术语介绍。 1、GPIO&#xff08;General Purpose Input/Output&#xff09; GPIO 是微控制器上的通用引脚&#xff0c;既可以作为输入&#xff08;读取外部信号&#xff09;&#xff0…

ssh配置 远程控制 远程协作 github本地配置

0.设备版本 windows11 ubuntu24.0.4 1.1 在 Linux 上启用 SSH 服务 首先&#xff0c;确保 Linux 计算机上安装并启用了 SSH 服务。 安装和启动 OpenSSH 服务&#xff08;如果未安装&#xff09; # 在终端安装 OpenSSH 服务&#xff08;如果尚未安装&#xff09; sudo apt …

C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)

文章目录 1.继承的概念和定义2.基类与派生类之间的转换3.继承中的作用域4.派生类的默认成员函数5.实现一个不能被继承的类6.继承与友元7.继承与静态成员8.多继承和菱形继承问题8.1 继承分类及菱形继承8.2 虚继承 1.继承的概念和定义 概念&#xff1a; 继承(inheritance)机制是⾯…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书&#xff0c;部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下&#xff1a; ①访问华为培训与认证网站 打开浏览器&#xff0c;登录华为培训与认证官方网站 ②登录个人账号 在网站首页&#xff0c;点…

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中&#xff0c;不可避免的需要遇到去与H5交互&#xff0c;甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息&#xff1a; 直接在浏览器地址栏输入 &#xff1a; chrome://inspect/#devices 直接连接手机usb,打开开发者模式…

贪心算法精品题

1.找钱问题 本题的贪心策略在于我们希望就可能的保留作用大的5元 class Solution { public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch 5) _map[ch];else if(ch 10){if(_map[5] 0) return false;else{_m…

WEB1~6通杀

##解题思路 这六道题&#xff0c;通杀了&#xff0c;只因为是PHP的特性 来&#xff0c;看web6&#xff0c;过滤最复杂的正则&#xff0c;而且不能解析成大于999的值&#xff0c;但是&#xff0c;php是弱类型的语言&#xff0c;我只要输入任意字符数字&#xff0c;最终值就为0&…

孜然单授权系统V2.0PHP授权系统

孜然单授权V1.0系统&#xff0c;延续了2022年开发的孜然多应用授权系统V2.0 变更&#xff1a;多应用变单系统&#xff0c;去除没用的垃圾代码&#xff0c;从0开发&#xff0c;去除了一些没用的功能 完善了开发文档&#xff0c;之前那套是我写着玩的屎山代码&#xff0c;V1.0将展…