大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

news2025/5/11 5:30:05

大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

  • 前言
  • 本篇摘要
  • 11. 使用transformers.agents构建Gradio UI
    • 11.3 创建和使用工具Tools
      • 11.3.1 默认工具箱与load_tool
      • 11.3.2 创建新工具
      • 11.3.3 管理代理的工具箱toolbox
      • 11.3.4 使用工具集合ToolCollection
    • 参考文献

前言

本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebUI开发框架,它基于FastAPI和svelte,可以使用机器学习模型、python函数或API开发多功能界面,并可部署人工智能模型,是当前热门的非常易于展示机器学习大语言模型LLM及扩散模型DM的WebUI框架。
本系列文章分为五部分:Gradio介绍、HuggingFace资源与工具库、Gradio基础功能实战、Gradio与大模型融合实战和Gradio高级功能实战。第一部分Gradio介绍,包括三章内容:第一章先介绍Gradio的概念,包括详细技术架构、历史、应用场景、与其他框架Gradio/NiceGui/StreamLit/Dash/PyWebIO的区别,然后详细介绍了Gradio的安装与运行,安装包括Linux/Win/Mac三类系统安装,运行包括普通方式和热重载方式;第二章介绍Gradio的4种部署方式,包括本地部署launch()、huggingface托管、FastAPI挂载和Gradio-Lite浏览器集成;第三章介绍Gradio的三种Client,包括python客户端、javascript客户端和curl客户端,方便读者对Gradio整体把握。第二部分介绍著名网站Hugging Face的各类资源和工具库,因为Gradio演示中经常用到Hugging Face的models及某些场景需要部署在spaces,包括两章内容:第四章详解三类资源models/datasets/spaces的使用,第五章实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum实战。第三部分是Gradio基础功能实战,进入本系列文章的核心,包括四章内容:第六章讲解Gradio库的模块架构和环境变量,第七章讲解Gradio高级抽象界面类Interface,第八章讲解Gradio底层区块类Blocks,第九章讲解补充特性Additional Features。第四部分是Gradio与大模型融合的实战,包括三章内容:第十章讲解融合大模型的多模态聊天机器人组件Chatbot,第十一章讲解使用Agents和Tools智能代理工具构建UI,第十二章讲述将Gradio用于LLM Agents的Gradio Tools。第五部分详解Gradio高级功能,包括三章内容:第十三章讲述Discord Bot/Slack Bot/Website Widget部署,第十四章讲述数据科学与绘图Data Science And Plots,第十五章讲述数据流Streaming。
本系列文章讲解细致,涵盖Gradio大部分组件和功能,代码均可运行并附有大量运行截图,方便读者理解并应用到开发中,Gradio一定会成为每个技术人员实现各种奇思妙想的最称手工具。

本系列文章目录如下:

  1. 《Gradio全解1——Gradio简介》
  2. 《Gradio全解1——Gradio的安装与运行》
  3. 《Gradio全解2——Gradio的3+1种部署方式实践》
  4. 《Gradio全解2——浏览器集成Gradio-Lite》
  5. 《Gradio全解3——Gradio Client:python客户端》
  6. 《Gradio全解3——Gradio Client:javascript客户端》
  7. 《Gradio全解3——Gradio Client:curl客户端》
  8. 《Gradio全解4——剖析Hugging Face:详解三类资源models/datasets/spaces》
  9. 《Gradio全解5——剖析Hugging Face:实战六类工具库transformers/diffusers/datasets/PEFT/accelerate/optimum》
  10. 《Gradio全解6——Gradio库的模块架构和环境变量》
  11. 《Gradio全解7——Interface:高级抽象界面类(上)》
  12. 《Gradio全解7——Interface:高级抽象界面类(下)》
  13. 《Gradio全解8——Blocks:底层区块类(上)》
  14. 《Gradio全解8——Blocks:底层区块类(下)》
  15. 《Gradio全解9——Additional Features:补充特性(上)》
  16. 《Gradio全解9——Additional Features:补充特性(下)》
  17. 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人(1)》
  18. 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人(2)》
  19. 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人(3)》
  20. 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人(4)》
  21. 《Gradio全解10——Chatbot:融合大模型的多模态聊天机器人(5)》
  22. 《Gradio全解11——使用Agents和Tools智能代理工具构建UI(1)》
  23. 《Gradio全解11——使用Agents和Tools智能代理工具构建UI(2)》
  24. 《Gradio全解11——使用Agents和Tools智能代理工具构建UI(3)》
  25. 《Gradio全解11——使用Agents和Tools智能代理工具构建UI(4)》
  26. 《Gradio全解12——Gradio Tools:将Gradio用于LLM Agents》
  27. 《Gradio全解系列13——Discord Bot/Slack Bot/Website Widget部署》
  28. 《Gradio全解系列14——Data Science And Plots:数据科学与绘图》
  29. 《Gradio全解15——Streaming:数据流(上)》
  30. 《Gradio全解15——Streaming:数据流(下)》

本篇摘要

Gradio的组件Chatbot原生支持显示中间思考过程和工具使用情况(参考其参数metadata用法),这使得它非常适合为LLM Agent、思维链(Chain-of-Thought, CoT)或推理演示创建用户界面,本章将展示如何使用gr.Chatbot和gr.ChatInterface来显示思考过程和工具使用情况。
本章开始讲解四种代理和工具方式构建用户界面,其中前三种为代理方式,包括transformers.agents、langchain agents和langgraph,第四种使用显示思考的思维链工具Gemini 2.0 Flash Thinking API构建UI。因为Agents作为连接各大模型和工具的桥梁,是打通人工通用智能(AGI)的最后一公里,对从业者和人工智能行业都是至关重要的一环,所以本章将重点放在Agents智能体的原理及应用步骤拆解,然后才是通过Gradio构建UI。作者为此阅读了大量文献,以尽量阐述清楚智能代理,请读者不吝三连和评论,共同进步变强。

11. 使用transformers.agents构建Gradio UI

本章讲述如何使用transformers.agents构建Gradio UI,内容包括代理概念类型和构建、定义大模型引擎Engines、创建和使用Tools、系统提示、其它设置和使用transformers.agents构建Gradio UI。关于库transformers的介绍请参考Hugging Face章节中的六大工具库实战。

11.3 创建和使用工具Tools

工具是代理使用的原子函数,包括各种属性和执行方法。例如PythonInterpreterTool:它有一个名称、描述、输入描述、输出类型,以及一个执行操作的 call 方法。当代理初始化时,工具属性会被用来生成工具描述,并将其嵌入到代理的系统提示中,这让代理知道它可以使用哪些工具以及为什么使用这些工具。工具是代理的核心部分,工具的好坏和数量决定了代理能力的大小。本节将从默认工具箱、创建新工具、管理工具箱及使用工具集等方面讲解如何使用工具。

11.3.1 默认工具箱与load_tool

Transformers附带了一个默认工具箱,用于增强代理的功能。构建Agent时需要一个tools参数,它接受一个工具列表(List[Tools])——这个列表可以是空的,但可以在代理初始化时,通过定义可选参数add_base_tools=True,将默认工具箱添加到工具列表。默认工具箱中工具如下:

  • 文档问答:给定一个图像格式的文档(如PDF),回答关于该文档的问题(Donut);
  • 图像问答:给定一张图像,回答关于该图像的问题(VILT);
  • 语音转文本:给定一段人声录音,将语音转录为文本(Whisper);
  • 文本转语音:将文本转换为语音(SpeechT5);
  • 翻译:将给定的句子从源语言翻译为目标语言;
  • DuckDuckGo搜索*:使用DuckDuckGo浏览器执行网络搜索;
  • Python代码解释器:在安全环境中运行由LLM生成的Python代码。此工具仅在初始化 ReactJsonAgent时通过add_base_tools=True添加,因为基于代码的代理已经可以原生执行Python代码。

我们还可以通过调用load_tool()函数并指定要执行的任务来手动使用工具,示例代码如下:

from transformers import load_tool

tool = load_tool("text-to-speech")
audio = tool("This is a text to speech tool")

11.3.2 创建新工具

我们可以为Hugging Face默认工具未涵盖的用例创建自己的工具。以返回HF Hub上某个任务下载量最多的模型为例创建一个工具,步骤如下:

  1. 创建核心功能代码:
from huggingface_hub import list_models

task = "text-classification"

model = next(iter(list_models(filter=task, sort="downloads", direction=-1)))
print(model.id)
  1. 然后将核心代码封装为工具函数以快速将其转换为工具,操作时只需将其包装在一个函数中并添加工具装饰器@tool即可:
from transformers import tool

@tool
def model_download_tool(task: str) -> str:
    """
    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.

    Args:
        task: The task for which
    """
    model = next(iter(list_models(filter="text-classification", sort="downloads", direction=-1)))
    return model.id

此函数需要:

  • 清晰的函数名:名称通常描述工具的功能,由于代码返回某个任务下载量最多的模型,我们可以命名为model_download_tool;
  • 输入和输出的类型提示:输入的类型提示为函数的入参,输出类型提示为符号->后的类型,方便大模型调用;
  • 函数描述:描述函数的作用和返回说明,其中包括一个“Args:”部分,描述每个参数的作用(注意这里不需要类型指示,因为会从类型提示中提取)。所有这些将在初始化时自动嵌入到代理的系统提示中,因此请尽量使它们清晰易懂!
  1. 最后将工具直接添加到初始化代理的参数tools中。现在,我们可以创建一个代理,比如CodeAgent,并使用创建的工具model_download_tool,示例代码如下:
from transformers import CodeAgent, HfApiEngine

llm_engine = HfApiEngine(model="meta-llama/Meta-Llama-3-70B-Instruct")
agent = CodeAgent(tools=[model_download_tool], llm_engine=llm_engine)
agent.run(
    "Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub?"
)

运行后得到以下输出:

======== New task ========
Can you give me the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub?
==== Agent is executing the code below:
most_downloaded_model = model_download_tool(task="text-to-video")
print(f"The most downloaded model for the 'text-to-video' task is {most_downloaded_model}.")
==== The output: 
"The most downloaded model for the 'text-to-video' task is ByteDance/AnimateDiff-Lightning."

11.3.3 管理代理的工具箱toolbox

当我们已经初始化了一个带有工具箱的代理时,从头开始重新初始化以添加想使用的工具会很不方便。此时可以使用Transformers代理,通过toolbox中函数add_tool()和update_tool()来添加或替换工具来管理代理的工具箱。

让我们将上面定义的model_download_tool添加到一个仅使用默认工具箱初始化的现有代理中,代码如下:

from transformers import CodeAgent

agent = CodeAgent(tools=[], llm_engine=llm_engine, add_base_tools=True)
agent.toolbox.add_tool(model_download_tool)

现在我们可以同时利用新工具和之前的文本转语音工具:

agent.run(
    "Can you read out loud the name of the model that has the most downloads in the 'text-to-video' task on the Hugging Face Hub and return the audio?"
)

在为已经运行良好的代理添加工具时要小心,因为它可能会偏向选择你定义的工具,或者选择与原工具不同的工具。

我们还可以使用方法agent.toolbox.update_tool()替换代理工具箱中的现有工具,尤其是新工具一对一替换现有工具时将非常有用,因为代理已经知道如何执行该特定任务。替换时只需确保新工具遵循与被替换工具相同的API,或者调整系统提示模板以确保更新所有使用被替换工具的示例。

11.3.4 使用工具集合ToolCollection

我们还可以通过使用transformers中的对象ToolCollection来利用工具集合,并通过参数collection_slug指定想要使用的集合片,它们将作为列表传递给代理进行初始化,示例代码如下:

from transformers import ToolCollection, ReactCodeAgent

image_tool_collection = ToolCollection(collection_slug="huggingface-tools/diffusion-tools-6630bb19a942c2306a2cdb6f")
agent = ReactCodeAgent(tools=[*image_tool_collection.tools], add_base_tools=True)

agent.run("Please draw me a picture of rivers and lakes.")

为了加快启动速度,工具只有在被代理调用时才会加载。另外,实际运行时可能会报错:ImportError: cannot import name ‘cached_download’ from ‘huggingface_hub’. Did you mean: ‘hf_hub_download’?。原因可能是工具内部调用有问题,只能等官方更新。运行正常时,上面代码将会产生以下类似图片:
在这里插入图片描述

参考文献

  1. Gradio - guides - Chatbots
  2. License to Call: Introducing Transformers Agents 2.0
  3. Hugging Face - Transformers - Agents and tools

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

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

相关文章

路由基础 | 路由引入实验 | 不同路由引入方式存在的问题

注:本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息,可以…

网络原理-HTTP/HTTPS

文章目录 HTTPHTTP 是什么?理解“应用层协议”理解 HTTP 协议的⼯作过程HTTP 协议格式抓包⼯具的使用抓包⼯具的原理抓包结果协议格式总结 HTTP 请求(Request)认识 URLURL 的基本格式关于URL encode 认识“⽅法”(method&#xff…

SpringBoot启动失败之application.yml缩进没写好

修改前: spring前面空格了 报错输出:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the follow…

python爬虫系列课程2:如何下载Xpath Helper

python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…

CentOS建立ssh免密连接(含流程剖析)

一、场景举例(为啥需要免密连接) 1.服务集群间文件复制、通信 2.执行定时触发自动化脚本 3.本地连接远程服务器操作 服务器台数有很多,以上举例都是属于服务器之间的通信,如果每次执行上面操作都要输入账号密码岂不是效率太高了,容易被开…

自由学习记录(36)

Linux Linux 是一个开源的操作系统,其内核及大部分组件都遵循自由软件许可证(如 GPL),允许用户查看、修改和分发代码。这种开放性使得开发者和企业可以根据自己的需求定制系统​。 “Linux”严格来说只是指由Linus Torvalds最初开…

【python碎碎笔记】

1.交互模式和编辑器模式 2. 保存文件格式.py (表示python文件) 3.缩进是python的命! 4.内置函数 dir(__builtins__) [ArithmeticError, AssertionError, AttributeError, BaseException, BaseExceptionGroup, BlockingIOError, Broken…

【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动:nvidia-550(1)查询显卡ID(2)PCI ID Repository查询显卡型号(3&#xf…

python-leetcode 37.翻转二叉树

题目: 给定一颗二叉树的根节点root,翻转这棵二叉树,并返回根节点 方法一:递归 从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,那么我们只…

Vue 实现通过URL浏览器本地下载 PDF 和 图片

1、代码实现如下: 根据自己场景判断 PDF 和 图片,下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…

unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake

目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…

跟着李沐老师学习深度学习(十二)

循环神经网络 序列模型 序列数据 实际中很多数据是有时序结构的 比如:电影的评价随时间变化而变化 拿奖后评分上升,直到奖项被忘记看了很多好电影后,人们的期望变高季节性:贺岁片、暑期档导演、演员的负面报道导致评分变低 核心思想&#…

深入解析NoSQL数据库:从文档存储到图数据库的全场景实践

title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…

STM32物联网终端实战:从传感器到云端的低功耗设计

STM32物联网终端实战:从传感器到云端的低功耗设计 一、项目背景与挑战分析 1.1 物联网终端典型需求 (示意图说明:传感器数据采集 → 本地处理 → 无线传输 → 云端存储) 在工业物联网场景中,终端设备需满足以下核心需…

[实现Rpc] 客户端划分 | 框架设计 | common类的实现

目录 3. 客户端模块划分 3.1 Network模块 3.2 Protocol模块 3.3 Dispatcher模块 3.4 Requestor模块 3.5 RpcCaller模块 3.6 Publish-Subscribe模块 3.7 Registry-Discovery模块 3.8 Client模块 4. 框架设计 4.1 抽象层 4.2 具象层 4.3 业务层 ⭕4.4 整体设计框架…

【SFRA】笔记

GK_SFRA_INJECT(x) SFRA小信号注入函数,向控制环路注入一个小信号。如下图所示,当前程序,小信号注入是在固定占空比的基础叠加小信号,得到新的占空比,使用该占空比控制环路。 1.2 GK_SFRA_COLLECT(x, y) SFRA数据收集函数,将小信号注入环路后,该函数收集环路的数据,以…

基于Python的Diango旅游数据分析推荐系统设计与实现+毕业论文(15000字)

基于Python的Diango旅游数据分析推荐系系统设计与实现毕业论文指导搭建视频,带爬虫 配套论文1w5字 可定制到某个省份,加40 基于用户的协同过滤算法 有后台管理 2w多数据集 可配套指导搭建视频,加20 旅游数据分析推荐系统采用了Python语…

国自然青年基金|针对罕见神经上皮肿瘤的小样本影像深度数据挖掘关键技术研究|基金申请·25-02-15

小罗碎碎念 今天和大家分享一个国自然青年基金项目,执行年限为2021.01~2023.12,直接费用为24万元。 该项目聚焦罕见神经上皮肿瘤小样本影像深度数据挖掘技术,致力于攻克小样本数据和临床经验缺乏带来的难题。项目围绕影像规范化、…

Linux 网络安全技巧

网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linux的源码是开放的,有成千上万的志愿者会立刻发现并修补它。本文旨在介绍用来增强你的…