论文题目
ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs
论文地址
http://arxiv.org/abs/2307.16789
开源地址
https://github.com/OpenBMB/ToolBench
解决问题:
当前针对提升LLM在tool use领域的效果的研究存在一些问题: 1.涉及的API比较有限 2.应用场景受限 3.使用的规划、推理方法能力较差(COT ReACT),这些问题使得在生产实践中使用LLM来选择恰当的工具去处理用户的需求变得非常困难。
解决思路:
对于第一个问题,可以从一些知名API供应商处获取大量的API,文中选择了Rapid API
对于第二个问题,文中选择使用ChatGPT来生成丰富且多样的查询语句,这些查询语句需要通过调用API才能获取回答它们必须的信息 -》 实际上,对单个API生成多样的场景是容易的,主要难点在于构造需要多个API解决的多样的场景,如何保障这些API是相关的,可以被串联起来的
对于第三个问题,文中基于DFS思想,提出让LLM逐步选择恰当的工具,并在失败时返回上一步
具体步骤:
-
作者从Rapid API网站上采集了大量的API,这些API有着三层分类结构(category, tool, api),然后按照可用性以及质量对API进行了过滤,得到了一组高质量的API
-
作者对API进行采样,采样出若干组API,然后对每组让ChatGPT生成需要使用这些API的查询语句。
- 作者使用了三种采样策略进行采样
-
随机选择一个tool,将该tool下的所有api作为样本
-
随机选择一个category,从中随机选择2-5个tool,每个tool中随机选择不超过3个api,这些api构成一个样本
-
随机选择一个collection,从中随机选择2-5个tool,每个tool中随机选择不超过3个api,这些api构成一个样本
- 对于每个样本S,作者让chatgpt生成多个查询语句,以及每个语句涉及的S中的API,除了prompt,作者还使用了ICL
- 作者从DFS得到启发,让ChatGPT每次对话时选择一个可用的API,然后提供API的结果,除了第一轮,ChatGPT每次选择的api除了正常api还包括give up 和 finish两个额外的api,利用DFSDT方法和ChatGPT,作者获取了大量query对应的api调用过程
- 为了评估调用过程的合理性,作者参考AlpacaEval,提出了ToolEval,使用ChatGPT判断这个调用过程是否解决了查询语句中的问题(Pass Rate),以及两个查询过程之间谁更好(Win Rate)。作者通过文字详细描述了两个指标的判断标准来prompt ChatGPT
- 为了向LLM推荐恰当的API,作者训练了一个SentenceBert来计算query和api document的embedding,通过embedding的相似度来选择api,训练过程中使用2中的query和相关api作为正例,采样部分其他api作为负例
- 作者将3中得到的(query, 调用过程)使用ToolEval筛选出其中pass的样本,将这这些样本作为训练集以对话的形式微调llama