Toolformer and Tool Learning(LLMs如何使用工具)
大模型的能力让学术和工业界都对通用人工智能的未来充满幻想,在前一篇博文中已经粗略介绍,
- Augmented Language Models(增强语言模型)
ALM的两大思路是推理和工具,本篇博文整理两篇关于Toolformer或Tool Learning的论文,即如何允许模型使用多种工具如日历、计算器、搜索系统等等来帮助提升LLMs的能力。
Toolformer: Language Models Can Teach Themselves to Use Tools
来自Meta AI。LLMs已经展现出十分出色的zero-shot和few-shot能力,特别是在规模上,但它们在基本功能方面也遇到了困难,比如算术、最新信息、幻觉,但在这些方面,显然更简单、更小的模型表现更好。 因此,一个简单的方法就是让它们能够使用外部工具,比如搜索引擎、计算器或日历(如下图所示,该模型自动决定调用不同的api实验任务,从上到下依次是:问答系统、计算器、翻译和维基百科搜索)。然而现有的方法要么依赖于大量的人工注释或将工具的使用限制为仅针对特定任务的,这阻碍了其在LLMs中更广泛地使用。
因此作者们引入了Toolformer,一个被训练以学习使用工具的模型,它有两个特点:
- 自监督。不仅仅与大量的人工注释成本有关,还因为人类认为有用的东西可能与模型认为有用的东西不同。
- 一般性。LLMs应该能够自己决定何时以及如何使用哪个工具,这可以得到一个更通用的工具。
为了使LLMS能够通过API调用来使用不同的工具,每个API的输入和输出都需要被表示为文本序列,从而可以将API调用无缝插入到任何给定的文本中,其中插入时使用特殊的令牌来标记即可(“”和“→” )。 e ( c ) = < A P I > a c ( i c ) < / A P I > e(c)=<API>a_c(i_c)</API> e(c)=<API>ac(ic)</API> e ( c , r ) = < A P I > a c ( i c ) → r < / A P I > e(c,r)=<API>a_c(i_c)→ r</API> e(c,r)=<API>ac(ic)→r</API>其中API调用是一个元组 c = ( a c , i c ) c = (a_c, i_c) c=(ac,ic),其中 a c a_c ac是API的名称, i c i_c ic是相应的输入,工具的结果为r,其可以包含在输入也可以不包含,当模型生成出→时,根据调用API得到结果r,从而借助外部工具的帮助继续生成。
怎样生成一个这样的数据集来对语言模型进行微调?人工标注太高昂,因此自监督的方式即利用LLMs的in-context learning能力是非常重要的。因此通过设计prompt和关于调用API的few-shot,让大模型自己去生成一些数据即可。作者们将一段纯文本数据集转换为使用API调用进行扩充的数据集,具体策略如下图所示,其分为三个步骤:
- Sample API Calls:利用LLM的上下文学习能力对大量潜在的API调用进行采样。 p i = p M ( < A P I > ∣ P ( x ) , x 1 : i − 1 ) p_i=p_M(<API>|P(x),x_{1:i-1}) pi=pM(<API>∣P(x),x1:i−1)
- Execute API Calls:执行这些API调用不同的工具。
- Filter API Calls:检查结果以过滤掉所有不会减少loss的调用(失败的调用)。 L i ( z ) = − ∑ j = i n w j − i l o g p M ( x j ∣ z , x a : j − 1 ) L_i(z)=-\sum^n_{j=i} w_{j-i} log p_M(x_j|z,x_{a:j-1}) Li(z)=−j=i∑nwj−ilogpM(xj∣z,xa:j−1)
所有过滤后的结果将与原始文本交错,以产生一个新的文本,如下图的 x ∗ x^* x∗中的红色所示。所生成的数据将用于LLMS的SFT训练。
文章中主要使用了5种工具,如下图所示:
- Question Answering。一种检索增强的LM,其经过了对自然问题的微调。
- Wikipedia Search。BM25,用于搜索来自维基百科的简短文本片段。
- Calculator。支持四种基本的算术运算,结果四舍五入到小数点后两位。
- Calendar。不需要有任何输入,其为需要时间意识的预测提供了时间上下文。
- Machine Translation。基于LM的机器翻译系统,600M参数的NLLB,支持200种语言,目标语言恒定英语。
Toolformer依然存在着以下不足:
- 无法链式使用不同工具。从训练方式来看,使用不同工具的数据是分别生成的,这使得模型无法配合使用多种工具。
- 无法交互地不断优化查询。这是为了防止模型不断调用API导致卡死,每个样本仅允许调用一次API,但这大大降低了模型的能力。
更详细的内容请看原文:
paper:https://arxiv.org/pdf/2302.04761.pdf
Tool Learning with Foundation Models
来自清华74 页的论文,正式把这个方向定义为Tool Learning,并开源了一个通用的工具学习框架。
“It is not only the violin that shapes the violinist, we are all shaped by the tools we train ourselves to use.”
不仅是小提琴塑造了小提琴家,我们都是由我们学会使用的工具所塑造的。
— Edsger W. Dijkstra
工具是对人类能力的扩展,旨在提高人类活动中的生产力、效率和解决问题。自文明诞生以来,工具就一直是人类不可或缺的一部分 。工具的创建和使用是由一个根深蒂固的愿望,以克服我们的物理限制和发现新的领域。更具体地说,随着工具的进步,我们可以轻松高效地完成越来越复杂的任务,解放时间和资源来追求更雄心勃勃的冒险。因此,工具一直是至关重要的因素,改变我们的学习、交流、工作和娱乐模式。纵观历史,人类一直是工具的发明和操作的主要媒介,这是智能体的一种惊人的表现。
如下图所示,从使用者的角度而言,工具大体可以被分为三类
- Physical Interaction-based Tools:物理交互工具。如机器人、传感器和可穿戴设备。
- GUI-based Tools:GUI驱动工具。拥有一个交互界面的工具,如浏览器、Microsoft Office、Adobe PhotoShop。
- Program-based Tools:基于程序的工具。需要通过代码来调用和控制,如Github Copilot,拥有极高的灵活性。
随着LLMs的出现,人工智能系统也有可能像人类一样熟练地使用工具。在这种方式下,即工具学习与基础模型的结合,可以融合专用工具(Tools)和基础模型(Foundation Models)的优势,以提高解决问题的准确性、效率和自动化程度。具体的优势在于:
- Mitigation for Memorization。使用实时工具执行来增强基础模型,以减轻记忆过程中的限制。例如,将记忆存储负载到搜索引擎。
- Enhanced Expertise。专门的工具更适合满足特定领域的需求,如使用Wolfram进行科学计算,这将把LLMs的能力推广到超出其能力范围的更广泛的任务中。
- Better Interpretability。工具执行的过程可以反映如何得到结果的整个过程,这允许更好的可解释性和透明度。
- Improved Robustness。基础模型容易受到对抗性攻击,比如微调prompt就可以翻转模型预测。这是因为模型的训练仍然严重依赖于训练数据的分布。相反,工具跟输入扰动无关,从而可以抵抗对抗性的攻击。
Tool Learning可以被分为两类,如上图所示,分为工具增强学习与工具导向学习。
- tool-augmented learning,工具增强学习,它试图通过来自各种工具的执行结果来增强基础模型,如调用搜索引擎、日历、计算器等。
- tool-oriented learning,工具导向学习,它将学习过程的主要目标从模型增强转移到执行工具本身。最具代表性的应用是机器人操作,其中LLMs被视为机器人系统的“大脑”,用于将高级任务分解为很多可执行的子计划。除了机器人外,像WebGPT可以浏览搜索引擎、WebShop可以浏览并购买商品、图像编辑等等。最近Auto-GPT的诞生进一步证明了基础模型在自动化定义plan和tool use上的潜力。
随后作者提出了一个Tool Learning的总体框架,如上图所示,它包括四个基本组成部分:
- tool set。包含不同功能的不同工具的集合,以API接口的形式出现,比如对于一个天气API,API的输入可以是位置和时间,输出可以是温度或风速。
- environment。环境是指工具所操作的外部世界,可以是虚拟的也可以是现实的。
- controller。充当整个系统的“大脑”,需要理解用户并与工具集建立连接,决策出使用策略与工具的使用计划。
- perceiver。感知器负责处理工具操作与环境的互动形成的反馈,通过读入这些反馈为控制器生成信号或摘要,指导控制器下一步的行动。通过观察这个反馈,控制器可以确定所生成的计划是否有效,以及在执行过程中是否存在需要解决的异常情况。在更复杂的情况下,perceiver应该是能够支持多种模式,如文本、视觉和音频,以捕获来自用户和环境的反馈的不同性质。
最关键的有两方面,根据用户query获得意图,然后通过意图制定具体执行计划。
The General Procedure: From Intent to Plan
为了准确地完成用户查询q所指定的任务,controller需要理解两个方面:
- 用户的潜在意图。这包括识别并形式化用户的自然语言查询,即意图理解。
- 工具集。需要理解每个工具的功能和目标,即工具理解。
如下图所示,zero-shot prompting与 few-shot prompting是两种流行的方式,其可以让controller学会去阅读并获取工具文档的知识。
Planning with Reasoning
理解其意图和工具之后,仍然不足以处理复杂的任务。用户查询q通常意味是复杂的任务,需要以适当的顺序被计划为多个子任务,因此该过程需要进行推理。如下图所示是向内推理和向外性推理的示意图。前者涉及到在不与环境E交互的情况下生成一个工具使用的静态计划,而后者则通过与环境E的迭代交互过程中来逐步生成计划。
Tool Learning的训练过程可分为监督、半监督(构造若标签)和自监督。也可以从环境或人类的feedback中进行学习。此外对于通用的工具学习也可以考虑更加高效的学习与迁移知识:
- 元工具学习(Meta Tool Learning):模型能够反思自己的学习过程并在必要时调整新的工具使用策略。
- 课程工具学习(Curriculum Tool Learning):通过课程学习逐步向模型介绍更复杂的工具以便其建立在先前的基础上,并深入了解工具的方法来提高模型的泛化效果。
此外,作者们还讨论了其他重要的研究主题,包括
- 安全性和可信度(safety and trustworthiness),其中作者们强调潜在的风险来自对手(Adversaries,即外部攻击者)、治理(Governance,即技术的滥用)和可信度(准确和道德问题)。因此在某些高风险场景中(如自动驾驶)部署Tool Learning模型之前,有必要仔细考虑这些问题。
- 工具创建(tool creation),除了工具增强学习与工具导向学习外,或许人工智能也可以自己创造新工具。
- 个性化的工具学习(personalized tool learning),服务特定的用户,如金融领域。用户偏好与工具操作相结合将是一个挑战,此外还会有隐私保护问题。
- 具身学习(embodied learning),工具学习与具身代理的交叉能够实现,特别是直接控制代理或者使用真实世界的工具。
- 工具学习中的知识冲突(knowledge conflicts in tool learning),知识冲突会导致不准确和不可靠的模型预测,主要分为模型知识与增强知识之间的冲突(模型信息过时、模型信息错误、工具使用错误等都会导致这种问题)、来自不同工具的增强知识之间的冲突(工具本身可信度、工具的偏向、工具的底层不一样(如不同的翻译软件))。
- 其他开放的问题(other open problems),例如将工具使用能力视为机器智能的衡量标准和科学发现的工具学习。
paper:https://arxiv.org/pdf/2304.08354.pdf
code:https://github.com/OpenBMB/BMTools
下一篇博文介绍HuggingGPT、AutoGPT、WebGPT、WebCPM。
- LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)
相关文章:

Toolformer and Tool Learning(LLMs如何使用工具)
大模型的能力让学术和工业界都对通用人工智能的未来充满幻想,在前一篇博文中已经粗略介绍, Augmented Language Models(增强语言模型) ALM的两大思路是推理和工具,本篇博文整理两篇关于Toolformer或Tool Learning的论…...

029:Mapbox GL绘制铁路黑白交替的线段
第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载数据显示铁路标识的那种黑白交替的线段。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共94行)相关API参考:专栏目标示例效果 配置方式 1)…...
结对编程 --- 大部分程序员喜欢的编程方式
一、介绍 结对编程起源时间可以追溯到 1990 年代早期。这种编程方法最初由 Jim Highsmith 和 Alistair Cockburn 等人提出。后来,Kent Beck 和 Ward Cunningham 等人将其发展成为一种敏捷开发方法,被称为“极限编程”(Extreme Programming&am…...

kubernetes-informer机制
一、概念 informer 是 client-go 中的核心工具包,在kubernetes中,各个组件通过HTTP协议跟 API Server 进行通信。如果各组件每次都直接和API Server 进行交互,会给API Server 和ETCD造成非常大的压力。在不依赖任何中间件的情况下࿰…...
LeetCode 2451. Odd String Difference【字符串,哈希表】简单
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

切片工具tippecanoe的全网最详细的解释
1.下载和安装 tippecanoe工具是mapbox官方提供的一个服务端切片工具,因此它是运行在服务器上的,它比较友好的支持mac和linux机器。对于windows来讲,就比较麻烦了。 首先对于mac系统,你只需配置好自己的homebrew,保证homebrew能够正常下载东西。 然后只需要一个命令: …...

Linux系统初始化命令的备忘单,Linux运维工程师收藏!
在管理和维护Linux系统时,有一些常用的命令可以帮助您进行系统初始化和配置。这些命令涵盖了各种任务,包括系统设置、用户管理、软件安装和网络配置等。 本文将为您提供一个Linux系统初始化命令的备忘单,以便在需要时方便查阅和使用。 系统设…...

五月最近一次面试,被阿里P8测开虐惨了...
都说金三银四涨薪季,我是着急忙慌的准备简历——5年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程...薪资要求?5年测试经验起码能要个20K吧 我加班肝了一页半简历,投出去一周,面试电话倒是不少&a…...

工业机器视觉缺陷检测工作小结
工业机器视觉检测工作小结 (因为网上没有很系统的讲义和文档,都是零零散散的,因此,我自己尝试着总结一下、仅供参考) 你想知道的大概率在这都可以找到、相机的了解镜头的了解光源的了解传统算法DL深度学习方法 &#…...
技术笔记:默默耕耘,赢得铁粉的秘密策略!
目录 第一步:真实实践,价值分享第二步:高质量文章的撰写第三步:积极互动,回复评论和留言第四步:定期更新和持续学习第五步:参与技术社区第六步:社区问答和问题解答总结 导语…...

回收站中怎么找回误删除的文件?这几种方法很实用
当我们在电脑上操作文件的时候,难免会有不小心删除文件的情况发生。这个时候,我们可以打开回收站来找回误删除的文件。但是,有时候我们也会误将回收站清空。那么,该怎样才能找回已经误删除的文件呢?在这里提供了回收站…...

Gateway网关参数进行验签POST 包含requestbody 请求体封装
Gateway网关自定义拦截器的不可重复读取数据 特别注意一点, 因为在网关层 拿出 request 流之后,必须重写getbody()方法把所有的参数放进去,否则后面转发的请求无法接收到任何数据, 坑,巨坑,因为版本问题网上很多都不能兼容, 我的springboot环境 依赖包 <parent><gr…...

【Netty】字节缓冲区 ByteBuf (六)(上)
文章目录 前言一、ByteBuf类二、ByteBuffer 实现原理2.1 ByteBuffer 写入模式2.2 ByteBuffer 读取模式2.3 ByteBuffer 写入模式切换为读取模式2.4 clear() 与 compact() 方法2.5 ByteBuffer 使用案例 总结 前言 回顾Netty系列文章: Netty 概述(一&…...

Python - 面向对象编程 - 实例方法、静态方法、类方法
实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog:def __init__(self, name, age):print("自动调用构造方法")self.name nameself.age agedef test(self):print("一个实例方法&…...

性能测试——基本性能监控系统使用
这里写目录标题 一、基本性能监控系统组成二、环境搭建1、准备数据文件 type.db collectd.conf2、启动InfluxDB3、启动grafana4、启动collectd5、Grafana中配置数据源 一、基本性能监控系统组成 Collectd InfluxdDB Grafana Collectd 是一个守护(daemon)进程,用来…...
JavaCollection集合
5 Collection集合 5.1 Collection集合概述 是单列集合的顶层接口,它表示一组对象,这些对象也称Collection元素JDK不提供此接口的直接实现,它提供更具体的子接口(Set 和 List)实现package ceshi;import java.util.AbstractCollection; import java.util.ArrayList; import…...

C++中string的用法
博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。 博主主页:陈童学哦 所属专栏:CSTL 前言:Hello各位小伙伴们好!欢迎来到本专栏CSTL的学习,本专栏旨在帮助大家了解…...
目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用
目录 基于深度学习的交通目标检测算法研究 传统的目标检测算法 基于深度学习的目标检测算法 </...
面试:vue事件绑定修饰符
stop - 调用 event.stopPropagation()。 prevent - 调用 event.preventDefault()。 trim 自动过滤用户输入的首尾空格 number 将输出字符串转为Number类型 enter 回车键 capture - 添加事件侦听器时使用 capture 模式。 self - 只当事件是从侦听器绑定的元素本身触发时才触发…...
优思学院|从0到1,认识精益生产管理
精益生产是一种系统性的生产管理方法,旨在最大化价值,最小化浪费,以及提高产品质量和客户满意度。它源于丰田生产系统(TPS),是一种基于流程优化、以人为本的管理方法,强调优化生产流程、减少浪费…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...