当前位置: 首页 > news >正文

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:i1)
  • 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=inwjilogpM(xjz,xa:j1)

所有过滤后的结果将与原始文本交错,以产生一个新的文本,如下图的 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如何使用工具)

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

029:Mapbox GL绘制铁路黑白交替的线段

第029个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载数据显示铁路标识的那种黑白交替的线段。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共94行)相关API参考:专栏目标示例效果 配置方式 1)…...

结对编程 --- 大部分程序员喜欢的编程方式

一、介绍 结对编程起源时间可以追溯到 1990 年代早期。这种编程方法最初由 Jim Highsmith 和 Alistair Cockburn 等人提出。后来&#xff0c;Kent Beck 和 Ward Cunningham 等人将其发展成为一种敏捷开发方法&#xff0c;被称为“极限编程”&#xff08;Extreme Programming&am…...

kubernetes-informer机制

一、概念 informer 是 client-go 中的核心工具包&#xff0c;在kubernetes中&#xff0c;各个组件通过HTTP协议跟 API Server 进行通信。如果各组件每次都直接和API Server 进行交互&#xff0c;会给API Server 和ETCD造成非常大的压力。在不依赖任何中间件的情况下&#xff0…...

LeetCode 2451. Odd String Difference【字符串,哈希表】简单

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

切片工具tippecanoe的全网最详细的解释

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

Linux系统初始化命令的备忘单,Linux运维工程师收藏!

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

五月最近一次面试,被阿里P8测开虐惨了...

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

工业机器视觉缺陷检测工作小结

工业机器视觉检测工作小结 &#xff08;因为网上没有很系统的讲义和文档&#xff0c;都是零零散散的&#xff0c;因此&#xff0c;我自己尝试着总结一下、仅供参考&#xff09; 你想知道的大概率在这都可以找到、相机的了解镜头的了解光源的了解传统算法DL深度学习方法 &#…...

技术笔记:默默耕耘,赢得铁粉的秘密策略!

目录 第一步&#xff1a;真实实践&#xff0c;价值分享第二步&#xff1a;高质量文章的撰写第三步&#xff1a;积极互动&#xff0c;回复评论和留言第四步&#xff1a;定期更新和持续学习第五步&#xff1a;参与技术社区第六步&#xff1a;社区问答和问题解答总结 导语&#xf…...

回收站中怎么找回误删除的文件?这几种方法很实用

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

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系列文章&#xff1a; Netty 概述&#xff08;一&…...

Python - 面向对象编程 - 实例方法、静态方法、类方法

实例方法 在类中定义的方法默认都是实例方法&#xff0c;前面几篇文章已经大量使用到实例方法 实例方法栗子 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)进程&#xff0c;用来…...

JavaCollection集合

5 Collection集合 5.1 Collection集合概述 是单列集合的顶层接口,它表示一组对象,这些对象也称Collection元素JDK不提供此接口的直接实现,它提供更具体的子接口(Set 和 List)实现package ceshi;import java.util.AbstractCollection; import java.util.ArrayList; import…...

C++中string的用法

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 前言&#xff1a;Hello各位小伙伴们好&#xff01;欢迎来到本专栏CSTL的学习&#xff0c;本专栏旨在帮助大家了解…...

目标检测YOLO实战应用案例100讲-基于深度学习的交通场景多尺度目标检测算法研究与应用

目录 基于深度学习的交通目标检测算法研究 传统的目标检测算法 基于深度学习的目标检测算法 </...

面试:vue事件绑定修饰符

stop - 调用 event.stopPropagation()。 prevent - 调用 event.preventDefault()。 trim 自动过滤用户输入的首尾空格 number 将输出字符串转为Number类型 enter 回车键 capture - 添加事件侦听器时使用 capture 模式。 self - 只当事件是从侦听器绑定的元素本身触发时才触发…...

优思学院|从0到1,认识精益生产管理

精益生产是一种系统性的生产管理方法&#xff0c;旨在最大化价值&#xff0c;最小化浪费&#xff0c;以及提高产品质量和客户满意度。它源于丰田生产系统&#xff08;TPS&#xff09;&#xff0c;是一种基于流程优化、以人为本的管理方法&#xff0c;强调优化生产流程、减少浪费…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...