工具操作的一个关键实现是
动作生成器
A,它将目标 g 映射到 API 调用 Cg。由于开源 LLM 可能没有看到有关相关 API 的信息,因此提供一个 m 个候选 API 函数 D = {d0, d1, ··· , dm} 的池进行访问,将这个 LLM(M)增强为动作生成器。由于 LLM 的输入序列长度限制,提供了一个可选的检索器 R 来保留 API 文档的相关子集 Dg = R (g, D) ∈ D。因此,动作生成器生成 API 调用序列 Cg = A ( g, Dg , O),其中 O 表示可以包含在提示中的可选信息。这是一种简单的检索增强生成(RAG)方式 [18,25,26],在研究中采用了现成的检索器实现 [27],但也强烈鼓励社区探索为动作生成器量身定制的算法。
如下是API调用生成的算法总结:
如上图所示,动作生成器可以在单步或多步场景中与软件交互。
在单步场景中,动作生成器直接生成 API 调用序列 Cg = A (g, Dg , ∅)。
在多步场景中,动作生成器生成一系列 API 调用序列 Cg = ∪i (Cg,i),其中每片段 Cg,i 用于与预定义环境 E 交互并生成观察值 Oi = E(Cg,i) 。
然后使用观察结果生成新片段 Cg,i+1 = A (g, Dg, Oi)。
该过程停止在退出状态。
在本文的其余部分中,用单步设置。
为了评估开源 LLM 的工具操作能力,将它们与 OpenAI GPT-4 API 进行比较。在这个初步比较中,最初预计封闭式LLM将在工具操作方面表现出优势,正如在传统 NLP 任务中观察到的那样 [12]。然而,观察的差距明显大于预期。例如,在家庭搜索任务中,开源 LLM 很难生成正确的 API 调用,导致与零样本 GPT-4 API 相比有 70% 的成功率差距,如表所示。
分析开源LLM在工具操作方面的行为,通过分析天气查询任务中的常见错误,发现强大的工具操作能力的三个挑战。如表所示,开源LLM通常在
(1) API 选择、(2) API 参数填充
以及
(3) 生成合法且可执行的代码
等面临困难。
观察的是,API 选择失败通常涉及使用不正确的 API,甚至产生幻觉的不存在的 API 名称。为了定量地了解 API 选择的内在能力,将开源 LLM 与 GPT-4 进行比较,但在推理过程中不提供任何文档或上下文演示。如图所示的天气查询工具 OpenWeather 的结果表明,GPT-4 可以选择正确的 API,无需超出目标的额外信息,而开源模型则陷入困境。这种能力差异导致
封闭式LLM可能会在训练期间内化 API 使用知识
。
动作生成器选择适当的 API 后,接下来的挑战在于解析目标描述并填充 API 参数。
在此阶段,开源模型经常为所需的 API 参数提供错误的值。
如表所示,参数的混乱导致了开源模型中高达 63% 的失败。
开源LLM的第三个常见失败是不可执行的生成。此类失败包括 API 调用的语言冗长以及遵守基于自然语言的准则等问题,如上上表所示。开源模型有时在 100 个天气查询案例中,有 23% 会出现此类错误。这些观察结果强调了
监管开源LLM以专门生成代码
的必要性。
通过使用示例调整LLM,模型对齐在提高LLM的指令跟随和对话等能力方面发挥着至关重要的作用[14,19,28]。模型与 API 使用示例需要保持一致,提高 API 选择能力的潜力。为了实际利用这种对齐方式进行工具操作,需要一种数据管理策略,而无需大量手动编写示例。为此,设计了一种方法原型,该方法可以从人工选取模板来生成使用示例。
如图描述了生成对齐数据的流程。创建了一些模板,其中包含目标描述和相应的 API 调用。这些模板包含一对或多对占位符(placeholder)。每对都映射到目标中的关键字和相应 API 调用中的参数。还为每个关键字提供候选值池,并随机选择值来填充模板内的占位符。给定一个具有 n 个候选 API 的工具,只需要 O(n) 个人工选取的模板来确保实际的人工监督。具体来说,采用一项原则,即鼓励 n 个 API 中的每一个都出现在至少一个模板中。在实践中,一名开发人员平均需要一天时间才能在基准测试中整理一种软件工具的数据;这包括编写目标模板、提供参数值池并生成数据。带着为所有工具整理的数据,对所有工具联合执行模型对齐微调,可生成单个模型。
前面精心挑选的预言示例在改善参数填充方面的功效。
然而,从预言延伸到实际的上下文演示面临两个挑战。
首先,给定 n 个候选 API 函数,与不同目标相关的 API 调用组合,呈指数级增长。
因此,LLM应该能够基于有限数量的例子推广到各种各样的目标。
其次,为了确保有效的演示,重要的是仅向LLM提供相关示例,而无需人工干预。
为了满足上述两个需求,用演示检索器模块增强了开源LLM。该模块围绕一个存储库,其中每个 API 都需要仅出现在一个人工策划的演示中。这意味着只需要 O(n) 个示例。在这些演示示例中,检索器选择语义上与目标描述最相似的示例。
为了在实践中验证演示示例的有效性,凭经验证明,检索的演示可以提高示例存储库中未见过的API 组合目标成功率。特别是,在家庭搜索任务上评估了这种方法,该任务公开了 15 个 API 函数,并且需要多个函数来完成每个目标。由于只有 10 个人工策划的演示在 API 组合方面与 100 个测试用例中的任何一个都不完全匹配,检索的演示可以将开源 LLM 的成功率提高高达 79%,并使 GPT-4 近乎完美, 如图所示。这表明演示示例可以仅用大小为 O(n) 的存储库来改进针对未见目标类型的工具操作。