Toolformer and Tool Learning(LLMs如何使用工具)

news2024/11/18 9:28:18

大模型的能力让学术和工业界都对通用人工智能的未来充满幻想,在前一篇博文中已经粗略介绍,

  • 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)

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

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

相关文章

web实现日历、阳历农历之间相互转换、npm、push、unshift、includes、innerHTML

文章目录 1、原生web实现效果图htmlJavaScriptstyle vue2实现htmlJavaScript 1、原生web实现 效果图 html <div class"box"><div class"week"><div>星期日</div><div>星期一</div><div>星期二</div><…

Three.js--》建模软件如何加载外部3D模型?

目录 三维建模软件的介绍 Blender官方文档介绍 Blender软件安装 GLTF格式简介 gltf不同文件形式 看过我之前讲解的three文章的人都知道&#xff0c;我在创建模型的时候都没有使用three.js自带的一些简单模型&#xff0c;而是引入外部的模型并加载到页面上&#xff0c;简言…

数据库基础——1.数据库概述

从这篇文章我们开始学习数据库的相关知识 目录 1.为什么要使用数据库 2.数据库与数据库管理系统 2.1相关概念 2.2数据库与数据库管理系统的关系 ​编辑2.3常见的数据库管理系统 2.4常见的数据库介绍 3.MySQL介绍 3.1概述 3.2关于MySQL8.0 3.3 Oracle vs MySQL 4.RD…

Java 反序列化漏洞

反序列化漏洞是指程序在反序列化期间&#xff0c;通过特殊的调用链引发的一系列安全问题。编程语言中只要存在序列化&#xff0c;反序列化功能就可能存在反序列化的安全问题。这里只针对Java和PHP进行讨论。 序列化漏洞概述 序列化的存在主要是为了存储和传输&#xff0c;将这…

Redis入门篇-初

结束时长 Redis十大数据类型 基本目录 实际的类型是没有被红框框选的10个类型 Strings 1 Lists 2 Sets 3 Hashes 4 Sorted sets 5 Streams 6 Geospatial 7 HyperLogLog 8 Bitmaps 9 Bitfields 10类型展示 Strings --> HelloRedis Lists [A>B>C>C] Sets {A<…

第七章 文件读写

内容框图 7.1 文件读写介绍 文件打开和关闭 用word编写一份简历&#xff0c;应该有哪些流程&#xff1f; 打开word软件&#xff0c;新建一个word文件写入个人简历信息保存文件关闭word软件 同样&#xff0c;编程中操作文件的整体过程类似。 打开文件&#xff0c;或者新建立一个…

chatgpt赋能python:Python中的%z格式化代码

Python中的%z格式化代码 在Python编程中&#xff0c;%z是一个非常有用的格式化代码。它用于表示时区偏移量&#xff0c;并将其与日期时间字符串一起显示。在本文中&#xff0c;我们将深入了解Python中的%z代码&#xff0c;并探讨它如何帮助您处理日期和时间。 什么是%z&#…

chatgpt赋能python:PythonTCP断开连接原因和解决方案

Python TCP 断开连接原因和解决方案 Python 是一种广泛使用的编程语言&#xff0c;它支持网络编程、数据处理、人工智能、机器学习等诸多领域。在网络编程中&#xff0c;Python 通常使用 TCP 连接传输数据。然而&#xff0c;在使用 TCP 连接传输数据的过程中&#xff0c;我们可…

koa2获取HTTP请求参数

HTTP 什么是HTTP HTTP&#xff0c;即超文本传输协议&#xff0c;是一种实现客户端和服务器之间通信的响应协议&#xff0c;它是用作客户端和服务器之间的请求。 客户端&#xff08;浏览器&#xff09;会向服务器提交HTTP请求&#xff1b;然后服务器向客户端返回响应&#xf…

2023 Q1 ZK报告

1. ZK数据 2023年4月4日&#xff0c;ZK社区举办了zkSummit 9。 ZK技术应用场景主要分布情况为&#xff1a; 其中&#xff1a; 1&#xff09;ZK用于隐私场景案例最多&#xff0c;占比12.9%&#xff0c;说明人们对 将ZK技术用于隐私保护 兴趣浓厚。2&#xff09;ZK用于扩容场景…

超长溢出头部省略打点,坑这么大,技巧这么多?

目录 需求 利用 direction 实现头部超长溢出打点 简单介绍一下 direction&#xff1a; 另外两个与排版相关的属性还有&#xff1a; direction: rtl 会导致使用下划线 _ 连接的数字内容排版错误 多方案解决 方案一&#xff1a;两次 direction 反转 当然&#xff0c;这里…

【高级语言程序设计(一)】第 8 章:结构体类型和自定义类型

目录 前言 一、结构体类型定义 &#xff08;1&#xff09;结构体类型定义的一般形式 &#xff08;2&#xff09;结构体类型定义的说明 二、结构体类型变量 &#xff08;1&#xff09;结构体类型变量的定义和初始化 ① 先定义结构体类型、后定义结构体类型的变量&#xf…

今天用AI创作助手写的文章--Docker提问系列介绍 Docker 的基本概念和优势

目录 介绍 Docker 的基本概念和优势&#xff0c;以及在应用程序开发中的实际应用。基本概念&#xff1a;优势&#xff1a; 哪些应用可以部署到docker里面Docker在服务器里面的安装步骤Docker里面的报错如何很仔细的排查解决&#xff1f;总结一下docker 未来发展趋势 介绍 Docke…

安装Arch Linux后要做的十件事

Arch Linux 是一款轻量级、灵活且高度可定制的Linux发行版&#xff0c;被广泛用于个人电脑和服务器。一旦您成功安装了Arch Linux&#xff0c;接下来有一些重要的任务需要完成&#xff0c;以确保系统的稳定性和安全性&#xff0c;并为您的需求做好准备。 本文将详细介绍安装Ar…

C++11 -- 可变参数模板

文章目录 可变参数模板的概念可变模板参数的定义获取可变模板参数包的值递归函数方式展开参数包获取逗号表达式展开参数包获取 STL容器中的emplace相关接口参数emplace_back与STL容器中的push_back的主要区别emplace_back与push_back的差异原理emplate_back与push_back的区别验…

图像算法工程师岗位的主要职责(合集)

图像算法工程师岗位的主要职责 一、确定岗位的职责 1.根据工作任务的需要确立工作岗位名称及其数量; 2.根据岗位工种确定岗位职务范围; 3.根据工种性质确定岗位使用的设备、工具、工作质量和效率; 4.明确岗位环境和确定岗位任职资格; 5.确定各个岗位之间的相互关系; 6.根据岗位…

css元素的显示和隐藏

1. display显示隐藏 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><st…

测试C#分词工具jieba.NET

jieba.NET是jieba中文分词的C#版本&#xff0c;后者是优秀的Python中文分词组件GitHub中得到超过3万星。jieba.NET支持中文分词、关键词提取、词性标注等功能&#xff0c;本文主要测试其中文分词的功能基本用法。   新建测试项目&#xff0c;在NuGet管理器中添加jieba.NET。 …

SpringBoot --- 运维篇

一、打包与运行 1.1、程序打包与运行&#xff08;Windows版&#xff09; 所谓打包指将程序转换成一个可执行的文件&#xff0c;所谓运行指不依赖开发环境执行打包产生的文件。 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做packag…

虹科HiveMQ与MQTT:构建互联汽车的新架构

前言 随着汽车的互联程度越来越高&#xff0c;汽车制造商和互联汽车平台提供商通过使用物联网技术&#xff0c;提供新服务并从车辆收集有价值的遥测数据&#xff0c;以此来增加营收。从高效的车队管理和汽车共享到预测性维护和高级驾驶员辅助系统&#xff0c;未来移动出行的可…