LLM agentic模式之工具使用: Toolformer、CoA、MM-React思路

Toolformer

Toolformer出自2023年2月Meta上传的论文《Toolformer: Language Models Can Teach Themselves to Use Tools》,它提出了一种通过自监督训练的方式来让模型决定调哪个API什么时候调用。

在这里插入图片描述

API调用的表示:为了让模型去能够调用API,将API表示成一个文本序列,并用特征token来标识每一个API调用的开始和结束,这样就可以将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是其对应的输入;API调用的结果记为r,则不带结果和带结果的API调用的序列可表示成如下:
e ( c ) = < API > a c ( i c ) < / API > e ( c , r ) = < API > a c ( i c ) → r < API > e(c) = <\text{API}> a_c(i_c) </\text{API}> \\ e(c,r) = <\text{API}> a_c(i_c) \rightarrow r <\text{API}> e(c)=<API>ac(ic)</API>e(c,r)=<API>ac(ic)r<API>
上面的表达式中的"" 和"“以及 → \rightarrow 是用来标记API调用的特殊token,注意这里标识只是为了可读性方便理解,实际上实现时为了不修改模型的词表,使用”[“、”]“、”->“来表示”" 和""和 → \rightarrow ,上面图片中是几个API表示的例子。

在这里插入图片描述

训练数据的构建:对于一个只包括普通文本的数据集 C = { x 1 , … , x ∣ C ∣ } \mathcal{C} = \{x^1, \ldots, x^{|\mathcal{C}|}\} C={x1,,xC} ,通过如下三步来将数据集变成一个包含API调用的数据集 C ∗ \mathcal{C}^* C(如上图示意)。

  1. 采样API调用:写prompt P ( x ) P(\mathbf{x}) P(x)让模型 M M M对一个样本 x = x 1 , … , x n \mathbf{x} = x_1, \ldots, x_n x=x1,,xn来生成API调用数据,比如问答工具的prompt如下图所示。设 P M ( z n + 1 ∣ z 1 , … , z n ) P_M(z_{n+1} | z_1, \ldots, z_n) PM(zn+1z1,,zn)是模型计算的token z n + 1 z_{n+1} zn+1是序列 z 1 , … , z n z_1,\ldots,z_n z1,,zn的下一个token的概率,对于每一个位置 i ∈ 1 , … , n i \in {1, \ldots, n} i1,,n, 概率 p i = p M ( < API > ∣ P ( x ) , x 1 : i − 1 ) p_i = p_M (<\text{API}> |P(\mathcal{x}), x_{1:i-1}) pi=pM(<API>P(x),x1:i1)是模型 M M M 计算的在位置i处开始调用API的概率,给定一个采样阈值 τ s \tau_s τs,将所有满足 I = { p i > τ s } I=\{p_i > \tau_s \} I={pi>τs}的top k个概率最大的位置保留。再对于每一个 i ∈ I i \in I iI的位置,让 M M M在给定序列 [ P ( x , x 1 , … , x i − 1 , < API > ] [P(\mathbf{x}, x_1, \ldots, x_{i-1}, <\text{API} >] [P(x,x1,,xi1,<API>] 前缀下生成最多m个以 < / API > </\text{API}> </API>结尾的API调用序列 c 1 i , … , c i m c^i_1,\ldots, c^m_i c1i,,cim

在这里插入图片描述

  1. 执行API调用:执行所有 M M M生成的API调用,具体如何执行取决于API的类型。每一个API调用 c i c_i ci对应的输出 r i r_i ri必须是单个文本序列。
  2. 过滤API调用:给定一个权重序列 ( w i ∣ i ∈ N ) (w_i | i \in \mathbb{N}) (wiiN), 当模型 M M M被给定前缀 z \mathbf{z} z,设带权交叉熵损失为 L i ( z ) = − ∑ j = i n w j − i ⋅ log ⁡ p M ( x j ∣ z , x 1 : j − 1 ) L_i(\mathbf{z}) = - \sum_{j=i}^n w_{j-i} \cdot \log p_M (x_j | \mathbf{z}, x_{1:j-1}) Li(z)=j=inwjilogpM(xjz,x1:j1)。 比较这个损失的两个实例:

L i + = L i ( e ( c i , r i ) ) L i − = m i n ( L i ( ϵ ) , L i ( e ( c i , ϵ ) ) ) L^+_i = L_i (e(c_i, r_i)) \\ L^-_i = min(L_i(\epsilon), L_i(e(c_i, \epsilon))) Li+=Li(e(ci,ri))Li=min(Li(ϵ),Li(e(ci,ϵ)))

上式中 ϵ \epsilon ϵ表示空序列。 L i + L^+_i Li+是如果将API调用和其输出作为模型 M M M的前缀得到的加权损失,而 L i − L^-_i Li是不使用API调用或使用API调用但不提供输出这两者中较小的损失。定义过滤阈值 τ f \tau_f τf,如果一个API调用满足 L i − − L i + ≥ τ f L^-_i - L^+_i \ge \tau_f LiLi+τf 则保留。即希望API调用及其输出是有助于模型生成未来的token。在论文中使用的权重序列计算方式如下:
w t = w ~ t ∑ s ∈ N w ~ s  with  w ~ t = max ⁡ ( 0 , 1 − 0.2 ⋅ t ) w_t=\frac{\tilde{w}_t}{\sum_{s \in \mathbb{N}} \tilde{w}_s} \text { with } \tilde{w}_t=\max (0,1-0.2 \cdot t) wt=sNw~sw~t with w~t=max(0,10.2t)

模型微调:对于一个输入文本 x = x 1 , … , x n \mathbf{x} = x_1, \ldots, x_n x=x1,,xn及其在位置i的API调用和结果 ( c i , r i ) (c_i, r_i) (ci,ri),构建新的序列 x ∗ = x 1 : i − 1 , e ( c i , r i ) , x i : n \mathbf{x^*} = x_{1:i-1}, e(c_i, r_i), x_{i:n} x=x1:i1,e(ci,ri),xi:n,将数据集 x ∈ C \mathbf{x} \in \mathcal{C} xC中所有的数据都构建新序列后生成新的数据集 C ∗ \mathcal{C}^* C,注意 C ∗ \mathcal{C}^* C中也包括那些与数据集 C \mathcal{C} C一样的文本,作者认为这样有助于模型学习何时及如何调用API。 使用标准的语言模型目标函数在数据集 C ∗ \mathcal{C}^* C来微调模型 M M M

模型推理:使用微调后的模型推理时,在模型输出 → \rightarrow 符号之前都进行常规的解码操作,当模型输出 → \rightarrow 之后,中断解码过程并调用API获取相应的结果,并将结果和 < / API > </\text{API}> </API>添加到之前生成的内容的后面后继续解码。

CoA

CoA(Chain of Abstraction)出自2024年1月底Meta上传的论文《Efficient Tool Use with Chain-of-Abstraction Reasoning》,它提出了一种在多步推理(multi-step reasoning)时更好地利用工具的方法。

在这里插入图片描述

CoA方法思路:总览图如上图所示,它先训练LLM生成带占位符(placeholders)的抽象推理链,接着调用工具填充具体的知识使得推理链具体化,最后根据具体化的推理链来生成回答。CoA作者认为让LLM生成抽象推理链可以让LLM聚焦于学习通用和整体的推理推理策略,并且对模型参数也不需要考虑去生成特定的知识。此外,将生成推理链和领域知识解耦可以使得模型解码与API调用并行,即在模型生成下一个抽象推理链时,工具 可以填充当前的推理链,这将加快整个推理的链路。

微调数据构建:从开源QA数据集收集QA样本,让LLaMa-70B对每一个采样问题重写其答案,如下图所示。具体来说,让LLaMa-70B在金标准回答中标注与知识操作(如数学推导、关于Wikipedia参考的描述)有关的片段(span),接着重写这些金标准回答,将知识操作替换为抽象的占位符(placeholders)。对于出现多次的同一个标记,比如例子中第一步计算结果55,prompt时让LLM注意将这些中间结果使用同一个占位符标识。prompt使用了few shot,此外为了确保LLM生成的数据是正确的,设计了工具来验证每一个CoA推理链的正确性,只有验证通过的样本才会被加入到微调训练集。(数学计算借助了SymPy来验证推理链,对于wiki问答使用了BM25检索器和spacy NER)

在这里插入图片描述

MM-React

MM-React 出自2023年3月微软提交的论文《MM-REACT: Prompting ChatGPT for Multimodal Reasoning and Action》,它用prompt的方式让LLM利用视觉工具来解决如多图片推理、视频摘要等问题。

在这里插入图片描述

MM-REACT 提供一系列视觉处理工具让ChatGPT来选择和使用,帮助其理解图片或者视频,其借助React的思路,将其扩展到视觉领域,可以去体验一下其demo效果。

在这里插入图片描述

参考资料

  1. Toolformer: arxiv
  2. MM-React: website, github, demo, arxiv
  3. CoA: arxiv)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值