小型大语言模型是弱工具学习者:一种多大语言模型智能体框架
Weizhou Shen, Chenliang Li, Hongzhan Chen, Ming Yan, Xiaojun Quan, Hehong Chen, Ji Zhang, Fei Huang
中山大学计算机学院,中国 阿里巴巴集团 {shenwzh3@mail2.sysu.edu.cn, quanxj3@mail.sysu.edu.cn, ym119608@alibaba-inc.com}
https://github.com/X-PLUG/Multi-LLM-Agent
摘要
大语言模型(LLM)智能体显著扩展了独立 LLM 的能力,使其能够与外部工具(如 API、函数)交互,并以自主方式完成各种任务。工具使用的挑战要求 LLM 不仅要准确理解用户查询并生成答案,还要擅长任务规划、工具调用和结果总结。虽然传统工作侧重于训练一个具备所有这些能力的单一 LLM,但性能局限性变得显而易见,特别是在较小的模型中。为了克服这些挑战,我们提出了一种新颖的方法,将上述能力分解为规划器(planner)、调用器(caller)和总结器(summarizer)。每个组件由一个专注于特定能力的单一 LLM 实现,并与其他组件协作完成任务。这种模块化框架便于单独更新,并为构建每种能力提供了使用较小 LLM 的潜力。为了有效地训练该框架,我们引入了一种两阶段训练范式。首先,我们在整个数据集上微调一个骨干 LLM,而不区分子任务,从而使模型对任务有全面的理解。其次,使用微调后的 LLM 分别实例化规划器、调用器和总结器,并在各自的子任务上进行持续微调。在各种工具使用基准测试上的评估表明,我们提出的多 LLM 框架超越了传统的单 LLM 方法,突显了其在工具学习中的功效和优势。
1. 引言
大语言模型(LLM)以其在理解和生成文本方面的卓越能力彻底改变了自然语言处理。尽管它们具有令人印象深刻的能力,但 LLM 并非没有局限性。值得注意的是,它们缺乏领域特异性、实时信息,并且在解决数学(Gou 等人,2023)和程序编译(OpenAI,2023a)等专业问题时面临挑战。因此,将 LLM 与外部工具(如 API 调用和 Python 函数)集成对于扩展其能力和提高整体性能变得至关重要。因此,LLM 智能体已成为学术界和工业界的一个突出领域,利用大语言模型来确定何时以及如何利用外部工具来处理各种任务。
除了探索像 GPT-4 这样的专有 LLM 外,研究人员还积极致力于通过在多样化的工具使用数据集上微调开源 LLM 来开发可定制的智能体系统(Patil 等人,2023;Tang 等人,2023;Qin 等人,2023b;Gou 等人,2023)。工具学习的挑战要求 LLM 足够大且复杂。这些模型不仅必须理解用户查询,还必须擅长任务规划、工具选择和调用以及结果总结(Yujia 等人,2023)。这些能力利用了 LLM 的不同方面;例如,规划更依赖于推理能力,而工具选择和调用需要合法的请求编写,结果总结则需要熟练的结论得出技能。虽然传统方法(Qin 等人,2023b;Gou 等人,2023;Zeng 等人,2023)侧重于训练一个具备所有这些能力的单一开源 LLM,但已经观察到显著的性能限制,特别是在较小的开源 LLM 中(Touvron 等人,2023a,b)。此外,在实际场景中,工具可能会频繁更新,此时整个 LLM 可能需要重新训练。
为了解决这些挑战,我们提出了一种用于工具学习的多 LLM 智能体框架,即 -UMi。如图 1 所示,-UMi 将单一 LLM 的能力分解为三个组件,即规划器、调用器和总结器。这些组件中的每一个都由一个单一的 LLM 实现,并经过训练以专注于特定的能力。规划器旨在根据系统的当前状态生成基本原理,并在选择调用器或总结器以生成下游输出之间进行权衡,甚至决定终止执行。调用器由基本原理引导,负责调用特定工具。总结器由规划器引导,根据执行轨迹撰写最终的用户答案。这些组件无缝协作以完成各种任务。与以前的方法相比,我们的模块化框架具有三个明显的优势。首先,每个组件都接受针对指定角色的训练,确保每种能力的性能得到增强。其次,模块化结构允许根据需要对每个组件进行单独更新,确保了适应性和简化的维护。第三,由于每个组件仅专注于特定的能力,因此可以使用潜在的较小 LLM。
为了有效地训练这种多 LLM 框架,我们引入了一种新颖的从全局到局部的渐进式微调策略(GLPFT)。首先,在原始训练数据集上训练一个 LLM 骨干,而不区分子任务,从而增强对工具学习任务的全面理解。创建该 LLM 骨干的三个副本,分别实例化规划器、调用器和总结器。在第二阶段,训练数据集被重新组织为针对每个 LLM 在工具使用中的角色量身定制的新数据集,并在各自的数据集上对规划器、调用器和总结器进行持续微调。
我们采用 LLaMA-2(Touvron 等人,2023b)系列来实现 LLM 骨干,并在几个工具学习基准测试(Qin 等人,2023b;Tang 等人,2023)上评估我们的 -UMi 智能体。实验结果表明,我们提出的框架在各种模型和数据规模上都优于单 LLM 方法。此外,我们展示了 GLPFT 策略对于我们框架成功的必要性,并深入研究了性能提升背后的原因。最后,结果证实了我们的假设,即较小的 LLM 可以用于我们的多 LLM 框架中,以培养个人的工具学习能力并获得具有竞争力的整体性能。
总而言之,这项工作做出了三个关键贡献。首先,我们证明了小型 LLM 是弱工具学习者,并引入了 -UMi,这是一种用于构建 LLM 智能体的多 LLM 框架,在工具使用方面优于现有的单 LLM 方法。其次,我们提出了一种 GLPFT 微调策略,该策略已被证明对我们框架的成功至关重要。第三,我们进行了彻底的分析,深入研究了数据缩放定律,并调查了我们框架卓越性能背后的根本原因。

2. 相关工作
2.1 工具学习
LLM 使用外部工具的能力已成为 AI 智能体开发中的关键组件,吸引了迅速增长的关注(Qin 等人,2023b;Schick 等人,2023;Yang 等人,2023b;Shen 等人,2023;Patil 等人,2023;Qin 等人,2023a)。Toolformer(Schick 等人,2023)是工具学习的开创性工作之一,以自监督方式使用工具。随后,各种外部工具被用于以多种方式增强 LLM,包括提高实时事实知识(Yang 等人,2023a;Nakano 等人,2021)、多模态理解和生成(Yang 等人,2023b;Wu 等人,2023a;Yang 等人,2023c)、代码和数学推理(Gou 等人,2023;OpenAI,2023a)以及特定 AI 模型和 API 的领域知识(Shen 等人,2023;Li 等人,2023;Qin 等人,2023b)。与之前依赖单一 LLM 进行工具学习的方法不同,我们引入了一种专为较小的开源 LLM 设计的新型多 LLM 协作工具学习框架。该框架将 LLM 的综合能力分解为不同的角色,即规划器、调用器和总结器。
2.2 LLM 驱动的智能体
利用 ChatGPT(OpenAI,2022)和 GPT-4(OpenAI,2023b)等 LLM 的能力,AI 智能体系统已在多种场景中得到应用。例如,BabyAGI(Nakajima,2023)和 AutoGPT(Gravitas,2023)等解决方案已被开发用于解决日常问题,而 Voyager(Wang 等人,2023)和 Ghost(Zhu 等人,2023)则在 Minecraft 游戏中进行自由探索。此外,MetaGPT(Hong 等人,2023)、ChatDev(Qian 等人,2023)和 AutoGen(Wu 等人,2023b)为软件开发和问题解决量身定制的多智能体框架做出了贡献。
已经提出了各种技术来从不同角度增强智能体能力。思维链系列(Wei 等人,2022;Wang 等人,2022;Yao 等人,2022, 2023)和 Reflextion(Shinn 等人,2023)有助于增强智能体的推理能力,而 MemoryBank(Zhong 等人,2023)则用长期记忆丰富了智能体。最近也出现了微调开源 LLM 作为智能体的努力,例如 FiREACT(Chen 等人,2023)和 AgentTuning(Zeng 等人,2023)等工作。然而,这些努力主要集中在微调单一 LLM 上,这与我们的方法不同,我们探索了一种专门用于工具学习的多 LLM 智能体微调的有效方法。
3. 方法论
3.1 预备知识
工具学习智能体是旨在通过一系列决策过程和工具使用来协助用户完成任务的系统(Yujia 等人,2023)。近年来,这些智能体通常遵循 ReACT 框架(Yao 等人,2022)。智能体的骨干是一个表示为 的 LLM。给定用户指令 和系统提示 ,智能体逐步解决指令。在第 步,LLM 根据指令和系统的当前状态生成基本原理 和动作 :
其中 表示之前的执行轨迹。这里, 表示当提供动作 时工具返回的观察结果。在交互的最后一步,智能体生成基本原理 ,表明指令 已解决,并附带最终答案 ,或者它将放弃此执行运行。因此,此步骤中不包含观察结果。
3.2 -UMi 框架
如前所述,工具学习任务对 LLM 的能力提出了重大要求,包括任务规划、工具调用和结果总结。使用单一开源 LLM 处理所有这些能力,特别是在选择较小的 LLM 时,似乎具有挑战性。为了解决这一挑战,我们引入了 -UMi 框架,它将工具学习任务分解为三个子任务,并将每个子任务分配给一个专用的 LLM。图 1 展示了我们框架的说明,它结合了三个不同的 LLM 组件:规划器 、调用器 和总结器 。这些组件在工具使用中的角色不同,每个组件模型都有独特的任务定义、系统提示和模型输入。

-UMi 的工作流程如图 2 所示。在接收到用户指令 后,规划器生成包含此步骤提示的基本原理。这可能会触发调用器与工具交互,并随后从工具接收观察结果。这种迭代的规划器-调用器-工具循环持续进行,直到规划器确定它已收集到足够的信息来解决指令。此时,规划器转换为总结器以生成最终答案。或者,如果规划器认为指令无法解决,它可能会放弃执行。
规划器:规划器承担规划和决策的责任,充当智能体框架的“大脑”。具体而言,规划器的模型输入包括系统提示 、用户指令 和之前的执行轨迹 。使用此输入,规划器生成基本原理 :
遵循基本原理,规划器生成下一步的决策:(1)如果决策是“Next: Caller”,则将激活调用器并生成用于调用工具的动作。(2)如果决策是“Next: Summarizer”,则将激活总结器以生成用户的最终答案,并且智能体执行将结束。(3)如果决策是“Next: Give up”,则意味着用户的指令在当前情况下无法解决,系统将被终止。
调用器:与工具交互需要 LLM 生成合法且有用的请求,这在微调期间可能与其他能力(如推理和通用响应生成)冲突。因此,我们训练一个专门的调用器来生成使用工具的动作。调用器将用户指令 和之前的执行轨迹 作为输入。为了使调用器在当前步骤中专注于规划器的基本原理 ,我们还设计了一个提示 来明确提醒调用器:
总结器:智能体的最终响应旨在为用户提供信息丰富且有用的信息,这与主要侧重于规划和推理的基本原理不同。因此,我们采用一个专门的总结器,负责生成最终答案 。该模型利用一个简洁的提示 ,旨在引导模型专注于总结执行轨迹并向用户呈现答案:
在图 6 和图 7 中,我们展示了 -UMi 在下游任务上的几个案例。

3.3 从全局到局部的渐进式微调
有效地微调上述多 LLM 系统是一项复杂的任务:一方面,生成基本原理、动作和最终答案可以在训练过程中相互促进,并增强模型对整个智能体任务的理解(Chen 等人,2023)。另一方面,模型容量的限制使得微调小型 LLM 以同时在生成基本原理、动作和最终答案方面达到峰值性能具有挑战性(Dong 等人,2023)。考虑到这两点,我们为 -UMi 提出了一种从全局到局部的渐进式微调(GLPFT)策略。该策略背后的动机是首先利用基本原理、动作和最终答案的生成可以相互增强的机制。然后,一旦单一 LLM 达到其性能上限,它随后被拆分为规划器、调用器和总结器进行进一步微调,以增强其在子任务中的能力,并减轻由于模型容量有限而导致的性能限制。
如图 3 所示,这种 GLPFT 策略包含两个不同的阶段。第一阶段涉及全局微调,我们在原始训练数据集上微调骨干 LLM,而不区分子任务。在此阶段之后,骨干 LLM 被训练为按顺序输出基本原理、动作和答案,如 3.1 节中所述。然后,我们创建三个骨干 LLM 的副本,分别指定为规划器、调用器和总结器。
第二阶段是局部微调,我们重新组织训练数据集,使其针对每个 LLM 的角色量身定制,如 3.2 节中所述。然后,我们继续在各自的数据集上微调规划器、调用器和总结器,从而进一步增强它们在每个子任务中的特定能力。在此局部微调阶段,我们选择重用在全局微调阶段策划的用户指令集。对训练集所做的唯一调整是训练数据格式的更改。如图 3 所示,第二阶段规划器、调用器和总结器的微调目标分别面向生成基本原理、动作和最终答案。同时,来自其他文本跨度的梯度被停止。同时,我们细化了规划器、调用器和总结器训练数据的系统提示,详见附录 A。
3.4 讨论
所提出的 -UMi 框架和 GLPFT 策略建立在三个主要原则之上。首先,小型 LLM(如 LLaMA-7B)的有限能力和容量在工具学习任务的微调过程中构成了挑战。相比之下,-UMi 将复杂任务分解为更简单的任务,减少了 LLM 的工作量。其次,-UMi 在提示设计方面提供了更高的灵活性,使我们能够为每个 LLM 创建特定的提示和模型输入,以充分利用其在子任务中的能力。第三,GLPFT 策略弥合了在整个工具学习任务上微调与在每个子任务上微调之间的差距,从而使多 LLM 系统的微调过程更加成功。在接下来的实验部分,我们将重点展示这些原则。
最近的研究探索了跨各种领域基于 LLM 的多智能体系统,例如社交通信(Park 等人,2023;Wei 等人,2023)、软件开发(Qian 等人,2023;Hong 等人,2023)和问题解决(Wu 等人,2023b)。这些框架通常依赖于强大的闭源 LLM,需要自动协作和反馈等高级能力——这些能力超出了开源小型 LLM 的范围。相比之下,我们的 -UMi 旨在通过集成多个 LLM 来形成智能体,从而减轻 LLM 在工具使用任务中的工作量,特别适用于开源小型 LLM。此外,我们引入了用于微调多 LLM 系统的新颖 GLPFT 方法,这是现有多智能体工作中未发现的贡献。
4. 实验设置
4.1 基准测试
我们在两个工具学习基准测试上评估 -UMi 的有效性:ToolBench(Qin 等人,2023b)和 ToolAlpaca(Tang 等人,2023)。这些任务涉及集成 API 调用以完成任务,其中智能体必须准确选择适当的 API 并编写必要的 API 请求。此外,我们根据测试实例中使用的工具在训练期间是否可见,将 ToolBench 的测试集划分为域内(in-domain)和域外(out-of-domain)。这种划分使我们能够在分布内和分布外场景中评估性能。有关这些数据集的更多详细信息和统计数据,请参阅附录 B。我们还在其他基准测试上评估 -UMi,例如用于数学推理的程序辅助智能体(Hendrycks 等人,2021;Cobbe 等人,2021)。结果显示在附录 D 中。
4.2 指标
ToolBench 中的任务涉及通过 RapidAPI 调用 API。此过程经常遇到 API 中断等问题,这影响了比较的公平性。为了解决这个问题,我们为 ToolBench 引入了两种类型的评估。在 5.1 节中,我们首先将智能体的输出与每个步骤的带注释参考进行比较,这避免了实时 API 调用。此评估的指标包括 Li 等人(2023)提出的动作 EM(Act. EM)、参数 F1(Arg. F1)和 Rouge-L(R-L)。此外,我们检查了 API 名称幻觉(Hallu.)的频率以及智能体在每一步使用工具调用、生成答案或放弃的规划决策的准确性(Plan ACC)。参考注释基于 ToolBench 中提供的经过验证的 ChatGPT 执行结果。我们还在 5.2 节中提供了基于实时 RapidAPI 调用的结果,这是 ToolBench 团队使用的原始评估方法。
对于 ToolAlpaca,我们评估过程正确率(Proc.)和最终答案正确率(Ans.)(Tang 等人,2023),均由 GPT-4 评估。
4.3 实现细节
我们选择 LLaMA-2-chat-7B/13B(Touvron 等人,2023b)作为实现我们框架的骨干。在 GLPFT 的第一阶段,我们以 的学习率对骨干 LLM 进行 2 个 epoch 的微调。然后,我们创建三个微调后的骨干副本,分别实例化规划器、调用器和总结器。在第二阶段,我们以 的降低学习率微调这三个 LLM。规划器和调用器进行 1 个 epoch 的微调,而总结器进行 2 个 epoch 的微调。我们将全局批处理大小设置为 48,并采用 DeepSpeed ZeRO Stage3(Rajbhandari 等人,2021)来加速微调过程。所有实验结果均使用贪婪解码获得,最大序列长度设置为 4096。
4.4 基线
我们将我们的方法与三种基线方法进行了比较,即 Single-LLM、Multi-LLM 和 Single-LLM。Single-LLM 指的是传统的单 LLM 工具学习方法。Multi-LLM 涉及直接在各自的子任务数据集上微调规划器、调用器和总结器,而不采用我们的两阶段微调策略。Single-LLM 指的是使用相同的 LLM 来履行规划器、调用器和总结器的角色。这个特定的 LLM 在包含三个子任务数据集的组合数据集上进行微调,其功能类似于我们的多 LLM 框架。我们还评估了 ChatGPT 和 GPT-4 在 0-shot 设置下的性能,以及 ToolLLaMA(Qin 等人,2023b),这是一个在 ToolBench 上微调的 7B LLaMA 模型。
5. 结果与分析
5.1 总体结果
主要结果呈现在表 1 中。我们从五个角度阐述了我们的观察结果:
首先,与 ChatGPT 和 ToolLLaMA 相比,我们的 -UMi 在除 ToolAlpaca 上的答案正确性之外的所有指标上都优于它们。-UMi 在 Plan ACC 和 R-L 方面大大超过了这两个基线,证明了其在规划执行步骤和生成最终答案方面与带注释参考的一致性。值得一提的是,ToolLLaMA 仅在输入长度为 8192 时表现出可接受的性能。在输入长度为 4096 时,ToolLLaMA 在各种指标上表现出恶化,特别是表现出非常高的幻觉率。相比之下,-UMi 仅需要 4096 的输入长度即可达到令人满意的性能。我们将此归功于我们的多 LLM 系统设计,它允许每个小型 LLM 专注于其子任务,从而降低了对输入长度的要求。
其次,-UMi 优于 Single-LLM 智能体。在 ToolBench 上,我们揭示了 -UMi 的实质性改进,特别是在 Plan ACC、Act. EM、Hallu. 和 Arg. F1 方面。在 ToolAlpaca 上,-UMi 也超过了具有 7B 和 13B 骨干的 Single-LLM。这些发现不仅证实了 -UMi 在增强智能体规划和 API 调用能力方面的有效性,而且还表明幻觉显著减少,这可以显著提高用户满意度。
第三,在比较不同模型大小的方法结果时,我们注意到具有 13B 骨干的智能体表现出优于其 7B 对应物的性能。这一观察结果意味着从 7B 模型到 13B 模型的转变导致工具利用能力有了显著提高。值得注意的是,具有 7B 骨干的 -UMi 甚至优于具有 13B LLM 的 Single-LLM 基线,证实了我们之前的假设,即较小的 LLM 可以用于我们的多 LLM 框架中,以开发每种能力并获得具有竞争力的整体性能。
| 模型 | ToolBench (in-domain) | ToolBench (out-of-domain) | ToolAlpaca | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Plan ACC | Act. EM | Hallu. | Arg. F1 | R-L | Plan ACC | Act. EM | Hallu. | Arg. F1 | R-L | Proc. | Ans. | |
| Close-Source LLM | ||||||||||||
| ChatGPT (0-shot) | 83.33 | 58.67 | 7.40 | 45.61 | 23.08 | 81.62 | 54.67 | 8.19 | 40.08 | 22.85 | 33 | 37 |
| GPT-4 (0-shot) | 80.28 | 55.52 | 5.98 | 48.74 | 28.69 | 77.80 | 55.26 | 5.12 | 47.45 | 30.61 | 41 | 44 |
| Model Size = 7B | ||||||||||||
| ToolLLaMA (len = 4096) | 66.42 | 19.47 | 33.94 | 15.98 | 2.06 | 68.21 | 30.75 | 25.35 | 25.07 | 5.78 | - | - |
| ToolLLaMA (len = 8192) | 77.02 | 47.56 | 4.03 | 42.00 | 15.26 | 77.76 | 45.07 | 3.45 | 40.41 | 18.10 | - | - |
| Single-LLM | 81.92 | 53.26 | 2.32 | 45.57 | 42.66 | 84.61 | 56.54 | 2.26 | 50.09 | 47.99 | 11 | 11 |
| Multi-LLM | 87.52 | 45.11 | 7.71 | 38.02 | 41.01 | 88.42 | 53.40 | 2.52 | 45.79 | 46.39 | 2 | 9 |
| Single-LLM | 85.06 | 51.83 | 2.96 | 44.25 | 27.40 | 86.55 | 56.89 | 2.77 | 49.50 | 32.58 | 28 | 18 |
| -UMi | 88.24 | 55.50 | 0.53 | 48.97 | 39.98 | 87.91 | 58.02 | 2.32 | 50.55 | 42.59 | - | - |
| -UMi | 88.92 | 58.94 | 0.57 | 52.24 | 43.17 | 89.72 | 60.47 | 0.45 | 53.60 | 46.26 | 41 | 35 |
| Model Size = 13B | ||||||||||||
| Single-LLM | 81.01 | 59.67 | 1.53 | 52.35 | 42.16 | 86.74 | 60.04 | 2.03 | 52.94 | 48.46 | 33 | 29 |
| Multi-LLM | 86.49 | 50.54 | 5.11 | 41.96 | 36.21 | 87.45 | 56.71 | 3.23 | 47.49 | 41.62 | 22 | 19 |
| Single-LLM | 86.36 | 58.96 | 2.00 | 49.28 | 28.41 | 86.64 | 62.78 | 3.42 | 53.29 | 35.46 | 28 | 16 |
| -UMi | 86.33 | 60.07 | 0.39 | 53.11 | 35.09 | 87.75 | 61.63 | 2.95 | 52.54 | 37.70 | - | - |
| -UMi | 87.87 | 63.03 | 0.37 | 57.65 | 43.46 | 88.73 | 64.21 | 0.24 | 57.38 | 42.50 | 41 | 35 |
表 1:ToolBench 和 ToolAlpaca 上的总体评估结果。“ToolLLaMA (len = 4096)”和“ToolLLaMA (len = 8192)”分别表示将 ToolLLaMA 的最大输入长度设置为 4096 和 8192。
第四,-UMi 优于 Multi-LLM 和 Single-LLM。Multi-LLM 在评估 API 调用能力的指标(如 Act. EM、Hallu. 和 Arg. F1)上甚至表现出比 Single-LLM 基线次优的性能。这一发现突显了 Multi-LLM 在每个 LLM 上训练单个子任务时的局限性,损害了对工具使用任务的全面理解。此外,Single-LLM 的次优性能揭示了与 7B 和 13B 模型容量相关的局限性。有限的模型容量阻碍了智能体同时有效地履行规划器、调用器和总结器的角色。相比之下,通过应用 GLPFT 策略,-UMi 成功地减轻了这一限制,展示了其在实现全面工具学习能力方面的有效性。
最后,-UMi 表示在 GLPFT 的第一阶段微调中,没有重用用户指令,而是为 GLPFT 的第二阶段采用了新的一组用户指令。这种设置受到 Chung 等人(2022)的启发,他们证明了在微调期间增加用户指令的多样性可以提高 LLM 的性能和通用性。然而,如表 1 所示并在图 4 中可视化,尽管与 -UMi 相比增加了指令的多样性,但 -UMi 并没有优于 -UMi。我们将这一意外结果归因于以下解释:由于两个训练阶段的目标不同,使用不同的用户指令集(每个指令集都有其独特的分布)可能会引入有害的归纳偏差,即以单 LLM 格式解决一组指令,而以多 LLM 格式解决另一组指令。相比之下,通过重用用户指令,减轻了来自不同集合的分布变化的影响。
5.2 ToolBench 上的实时测试
为了评估 LLM 通过 RapidAPI 解决实际任务的性能,我们遵循 ToolBench 团队提出的 ToolEval 方法(Qin 等人,2023b)对 ToolBench 的测试集进行实时评估。考虑中的 LLM 包括 Claude-2(Anthropic,2023)、ChatGPT、GPT-4 和 ToolLLaMA。我们为这些 LLM 应用两种推理策略来构建工具学习智能体:3.1 节中介绍的 ReACT 方法,以及基于深度优先搜索的决策树(DFSDT)(Qin 等人,2023b),它使智能体能够评估和选择不同的执行路径。包括两个指标来衡量这些 LLM 的性能:pass rate(计算成功完成的任务百分比)和 win rate(将智能体的解决方案路径与标准基线 ChatGPT-ReACT 进行比较)。上述两个指标由 ChatGPT 评估器根据精心制定的标准进行评估。表 2 中呈现的实证结果表明,我们的 -UMi (7B) 在 pass rate(分别提高 +6.1 和 +10.2)和 win rate(分别提高 +1.6 和 +5.9)方面以显著优势超过了 ChatGPT 和 ToolLLaMA。
| 方法 | 模型 | I1-Inst. | I1-Tool | I1-Cat. | I2-Inst. | I2-Cat. | I3-Inst. | 平均 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pass | Win | Pass | Win | Pass | Win | Pass | Win | Pass | Win | Pass | Win | Pass | Win | ||
| ReACT | Claude-2 | 5.5 | 31.0 | 3.5 | 27.8 | 5.5 | 33.8 | 6.0 | 35.0 | 6.0 | 31.5 | 14.0 | 47.5 | 6.8 | 34.4 |
| ChatGPT | 41.5 | - | 44.0 | - | 44.5 | - | 42.5 | - | 46.5 | - | 22.0 | - | 40.2 | - | |
| ToolLLaMA | 25.0 | 45.0 | 29.0 | 42.0 | 30 | 33.0 | 47.5 | 30.5 | 50.8 | 31.5 | 41.8 | 25.0 | 55.0 | 29.0 | |
| GPT-4 | 53.5 | 60.0 | 50.0 | 58.8 | 53.5 | 63.5 | 67.0 | 65.8 | 72.0 | 60.3 | 47.0 | 78.0 | 57.2 | 64.4 | |
| DFSDT | Claude-2 | 20.5 | 38.0 | 31.0 | 44.3 | 18.5 | 43.3 | 17.0 | 36.8 | 20.5 | 33.5 | 28.0 | 65.0 | 43.1 | 43.5 |
| ChatGPT | 54.5 | 60.5 | 65.0 | 62.0 | 60.5 | 57.3 | 75.0 | 72.0 | 71.5 | 64.8 | 62.0 | 69.0 | 64.8 | 64.3 | |
| ToolLLaMA | 57.0 | 55.0 | 61.0 | 55.3 | 62.0 | 54.5 | 77.0 | 68.5 | 77.0 | 58.0 | 66.0 | 69.0 | 60.7 | 60.0 | |
| GPT-4 | 60.0 | 67.5 | 71.5 | 67.8 | 67.0 | 66.5 | 79.5 | 73.3 | 77.5 | 63.3 | 71.0 | 84.0 | 71.1 | 70.4 | |
| -UMi (7B) | 65.0 | 59.5 | 68.0 | 66.0 | 64.0 | 57.0 | 81.5 | 76.5 | 76.5 | 72.0 | 70.0 | 63.0 | 70.9 | 65.9 | |
| -UMi (13B) | 65.5 | 61.5 | 69.0 | 66.0 | 65.0 | 62.5 | 84.5 | 75.0 | 81.0 | 74.5 | 71.0 | 66.0 | 72.2 | 67.7 |
表 2:ToolBench 上的实时评估结果。“ReACT”和“DFSDT”表示用于构建智能体的推理策略,详见 5.2 节。“Win”衡量每个智能体相对于 ChatGPT-ReACT(“Method”=ReACT,“Model”=ChatGPT)的相对胜率,后者没有关联的胜率。

虽然 -UMi 在胜率上表现不如 GPT-4,但它在通过率上与 GPT-4 持平,甚至在某些测试组(如 I1-Inst. 和 I2-Inst.)中超过了它。结合 5.1 节和本节的发现,我们注意到我们的多 LLM 智能体在 ToolBench 的各种指标上优于几个已建立的基线,验证了其有效性。
5.3 数据缩放定律
为了评估训练数据量对性能的影响,我们使用 7B 骨干在 ToolBench 上进行了数据缩放定律分析,将带注释的训练实例数量从 12.1k 变化到 62.7k。不同指标的结果如图 4 所示。从结果中可以得出几个观察结果。首先,当将 -UMi(实心红线)与 Single-LLM(实心蓝线)进行比较时,在各种训练数据规模下,Plan ACC、Act. EM、Hallu. 和 Arg. F1 等指标都有显著且持续的增强。虽然在直接反映总结器性能的 R-L 指标上仅观察到微小的改进,但这表明我们框架的性能增强主要归功于规划器和调用器的分离。其次,Multi-LLM 和 Single-LLM 的性能在除 Plan ACC 之外的所有指标中都表现出剧烈波动,表明通过直接微调或多任务微调来训练框架是不稳定的。第三,Single-LLM 在不同数据规模下在不同指标上实现了最优结果。例如,它在 31.3k 实例时在 Plan ACC 上达到峰值性能,在 62.7k 实例时在 Arg. F1 和 R-L 上达到最佳性能。这表明获得一个在所有指标上都表现良好的单一 LLM 具有挑战性。相比之下,我们框架的性能随着数据规模的增加在所有指标上持续提高。

5.4 -UMi 为何有效?
我们跟踪 -UMi 方法的训练过程,以检查它与 Single-LLM 基线的区别。为了进一步研究模型在训练过程中每种能力是如何演变的,我们跟踪了目标响应的基本原理、动作和答案组件的训练损失。结果如图 5 所示。如 4.3 节所述,-UMi 采用 GLPFT,并在两个训练 epoch 后偏离了 Single-LLM。
| 模型 | 存储 | Flops | 训练时间 | GPU 显存 | 推理时间(每实例) |
|---|---|---|---|---|---|
| Model Size = 7B | |||||
| Single-LLM | 7B | 41.54h | 206G | 6.41s | |
| -UMi | 7B*3 | 63.34h | 206G | 6.27s | |
| Model Size = 13B | |||||
| Single-LLM | 13B | 89.56h | 308G | 11.91s | |
| -UMi | 13B*3 | 129.96h | 308G | 11.09s |
表 3:训练和推理成本。
因此,我们的讨论集中在第三个 epoch 开始的 -UMi 训练曲线上。
绘制的曲线显示,在最初的两个 epoch 中,基本原理、动作和答案组件的训练损失持续下降。然而,在第三个 epoch,Single-LLM 的损失表现出近乎停滞的趋势。相比之下,-UMi 在与基本原理和动作相关的损失上经历了持续的减少,表明我们的 -UMi 框架内进行了进一步的优化。
这些观察结果表明,-UMi 成功的关键因素在于其能够超越 Single-LLM 的性能上限。这是通过利用 GLPFT 并将智能体分解为多 LLM 系统来实现的,即使在 Single-LLM 通过充分微调达到其上限能力之后也是如此。
5.5 -UMi 的成本
鉴于 -UMi 作为多 LLM 框架运行,它在训练、存储和部署方面引入了潜在的额外成本。表 3 总结了 Single-LLM 和 -UMi 的相关成本,基于 8 个 Nvidia A100 GPU(40G 容量)上的执行日志。我们的观察结果有三点。首先,由于其由规划器、调用器和总结器组成,假设它们使用相同大小的骨干,-UMi 需要三倍于 Single-LLM 框架的存储容量。其次,-UMi 的训练需要 1.3 倍的计算资源和 1.5 倍的训练时长,而训练的 GPU 显存成本在两种方法之间保持一致。第三,在推理过程中,Single-LLM 和 -UMi 所需的时间相似,因为我们只是将子任务(基本原理、动作和答案)分配给三个 LLM,而不强迫它们生成额外内容,因此在推理时几乎没有带来额外成本。
请注意,基于表 1 中呈现的发现,具有 7B 骨干的 -UMi 可以优于具有 13B 骨干的 Single-LLM。此外,具有 7B 模型的 -UMi 的成本低于具有 13B 模型的 Single-LLM,无论是在训练还是推理方面。这强调了 -UMi 作为实现甚至超越更大模型性能的一种手段的成本效益。
5.6 案例研究
图 6 和图 7 展示了我们的 -UMi 在 ToolBench 中执行实际任务的两个案例。在图 6 的案例中,用户在指令中指定了可用工具,使工具调用过程更简单。-UMi 框架通过规划器、调用器和总结器的协作,在两步内完成了任务。在图 7 的案例中,-UMi 最初尝试在第 0 步使用 “video_for_simple_youtube_search” 来获取详细的视频信息。然而,它意识到该 API 已损坏且无法调用。因此,规划器通知调用器尝试替代 API 并获取准确信息。最终,用户的任务成功解决。
为了进一步分析我们的 -UMi 和 Single-LLM 框架在任务执行中的具体优势,我们在表 5、6、7 和 8 中展示了一些比较示例。表 5 和 6 展示了仅需要单步工具调用即可完成的简单任务,在这种情况下,-UMi 和 Single-LLM 都能成功完成任务。然而,在表 7 和 8 呈现的复杂任务中,任务需要模型完成一些复合目标,-UMi 的规划器可以快速理解用户的意图,并根据调用器和总结器提供的提示规划步骤。另一方面,Single-LLM 在规划过程中表现出一些不符合用户意图的行为,例如调用与意图不匹配的 API 并进入这些未对齐 API 的循环,最终未能提供足够的信息来完成用户的指令。这一结果表明,-UMi 将 Single-LLM 分解为规划器、调用器和总结器,减轻了模型在推理过程中的负担,使规划器模型能够专注于理解用户的意图并制定有效的计划,从而更好地完成任务。
6. 结论
本文的目标是解决设计和微调单一小型 LLM 以获取工具学习智能体所需广泛能力的挑战。为此,我们引入了 -UMi,这是一种多 LLM 工具学习智能体框架,它将工具学习任务分解为三个不同的子任务,并委托给三个小型 LLM:规划器、调用器和总结器。此外,我们提出了一种从全局到局部的渐进式微调策略,并证明了其在训练多 LLM 框架方面的有效性。我们在四个工具学习基准测试上评估了我们的方法与单 LLM 基线的对比,并辅以各种深入分析,包括数据缩放定律实验。我们的发现突显了我们所提方法的意义,验证了系统分解工具学习任务的设计和渐进式微调策略有助于增强单一 LLM 的上限能力。此外,我们承认利用小型 LLM 超越依赖单一、更大 LLM 的智能体框架的潜力。
7. 局限性
虽然我们的框架已被证明在工具学习任务中优于 Single-LLM 框架,但这项工作仍存在一些局限性。首先,还有额外的探索途径,例如将小型 LLM 与像 GPT-4 这样的强大闭源 LLM 集成,以创建一个“大 + 小”协作的多 LLM 工具学习智能体。其次,我们的框架可以进一步优化,以增强其灵活性和对更广泛智能体任务的适用性。
8. 伦理声明
-UMi 框架是在公开的 ToolBench 和 ToolAlpaca 基准测试上训练的,其原始目的是增强 LLM 的工具调用能力并提高它们协助用户完成任务的性能。该框架未在任何构成伦理风险的数据上进行训练。它使用的骨干模型 LLaMA-2-chat 已经过安全对齐。
参考文献
(此处省略参考文献列表,格式同原论文)
A. 系统提示
A.1 ToolBench 和 ToolAlpaca 的
您有权访问以下 API: {doc} 对话历史是: {history} 您是助手,负责规划下一步做什么,以及是调用器还是结论的回答轮次。 请按以下格式回答: 下一步的思考,后跟 Next: caller 或 conclusion 或 give up。
A.2 ToolBench 和 ToolAlpaca 的
您有权访问以下 API: {doc} 对话历史是: {history} 此步骤的思考是: {thought} 基于思考,按以下格式进行 API 调用: Action: 此步骤应调用的 API 名称,应完全在 {tool_names} 中, Action Input: API 调用请求。
A.3 ToolBench 和 ToolAlpaca 的
根据对话历史得出结论: {history}
A.4 MATH 和 GSM8K 的
通过整合逐步推理和 Python 代码,逐步解决数学问题, 问题是:{instruction} 历史执行日志是: {history} 您是助手,负责规划下一步做什么,并选择调用器生成代码或结论来回答问题。 请按以下格式回答: 下一步的思考,后跟 Next: caller 或 conclusion。
A.5 MATH 和 GSM8K 的
问题是:{instruction} 历史执行日志是: {history} 此步骤的思考是: {thought} 为此步骤生成代码
A.6 MATH 和 GSM8K 的
问题是:{instruction} 历史执行日志是: {history} 根据对话历史得出结论
B. 基准测试详情
B.1 ToolBench
ToolBench(Qin 等人,2023b)是一个用于评估智能体调用 API 能力的基准测试。ToolBench 团队从 RapidAPI 收集了 16,464 个真实世界 API,总共 125,387 条执行轨迹作为训练语料库。我们随机抽取了 62,694 条执行轨迹作为训练集,平均执行步数为 4.1。
ToolBench 的测试集分为 6 组,即 I1-instruction, I1-tool, I1-category, I2-instruction, I2-category 和 I3-instruction。名称以“instruction”结尾的组意味着这些组中的测试指令使用训练集中的工具,这是域内测试数据。否则,名称以“tool”或“category”结尾的组意味着测试指令不使用训练集中的工具,这是域外测试数据。每组包含 100 条用户指令,因此总域内测试集包含 400 条指令,而域外测试集包含 200 条指令。
ToolBench 中的原始评估指标是 ChatGPT 判断的通过率和胜率。然而,如 4.2 节所述,RapidAPI 中的 API 每天都在更新,这可能导致网络阻塞、API 中断和配额耗尽。因此,为了进行相对公平的比较,我们采用 Modelscope-Agent(Li 等人,2023)的思想,在步骤级别比较我们模型的预测与带注释的 GPT-4 输出。具体而言,对于第 步,我们将 GPT-4 的先前轨迹输入模型,要求我们的框架生成此步骤的基本原理和动作,然后将此步骤生成的原理和动作与 GPT-4 的输出进行比较。
B.2 ToolAlpaca
ToolAlpaca 是另一个用于评估 API 调用的基准测试。与 ToolBench 不同,ToolAlpaca 中的 API 和 API 调用结果是通过模仿真实 API 的工作方式从 ChatGPT 模拟出来的。ToolAlpaca 中的训练实例总数为 4098,每个实例平均有 2.66 个执行步骤。ToolAlpaca 的测试集包含 100 条用户指令。ToolAlpaca 的评估由一个模拟器执行,其中智能体使用 ChatGPT 模拟的工具解决指令。最后,GPT-4 判断智能体的执行过程是否与 ChatGPT 预生成的参考过程一致(Proc. correctness),以及智能体生成的最终答案是否能解决用户指令(Ans. correctness)。
C. ToolBench 上的静态评估
4.2 节中介绍的 ToolBench 评估方法是一种静态方法,它单独评估智能体在每一步的输出。具体而言,对于每一步 ,给定先前执行轨迹 的地面真值注释,智能体生成此步骤的基本原理 和动作 :
然后,通过将生成的 和 与此步骤的带注释地面真值基本原理 和动作 进行比较来计算指标:
这种评估方法的优势如下。在每一步,智能体只需要将先前的地面真值轨迹作为输入,并输出当前步骤的基本原理和动作。这防止了由于网络阻塞、API 中断和任何特定步骤中配额耗尽等因素导致的错误传播,这些因素可能会影响比较的公平性。这种评估方法是对实时评估的有效补充。
D. -UMi 在其他基准测试上的表现
D.1 MATH 和 GSM8K
MATH(Hendrycks 等人,2021)和 GSM8K(Cobbe 等人,2021)基准测试最初旨在测试 LLM 的数学推理能力。遵循 ToRA(Gou 等人,2023),我们采用程序辅助智能体来解决这些数据集中提出的数学问题。在我们的场景中,规划器将生成某些基本原理和注释来指导程序的生成,调用器将生成程序来进行数学计算,最后总结器将得出最终答案。由于 ToRA 尚未发布其训练数据,为了促进我们框架的训练,我们利用 gpt-3.5-turbo-1106(OpenAI,2022)和 gpt-4(OpenAI,2023b)在 MATH 和 GSM8K 的训练集中收集执行轨迹,并过滤掉不导致正确最终答案的轨迹。最后,我们在 MATH 上收集了 5536 条来自 ChatGPT 的轨迹,573 条来自 GPT-4 的轨迹,在 GSM8K 上收集了 6213 条来自 ChatGPT 的轨迹。
MATH 和 GSM8K 的测试集大小分别为 5000 和 1319。在测试期间,我们用每个测试指令喂给我们的智能体,并用 Python 代码解释器执行智能体。我们遵循 MATH 和 GSM8K 的原始评估方法,通过最终答案的准确性来评估智能体的性能。如表 4 所示的评估结果,我们的 -UMi 仍然可以在 MATH 和 GSM8K 上优于基线,验证了其有效性。
| 模型 | MATH ACC | GSM8K ACC |
|---|---|---|
| Model Size = 7B | ||
| Single-LLM | 17.38 | 37.90 |
| Multi-LLM | 15.46 | 38.96 |
| Single-LLM | 14.18 | 27.97 |
| -UMi | 25.60 | 49.73 |
| Model Size = 13B | ||
| Single-LLM | 20.26 | 44.88 |
| Multi-LLM | 20.32 | 44.57 |
| Single-LLM | 15.34 | 34.79 |
| -UMi | 28.54 | 54.20 |
表 4:MATH 和 GSM8K 上的总体结果。


| Case #1 of -UMi In ToolBench | |
|---|---|
| Instruction: I want to explore the catalog of products available in the ’Electronics’ category. Please provide me with the list of products along with their details. | |
| Planner | Based on the user’s request to explore the catalog of products in the ’Electronics’ category, I need to call the ’get_products_in_category_for_demo_project_v13’ function with the arguments ’limit’: 10, ’skip’: 0, and ’category’: ’Electronics’. This will allow me to retrieve the list of products along with their details specifically from the ’Electronics’ category. By calling this function, I can fulfill the user’s request and provide them with the desired information. Next: caller. |
| Caller | Action: get_products_in_category_for_demo_project_v13 Action Input: "{ "limit": 10, "skip": 0, "category": "Electronics"}" |
| Observation | {’products’: [{’id’: 893292, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 893293, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 894481, ’name’: ’Gorgeous Plastic Bench’, ’category’: ’Electronics’}, {’id’: 896484, ’name’: ’Fantastic Rubber Gloves’, ’category’: ’Electronics’}, {’id’: 912179, ’name’: ’daniel’, ’category’: ’electronics’}, {’id’: 916400, ’name’: ’Tasty Frozen Pants’, ’category’: ’Electronics’}, {’id’: 917106, ’name’: ’Tasty Wooden Chips’, ’category’: ’Electronics’}, {’id’: 917821, ’name’: ’Pizza’, ’category’: ’Electronics’}, {’id’: 917875, ’name’: ’Tuna’, ’category’: ’Electronics’}, {’id’: 917998, ’name’: ’Intelligent Frozen Pizza’, ’category’: ’Electronics’}], ’summary’: {’count’: 105}} |
| Planner | I have retrieved the list of products available in the ’Electronics’ category. Here are some of the products along with their details: 1. Product ID: 893292, Name: TV, Category: Electronics 2. Product ID: 893293, Name: TV, Category: Electronics 3. Product ID: 894481, Name: Gorgeous Plastic Bench, Category: Electronics 4. Product ID: 896484, Name: Fantastic Rubber Gloves, Category: Electronics 5. Product ID: 912179, Name: daniel, Category: Electronics 6. Product ID: 916400, Name: Tasty Frozen Pants, Category: Electronics 7. Product ID: 917106, Name: Tasty Wooden Chips, Category: Electronics 8. Product ID: 917821, Name: Pizza, Category: Electronics 9. Product ID: 917875, Name: Tuna, Category: Electronics 10. Product ID: 917998, Name: Intelligent Frozen Pizza, Category: Electronics Next: conclusion. |
| Summarizer | Here are some of the products available in the ’Electronics’ category: 1. Product ID: 893292, Name: TV, Category: Electronics 2. Product ID: 893293, Name: TV, Category: Electronics 3. Product ID: 894481, Name: Gorgeous Plastic Bench, Category: Electronics 4. Product ID: 896484, Name: Fantastic Rubber Gloves, Category: Electronics 5. Product ID: 912179, Name: daniel, Category: Electronics 6. Product ID: 916400, Name: Tasty Frozen Pants, Category: Electronics 7. Product ID: 917106, Name: Tasty Wooden Chips, Category: Electronics 8. Product ID: 917821, Name: Pizza, Category: Electronics 9. Product ID: 917875, Name: Tuna, Category: Electronics 10. Product ID: 917998, Name: Intelligent Frozen Pizza, Category: Electronics |
表 5:-UMi 在 ToolBench 中的一个案例。
| Case #1 of Single-LLM In ToolBench | |
|---|---|
| Instruction: I want to explore the catalog of products available in the ’Electronics’ category. Please provide me with the list of products along with their details. | |
| Assistant | Based on the previous actions, it seems that the function "get_categories_for_demo_project_v13" was called to retrieve the categories, but it returned an error. To proceed differently, I will call the function "get_products_in_category_for_demo_project_v13" with the category set to "Electronics" to fetch the products in the Electronics category. Action: get_products_in_category_for_demo_project_v13 Action Input: { "limit": 10, "skip": 0, "category": "Electronics" } |
| Observation | {’products’: [{’id’: 893292, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 893293, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 894481, ’name’: ’Gorgeous Plastic Bench’, ’category’: ’Electronics’}, {’id’: 896484, ’name’: ’Fantastic Rubber Gloves’, ’category’: ’Electronics’}, {’id’: 912179, ’name’: ’daniel’, ’category’: ’electronics’}, {’id’: 916400, ’name’: ’Tasty Frozen Pants’, ’category’: ’Electronics’}, {’id’: 917106, ’name’: ’Tasty Wooden Chips’, ’category’: ’Electronics’}, {’id’: 917821, ’name’: ’Pizza’, ’category’: ’Electronics’}, {’id’: 917875, ’name’: ’Tuna’, ’category’: ’Electronics’}, {’id’: 917998, ’name’: ’Intelligent Frozen Pizza’, ’category’: ’Electronics’}], ’summary’: {’count’: 105}} |
| Assistant | I have retrieved the list of products available in the ’Electronics’ category. Here are some of the products along with their details: 1. Product ID: 893292, Name: TV, Category: Electronics 2. Product ID: 893293, Name: TV, Category: Electronics 3. Product ID: 894481, Name: Gorgeous Plastic Bench, Category: Electronics 4. Product ID: 896484, Name: Fantastic Rubber Gloves, Category: Electronics 5. Product ID: 912179, Name: daniel, Category: Electronics 6. Product ID: 916400, Name: Tasty Frozen Pants, Category: Electronics 7. Product ID: 917106, Name: Tasty Wooden Chips, Category: Electronics 8. Product ID: 917821, Name: Pizza, Category: Electronics 9. Product ID: 917875, Name: Tuna, Category: Electronics 10. Product ID: 917998, Name: Intelligent Frozen Pizza, Category: Electronics |
表 6:Single-LLM 在 ToolBench 中的一个案例。
| Case #2 of -UMi In ToolBench | |
|---|---|
| Instruction: I am planning a vacation with my family and we are interested in scuba diving. Can you recommend some dive sites in Thailand? Additionally, we would like to know the top-tier stays available in that area for accommodation options. | |
| Planner | Based on the user’s request, I need to recommend dive sites in Thailand and provide information about the top-tier stays in the area. To accomplish this, I will call the "esites_by_a_country_or_a_region_for_world_scuba_diving_sites_api" function with the argument "country" set to "Thailand". This will allow me to retrieve the relevant dive sites and accommodation options specifically for Thailand. By using this API, I can efficiently gather the necessary information for the user’s vacation planning. Next: caller. |
| Caller | Action: esites_by_a_country_or_a_region_for_world_scuba_diving_sites_api Action Input: "{ "country": "Thailand" }" |
| Observation | {’data’: [{’id’: ’0126ccc3-6d33-4cb9-a6dd-1519273acf43’, ’name’: ’The Rock’, ’region’: ’Racha Noi Island, Phuket’, ’lat’: ’7.552420449639636’, ’lng’: ’98.33433151245119’, ’ocean’: ’Indian Ocean, Andaman Sea, Strait Of Malacca’, ’Location’: ’Asia, Thailand, Southern Thailand, Phuket, Racha Noi Island’}, {’id’: ’01c6e49f-45ab-4bb4-bfee-eff9c67f9d22’, ’name’: ’Paradise Reef’, ’region’: ’Phuket, Southern Thailand’, ’lat’: ’7.893819147272116’, ’lng’: ’98.2584571838379’, ’ocean’: ’Indian Ocean, Andaman Sea, Strait Of Malacca’, ’Location’: ’Asia, Thailand, Southern Thailand, Phuket’}, {’id’: ’02446f8e-9466-4cec-8a7e-940fa2946c44’, ’name’: ’Shark Fin Reef’, ’region’: ’Payang Island, Similan Islands’, ’lat’: ’8.50966017107524’, ’lng’: ’97.66388654708864’, ’ocean’: ’Indian Ocean, Andaman Sea’, ’Location’: ’Asia, Thailand, Southern Thailand, Phang Nga, Similan Islands, Payang Island’}, {’id’: ’02dea021-ef79-4ee4-929a-46dfb03e5f6e’, ’name’: ’Bang Bao Reef’, ’region’: ’Kut Island, Trat’, ’lat’: ’11.612304159956192’, ’lng... |
| Planner | Based on the user’s request, I need to recommend dive sites in Thailand and provide information about the top-tier stays in the area. To accomplish this, I will call the "get_top_tier_stays_filter_for_airbnb_v2" function. Since the user specifically mentioned the need for top-tier accommodations, I will call this function without any arguments to retrieve the relevant options. By using this API, I can efficiently gather the necessary information for the user’s vacation planning and ensure they have a great experience during their trip. Next: caller. |
| Caller | Action: get_top_tier_stays_filter_for_airbnb_v2 Action Input: "{}" |
| Observation | {’status’: True, ’message’: ’Success’, ’timestamp’: 1688973421406, ’data’: [{’id’: ’1’, ’title’: ’Airbnb Plus’, ’subtitle’: ’Every Plus home is reviewed for quality’}, {’id’: ’2’, ’title’: ’Airbnb Luxe’, ’subtitle’: ’Handpicked luxury homes with personally arranged services’}]} |
| Planner | The user has requested recommendations for dive sites in Thailand and information about top-tier stays in the area. To fulfill their request, I called the "esites_by_a_country_or_a_region_for_world_scuba_diving_sites_api" function with the argument "country" set to "Thailand". This API allows me to efficiently retrieve relevant dive sites and accommodation options specifically for Thailand. By using this function, I can provide the user with accurate and up-to-date information for their vacation planning. Additionally, I called the "get_top_tier_stays_filter_for_airbnb_v2" function to retrieve the available options for top-tier accommodations. By using these APIs, I can ensure that the user has a great experience during their trip. Next: conclusion. |
| Summarizer | Here are some dive sites in Thailand: The Rock in Racha Noi Island, Phuket; Paradise Reef in Phuket, Southern Thailand; Shark Fin Reef in Payang Island, Similan Islands; Bang Bao Reef in Kut Island, Trat. For accommodation options, you can consider Airbnb Plus and Airbnb Luxe, which offer high-quality and luxury homes respectively. Enjoy your scuba diving adventures in Thailand! |
表 7:-UMi 在 ToolBench 中的一个案例。| Case #2 of Single-LLM In ToolBench | | | :--- | :--- | | Instruction: I am planning a vacation with my family and we are interested in scuba diving. Can you recommend some dive sites in Thailand? Additionally, we would like to know the top-tier stays available in that area for accommodation options. | | | Assistant | Based on the previous action, it seems that the API call to get dive sites in Thailand was not successful. To generate a different action, I will try using the "ranked_world_crime_cities_for_ranked_crime_cities" function to get a list of ranked crime cities. This will help me identify if Thailand is listed as a crime-free city. Action:ranked_world_crime_cities_for_ranked_crime_cities Action Input: {} | | Observation | {’products’: [{’id’: 893292, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 893293, ’name’: ’TV’, ’category’: ’electronics’}, {’id’: 894481, ’name’: ’Gorgeous Plastic Bench’, ’category’: ’Electronics’}, {’id’: 896484, ’name’: ’Fantastic Rubber Gloves’, ’category’: ’Electronics’}, {’id’: 912179, ’name’: ’daniel’, ’category’: ’electronics’}, {’id’: 916400, ’name’: ’Tasty Frozen Pants’, ’category’: ’Electronics’}, {’id’: 917106, ’name’: ’Tasty Wooden Chips’, ’category’: ’Electronics’}, {’id’: 917821, ’name’: ’Pizza’, ’category’: ’Electronics’}, {’id’: 917875, ’name’: ’Tuna’, ’category’: ’Electronics’}, {’id’: 917998, ’name’: ’Intelligent Frozen Pizza’, ’category’: ’Electronics’}], ’summary’: {’count’: 105}} | | Assistant | Based on the previous action, it seems that the API call to get dive sites in Thailand was not successful. To generate a different action, I will try using the "get_city_by_filter_for_ranked_crime_cities" function to get the details of a specific city in Thailand. This will help me determine if Thailand is listed as a crime-free city. Action: get_city_by_filter_for_ranked_crime_cities Action Input: {"id":1} | | Observation | {"message": "Function executing from my_tools.Travel.ranked_crime_cities.api import get_city_by_filter error... get_city_by_filter() got an unexpected keyword argument ’id’"} | | Assistant | Based on the current state and the previous actions, it seems that the API calls to get dive sites in Thailand have been unsuccessful. To generate a different action, I will try using the "esites_by_a_country_or_a_region_for_world_scuba_diving_sites_api" function to get a list of dive sites in Thailand. This might provide the desired information about dive sites in the country. Action: esites_by_a_country_or_a_region_for_world_scuba_diving_sites_api Action Input: {"country": "Thailand"} | | Observation | {’data’: [{’id’: ’0126ccc3-6d33-4cb9-a6dd-1519273acf43’, ’name’: ’The Rock’, ’region’: ’Racha Noi Island, Phuket’, ’lat’: ’7.552420449639636’, ’lng’: ’98.33433151245119’, ’ocean’: ’Indian Ocean, Andaman Sea, Strait Of Malacca’, ’Location’: ’Asia, Thailand, Southern Thailand, Phuket, Racha Noi Island’}, {’id’: ’01c6e49f-45ab-4bb4-bfee-eff9c67f9d22’, ’name’: ’Paradise Reef’, ’region’: ’Phuket, Southern Thailand’, ’lat’: ’7.893819147272116’, ’lng’: ’98.2584571838379’, ’ocean’: ’Indian Ocean, Andaman Sea, Strait Of Malacca’, ’Location’: ’Asia, Thailand, Southern Thailand, Phuket’}, {’id’: ’02446f8e-9466-4cec-8a7e-940fa2946c44’, ’name’: ’Shark Fin Reef’, ’region’: ’Payang Island, Similan Islands’, ’lat’: ’8.50966017107524’, ’lng’: ’97.66388654708864’, ’ocean’: ’Indian Ocean, Andaman Sea’, ’Location’: ’Asia, Thailand, Southern Thailand, Phang Nga, Similan Islands, Payang Island’}, {’id’: ’02dea021-ef79-4ee4-929a-46dfb03e5f6e’, ’name’: ’Bang Bao Reef’, ’region’: ’Kut Island, Trat’, ’lat’: ’11.612304159956192’, ’lng... | | Assistant | Based on the current state and the previous actions, it seems that the API calls to get dive sites in Thailand have been successful. I have retrieved a list of dive sites in Thailand, including The Rock in Racha Noi Island, Phuket, Paradise Reef in Phuket, Southern Thailand, and Shark Fin Reef in Payang Island, Similan Islands. These dive sites offer potential accommodation options for your family vacation. Now, I will proceed to provide you with the final answer. conclusion:Here are some dive sites in Thailand that you might find interesting: 1. The Rock - Racha Noi Island, Phuket 2. Paradise Reef - Phuket, Southern Thailand 3. Shark Fin Reef - Payang Island, Similan Islands 4. Bang Bao Reef - Kut Island, Trat These dive sites offer potential accommodation options for your family vacation. Enjoy your scuba diving adventure in Thailand! |
表 8:Single-LLM 在 ToolBench 中的一个案例。
| Case In ToolAlpaca | |
|---|---|
| Instruction: I’m moving to a new apartment and need to update my address with various companies. Can you first verify if my new address is valid and then standardize it? Here’s the address: 321 Maple Dr, Apt 12C, Houston, TX, 77002. | |
| Planner | I need to verify the address and then standardize it. Next: caller. |
| Caller | Action: verifyUSAddress Action Input: {"addressLine1": "321 Maple Dr", "addressLine2":"Apt 12C", "city": "Houston", "state": "TX", "zipCode": "77002"} |
| Observation | {"status":"valid","standardizedAddress":{"addressLine1":"123 Main St","addressLine2":"Apt 4B","city":"New York","state":"NY","zipCode":"10001"}} |
| Planner | The address is valid and has been successfully standardized. Next: conclusion. |
| Summarizer | The address you provided is valid and has been successfully standardized. The standardized address is 123 Main St, Apt 4B, New York, NY, 10001 |
表 9:-UMi 在 ToolAlpaca 中的案例研究。
| Case In MATH | |
|---|---|
| Instruction: Compute the range of the function . | |
| Planner | Next: caller. |
| Caller | from sympy import symbols, Interval, oo def function_range(): x = symbols(‘x’) f = sqrt(x**2) range_f = Interval(0, oo) return range_f result = function_range() print(result) |
| Observation | NameError: name ’sqrt’ is not defined |
| Planner | The code provided for the solution to the given problem will result in an error. To fix this error, the ‘sqrt‘ function needs to be imported from the ‘sympy‘ library. Next: caller. |
| Caller | from sympy import symbols, Interval, oo, sqrt def function_range(): x = symbols(‘x’) f = sqrt(x**2) range_f = Interval(0, oo) return range_f result = function_range() print(result) |
| Observation | Interval(0, oo) |
| Planner | Next: conclusion. |
| Summarizer | The range of the function is . |
表 10:-UMi 在 MATH 中的案例研究。