随着对 LLM(大语言模型)的了解与使用越来越多,大家开始偏向于探索 LLM 的 agent 能力。尤其是让 LLM 学习理解 API,使用工具进行对用户的 instruction(指令)进行处理。然而,目前的开源大模型并不擅长使用工具,最善于使用工具的 ChatGPT 是闭源的模型。研究人员设计了一个评测 LLM 使用工具能力的 Benchmark(基准)—— LLMBench,以及一个针对该场景的数据构建、模型训练、评测的框架—— ToolLLM。
这张图展示了构建ToolBench的三个阶段,以及如何训练API检索器和ToolLLaMA。在执行指令时,API检索器会向ToolLLaMA推荐相关的API,ToolLLaMA通过多轮API调用得出最终答案。整个推理过程由ToolEval评估。 研究人员主要是从RapidAPI来收集API,所有的API都可以分为49个粗粒度类别,例如体育、金融和天气。研究人员评测了这些API,最后经过筛选,留下了16,464个API。LLM的prompt(提示)中包括了这些API相关的文档和使用用例。
作者根据API,使用ChatGPT生成可能用到的指令,利用 {INST,API} 的格式训练API retriever。最后得到的prompt包含了任务的描述、API的文档、3个API的使用例。
作者通过序列来对执行路径进行探索{a1,r1,a2,r2.....}a为采取的function call,r为返回的response,为了避免一直错误的路径上探索,作者设计了一个基于深度优先的决策树,并将放弃执行也作为一个节点,返回到之前的路径重新选择,从而节省了对于chatgpt的调用。最后收集到了12, 657 个instruction solution pairs用来训练ToolLLaMA。
首先训练API检索器的目标是与指令检索相关的API,采用了Sentence-BERT 训练基于BERT-BASE的密集检索器。该模型分别将指令和API文档编码为两个嵌入向量,并通过这两个向量的相似性确定它们之间的相关性。在训练过程中,作者将之前生成的每个指令的相关API视为正样本,并采样一些其他API作为负样本进行对比学习。
然后,作者使用了指令-解决方案对对LLaMA 7B模型进行微调。因为工具的响应通常会非常长,原始的LLaMA模型的序列长度2048 或许不能够满足本次场景。为此,作者使用positional interpolation将上下文长度扩展到8192,最后以多轮对话模式训练模型。在训练数据格式方面,作者保持输入和输出与ChatGPT的相同。
ToolLLM 介绍了如何在LLMs中引入使用工具的能力,提出了一个指令调优的数据集ToolBench,涵盖了16k+真实世界的API和各种实际的用例场景,包括单一工具和多工具任务。ToolBench的构建只使用ChatGPT,并且最小限度的使用人工监督。此外,ToolLLM还提出了DFSDT来加强LLMs的规划和推理能力,使它们能够有策略地在推理路径中导航。并且实验结果也显示出了使用经过训练的开源模型ToolLLaMA极大的提高了使用工具能力。
相关资料:
-
论文: https://arxiv.org/pdf/2304.01662.pdf -
Github: https://github.com/OpenBMB/ToolBench
本文由 mdnice 多平台发布