smolagents学习笔记系列(五)Tools-in-depth-guide
这篇文章锁定官网教程中的 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 Toolclass 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_modelsmodel = next(iter(list_models(filter=task, sort="downloads", direction=-1)))return model.idmodel_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 cv2image_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 需要 BGRcv2.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 Toolimage_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:
- 登录Serp官网:https://serpapi.com/users/welcome;
- 绑定/注册账号、在邮箱中验证、绑定中国区手机号并获得验证码;
- 白嫖一个免费的API;


在获得 Serp API Key 之后需要在环境变量中注册这个Key值:
$ export SERPAPI_API_KEY="你的Serp API Key"
对示例代码进行稍微修改,添加model对象后运行代码:
from smolagents import Tool, CodeAgent, HfApiModel
from langchain.agents import load_toolsmodel = 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_toolmodel_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中其实还介绍了使用 slug 和 mcp 的方式调用工具,但这两种方式我没有用过,如果后续需要的话我会进行补充。
相关文章:
smolagents学习笔记系列(五)Tools-in-depth-guide
这篇文章锁定官网教程中的 Tools-in-depth-guide 章节,主要介绍了如何详细构造自己的Tools,在之前的博文 smolagents学习笔记系列(二)Agents - Guided tour 中我初步介绍了下如何将一个函数或一个类声明成 smolagents 的工具&…...
前端面试真题 2025最新版
文章目录 写在前文CSS怪异盒模型JS闭包闭包的形成闭包注意点 CSS选择器及优先级优先级 说说flex布局及相关属性Flex 容器相关属性:Flex 项目相关属性 响应式布局如何实现是否用过tailwindcss,有哪些好处好处缺点 说说对象的 prototype属性及原型说说 pro…...
面试八股文--数据库基础知识总结(1)
1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…...
10. docker nginx官方镜像使用方法
本文介绍docker nginx官方镜像使用方法,因为第一次用,在加上对docker也不是很熟,中间踩了一些坑,为了避免下一次用又踩坑,因此记录如下,也希望能够帮到其它小伙伴。 官方镜像页面:https://hub.d…...
[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例
关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中,unserialize() 接收的值可控。 0x01:环境搭建 这里笔者是使用 PhpStudy 搭建的环…...
es-head(es库-谷歌浏览器插件)
1.下载es-head插件压缩包,并解压缩 2.谷歌浏览器添加插件 3.使用...
第二十:【路由的props配置】
作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件) {name:xiang,path:detail/:id/:title/:content,component:Detail, 第一种方法:// props的对象写法,作用:把对象中的每一组key-valu…...
Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面
引言 在移动端H5开发中,全屏滚动效果因其沉浸式体验而广受欢迎。如何快速实现带有动态加载动画的全屏滚动页面?本文将手把手教你使用 Vue 2、全屏滚动插件 fullpage-vue 和动画库 animate.css 3.5.1,打造一个高效且视觉冲击力强的H5页面。通…...
AF3 DataPipeline类process_pdb 方法解读
DataPipeline 类中的 process_pdb 方法用于从 PDB 文件中生成特定蛋白质链的特征,作为 AlphaFold3 预测的输入。它的流程与 process_mmcif 类似,但输入来源是 PDB 文件而非 MmcifObject。 源代码: def process_pdb(self,pdb_path: str,alignment_dir: str,is_distillation:…...
抓包工具 wireshark
1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...
OpenBMC:BmcWeb app获取socket
OpenBMC:BmcWeb app.run-CSDN博客 app对象在run函数中调用了setupSocket() static std::vector<Acceptor> setupSocket() {std::vector<Acceptor> acceptors;char** names = nullptr;int listenFdCount = sd_listen_fds_with_names(0, &names);BMCWEB_LOG_DE…...
《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进
以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析,并增加数据探索环节,同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图,方便对比。 《深度学习实战》第…...
nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典
向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 1. 项目结构 首先,创建一个项目目录,结构如下࿱…...
《深度剖析Linux 系统 Shell 核心用法与原理_666》
1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件,并通过grep查找包含特定字符串的文件…...
索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)
索提诺比率(Sortino Ratio):更精准的风险调整收益指标 📉📊 📌 什么是索提诺比率? 在投资分析中,我们通常使用 夏普比率(Sharpe Ratio) 来衡量风险调整后的…...
minio作为K8S后端存储
docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...
一周学会Flask3 Python Web开发-Jinja2模板访问对象
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象,如果如何来访问呢? 我们看下下面示例: 定义一个Student类 cla…...
RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看
RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...
第25周JavaSpringboot实战-电商项目 4.商品分类管理
商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点: 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制(从父级向子级递归) 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...
C语言--正序、逆序输出为奇数的位。
题目: 采用正序和逆序分别输出为奇数的位。例如输入12345,正序输出135,逆序输出531 代码: #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
