OctoTools:一个具有复杂推理可扩展工具的智体框架

news2025/3/19 9:33:21

25年2月来自斯坦福大学的论文“OctoTools: An Agentic Framework with Extensible Tools for Complex Reasoning”。

解决复杂的推理任务可能涉及视觉理解、域知识检索、数值计算和多步骤推理。现有方法使用外部工具增强大语言模型 (LLM),但仅限于专业领域、有限的工具类型或需要额外的训练数据。本文的 OctoTools,是一个无需训练、用户友好且易于扩展的开源智体框架,旨在解决跨不同域的复杂推理。OctoTools 引入标准化工具卡来封装工具功能、用于高级和低级规划的规划器以及执行器来执行工具使用。在 16 个不同的任务(包括 MathVista、MMLU-Pro、MedQA 和 GAIA-Text)中验证 OctoTools 的通用性,与 GPT-4o 相比,平均准确率提高 9.3%。此外,在相同的工具组合下,OctoTools 的表现比 AutoGen、GPT-Functions 和 LangChain 高出 10.6%。

大语言模型 (LLM) (Brown,2020;Chowdhery,2022;OpenAI,2023b) 在总结、翻译 (Thoppilan,2022)、代码生成 (Nakano,2021) 和数学问题解决 (Shuster,2022) 等任务上取得快速进展。然而,涉及多个步骤、逻辑分解或专业领域知识的复杂推理任务仍然具有挑战性。例如,解决视觉谜题可能需要细粒度的图像理解和基于文本的推理,而数学或化学问题可能需要彻底的计算或领域专业知识。现有的提示方法通常无法将这些不同的过程协调成连贯的推理链 (Yao,2022)。

解决这些挑战的一个有希望的方向,是用外部工具增强 LLM。通过将专门的子任务(例如,Web 查询、基于 Python 的计算和专门的科学工具)卸载到专用模块,LLM 可以专注于更高级别的规划和综合。一些框架已经探索了此类工具的使用,从依赖大量监督数据和微调的框架(Schick,2023; Liu,2023),到没有细化的静态解决方案(Lu,2023),以及仅限于一个专门的工具领域框架(Nakano,2021;Tao,2023;Hu,2024)。虽然这些方法在特定任务上表现良好,但它们仍然面临阻碍广泛使用的挑战。许多方法需要使用精选数据进行大量训练,这限制了它们对新领域的适应性。其他则是为特定领域设计的(Bran,2023;Kang & Kim,2024;Li,2024a;Schmidgall,2024)或无法轻松支持多步骤问题解决(Lu,2023),从而限制了它们的通用性。

OctoTools,是一个无需训练(即不需要更新模型权重)、用户友好且可扩展的智体框架,用于解决不同域的复杂推理任务,如图所示:

请添加图片描述

给定一个用户查询 q 和一个预训练语言模型 LLM_θ (·),一种简单的方法会直接生成一个输出 y ∼ LLM_θ(q),提供单步响应。相比之下,OctoTools 框架引入一个结构化的多步骤过程,利用外部工具有效地处理查询。

具体来说,OctoTools 包含一组工具 D = {d_i} 和相关元数据 M = {m_i},n 是可用工具的数量。给定一个查询,规划器(基于语言模型)首先从高级角度生成一个暂定规划,指示如何使用这些工具来处理查询,这形成初始上下文 s_0。根据这个规划,规划器确定工具使用的初始动作 a_1,指定要使用哪个工具 d_1、相关上下文和子目标。然后,执行器(也由语言模型提供支持)将规划器的基于文本动作 a_1 转换为机器可执行命令 o_t,运行该命令可获得中间结果 r_1。这些结果与原始动作一起将上下文更新为 s_1 := (a_1, o_1, r_1)。此过程构成框架中的一个步骤。

此过程重复进行,规划器根据不断发展的上下文迭代地改进其动作,直到找到完整的解决方案或达到推理限制(例如时间或步骤)。经过 T 步骤后,框架会生成完整的轨迹(s_0、s_1、…、s_T),该轨迹以结构化方式存储在上下文中。然后,规划器使用此轨迹生成原始查询的最终解决方案。

OctoTools 通过分解子目标和系统化使用工具,为解决复杂任务提供一个强大而有效的框架。标准化工具卡封装功能,规划器协调高级和低级任务规划,执行器为每个子目标实例化工具调用。

工具卡

为了实现工具、规划器和执行器之间的无缝交互,工具箱是 OctoTools 的基本构建块。与以前的工作(Lu,2023;Hu,2024)相比,OctoTools 利用工具卡以模块化方式封装工具,这些工作依赖于仔细的调整和调整来支持新工具。

每张工具卡代表一个工具 d 及其基本元数据 m(如图所示)。此元数据包括工具的名称、输入和输出类型以及命令演示。它还可能包含其他使用约束(例如,用户定义的“限制”和“最佳实践”),这些约束为开发人员提供指导规划器和执行器的见解。例如,Image_Captioner_Tool 包括“它可能会在复杂场景中出错”和“考虑使用其他工具进行验证”,而 Object_Detector_Tool 则指出检测目标的局限性。

请添加图片描述

为了确保一致的交互,每个工具卡都实现两个标准函数。函数 execute() 封装了工具的主要功能,例如生成代码片段或执行目标检测。执行的结果以结构化格式存储,以支持不同的输出类型,例如生成的代码、检测的目标、存储的文件。函数 get metadata() 允许规划器和执行器动态评估工具的功能并了解使用限制。

每个工具卡的设计相对于框架都是模块化的,使用户能够集成各种工具而无需修改底层框架或智体逻辑。可以轻松添加、替换或更新新工具卡。因此,即使任务的复杂性或范围增加,OctoTools 仍然保持强大和可扩展。

规划器模块

规划器初始化。规划器检查工具箱并加载每个工具卡。正式地,它构建一个包含 n 个可用工具的集合 {d_i},每个工具都有描述其输入-输出模式和使用约束的元数据 m。不必启用完整工具集,而是可以根据专家见解选择子集 D* = {d_i},或使用一小组示例进行优化。

查询分析和动作预测。给定查询 q,规划器根据其初始化制定工具使用的高级暂定规划。高级规划总结查询目标,分析所需技能,确定相关工具,并包括其他考虑因素以强调验证的必要性。高级任务规划提供最终目标的全局视角,确保每个后续子目标与原始查询保持一致。

随后,在步骤 t,动作预测器生成一个动作 a_t,该动作将规划器建议的子目标(例如,“检测图像中的棒球”)、所选工具 d(例如,物体检测器)和相关上下文相结合。这个低级规划会实时细化和执行每个子目标,并在每个步骤中适应新信息或反馈。

上下文验证和解决方案总结。执行每个命令后,上下文验证器会检查是否可以在当前上下文中解决问题。它验证完整性(例如,是否满足所有子目标)并识别任何歧义。如果问题仍然不完整,规划器将继续下一个迭代周期,预测下一个动作 a_t+1。

一旦验证器得出结论认为查询已被解决,单独的解决方案总结器就会根据轨迹 (s_0, s_1, . . . , s_T) 编译最终答案。此阶段集成中间工具输出,跟踪推理步骤,并提供简洁、用户友好的摘要作为最终解决方案。

执行器模块

命令预测。先前的工作(Lu,2023;Hu,2024)通常期望一个语言模型既用于规划每个步骤(即使用哪种工具),也用于生成相应的可执行命令。这种双重责任可能会使模型超载并导致错误,尤其是在处理复杂或特定于环境的代码时(Bran,2023;Li,2024b;Ji,2024)。为了缓解这些问题,OctoTools 引入一个命令生成器,它可以解释规划器的基于文本动作并生成可执行代码。

给定规划器预测的动作 a_t,命令生成器(由语言模型提供支持)以可执行 Python 脚本的形式创建一个低级命令 o_t,该脚本使用必要的输入调用工具 d_t 并执行任何所需的数据准备。此步骤将 a_t 中指定的抽象动作与具体的工具调用联系起来。通过将决策与代码生成分开,系统的每个组件都可以专注于其专门的角色。

命令执行。生成可执行命令后,必须在可能涉及依赖项、外部库或资源访问(例如文件系统)的环境中运行它。将执行与规划直接结合起来会带来安全性和可维护性挑战,特别是如果规划器无法管理代码执行细节。

在 OctoTools 中,命令执行器在 Python 环境中运行生成的命令 o_t,获得结果 r_t。这可能包括工具输出、日志或错误消息。然后,执行器将此步骤的当前上下文 s_t := (a_t, o_t, r_t) 添加到智体的当前轨迹 (s_0, s_1, . . . , s_t−1)。轨迹保留所采取动作、生成代码和获得结果的清晰历史记录。

特定任务的工具集优化

OctoTools 工具箱包含一套涵盖不同模式和技能的多样化工具。通过利用结构化工具卡和强大的规划功能,当所有可用工具在不同任务中启用时,OctoTools 表现出很强的泛化。但是,当某项任务只有一小组验证示例时,配置特定任务的工具子集可以进一步提高效率和效果。
为此,其提出一种自动算法来优化每个任务的工具集配置。给定工具箱中 n 个可用工具,可能的子集总数为 O(2^n),这非常大。为了使其易于处理,采用贪婪搜索策略,将复杂度降低到 O(n)。该方法分为三个阶段。

第 1 阶段:基线设置。首先通过启用工具箱中的基本工具集(表示为 D_base)来建立基线性能。这个基础集代表一个最小的起始工具集,可以由用户预先定义。

第 2 阶段:单个工具评估。接下来,和基础工具集在一起,启用和测量每个候选工具 d_i。对于每个 d_i,形成一个增强子集 D_i = D_base ∪ {d_i},并计算验证示例集的准确度差

∆_d_i = Acc (D_i)− Acc( D_base) (1)

如果 ∆_d_i > 0,认为工具 d_i 对目标任务有益。

第 3 阶段:优化工具集选择。最后,汇总所有产生积极改进的工具,并将它们与默认工具集组合起来,形成优化工具集:

D^∗ =D_base ∪ {d_i |∆_d_i > 0} (2)

此集合包含所有单独能展示比基线性能提升的工具,确保下游任务的定制但高效的配置。虽然这种选择不能保证全局最优,但与简单使用所有工具相比,整体改进效果更好。

如下是任务-特定的工具集优化算法总结:

请添加图片描述

为了证明 OctoTools 框架的泛化能力,对涵盖两种模态、五个领域和四种推理类型的 16 个不同基准进行全面评估,如表所示。这些基准涵盖广泛的复杂推理任务,包括视觉理解、数值计算、知识检索和多步骤推理。

请添加图片描述

对于一般的视觉推理,包括 AlgoPuzzleVQA(Ghosal,2024)、Hallusion-VD(Guan,2024)、PuzzleVQA(Chia,2024)和 VQA 2.0(Goyal,2017)。对于数学推理,使用 Game of 24 (Lile, 2024)、Omni-MATH (Gao et al., 2024)、CLEVR-Math (Lindstro ̈m & Abraham, 2022) 和 Math-Vista (Lu et al., 2024b)。对于科学推理,采用 GPQA (Rein et al., 2023)、MMLU-Pro (Wang et al., 2024b) 和 SciFIBench (Roberts et al., 2024)。为了评估专门的医学领域模型,在 MedQA(Jin,2021)、PathCLS(Sun,2025)、PathVQA(He,2020)和 SLAKE(Liu,2021)上进行测试。此外,还结合 GAIA-Text,这是 GAIA(Mialon,2023)基准的文本子集,旨在评估具有工具调用功能的智体框架。

对于每个基准,抽样 100 个示例来构建工具集优化和消融研究的验证集,并留出 200 个示例的保留测试集用于最终评估。对于总样本少于 300 个的基准,测试集由所有未用于验证的剩余样本组成。为了减轻随机性,报告所有实验(包括消融研究)在三次试验中的平均准确率和标准差。

在工具箱中为实验创建各种各样的工具。基本工具集包括通用解决方案生成器,这是一个建立在基本 LLM 之上的工具,它将执行器生成的专门提示作为输入,例如“详细描述图像”或“为数学问题生成分步解决方案”。此工具允许进行一般的分步推理,而无需外部工具,但缺乏域特异性。该工具箱还包括图像感知工具(如 Image_Captioner)、网络搜索 API(如 Google_Search)、代码生成器 Python_Code_Generator,以及专用工具(如用于病理图像分类的 Path_Generalist_Classifier)。其中,相关 Patch_Zoomer 是一个独特的工具,它接受文本查询并返回放大的四分之一 patches,为细粒度的视觉推理场景提供局部细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Canary

定义: Canary是一种用以防护栈溢出的保护机制。 原理: 是在一个函数的入口处,先从fs/gs寄存器中取出一个4字节(eax,四字节通常是32位的文件)或者8字节(rax,通常是64位的文件)的值…

c++领域展开第十七幕——STL(vector容器的模拟实现以及迭代器失效问题)超详细!!!!

文章目录 前言vector——基本模型vector——迭代器模拟实现vector——容量函数以及push_back、pop_backvector——默认成员函数vector——运算符重载vector——插入和删除函数vector——实现过程的问题迭代器失效memcpy的浅拷贝问题 总结 前言 上篇博客我们已经详细介绍了vecto…

BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分

checksec exeinfo 开启了全保护 64位 查看函数: 堆题 增删查改齐了 可以在编辑堆的时候重新设置大小 存在堆溢出 delete函数的指针清零了 无UAF 想法是通过unsorted bin泄露libc基址: from pwn import *p process(./babyheap) #p remote("node…

【C++指南】内存管理完全手册:new/delete

🌟 各位看官好,我是egoist2023! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C内存管理的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享…

Vue3组合式函数(滚动监测 useScroll)

主要用于实时监测目标元素滚动位置及状态 工具函数源码 /*** 组合式函数* 实时监测目标元素滚动位置及状态** 自定义钩子用于处理滚动事件和状态* param target 滚动目标元素,可以是 Ref、HTMLElement、Window 或 Document,默认为 window* param throt…

Vue.js+Element UI 登录界面开发详解【附源码】

成果图: 一、技术架构解析 本登录模块采用前后端分离架构,前端基于Vue.jsElement UI实现交互逻辑,主要包含以下技术要点: ​组件化开发 - 采用单文件组件形式组织代码​响应式设计 - 实现多终端适配​状态管理 - 使用sessionSto…

瑞幸需要宇树科技

吃不到“星巴克红利”,瑞幸活成“Manner”。 作者|古廿 编辑|杨舟 “是不是又要开始3月革命了。”有瑞幸员工透露,今年开始瑞幸加强了系统排班的执行力度。新的排班体系下,要求各时段门店实际值班人员和排班系统一致。如果需要调整&#xf…

linux 命令 vim

以下是 Linux 中 Vim 编辑器的核心命令总结,分为基础操作、高效编辑技巧和实用场景,助你快速掌握 1. 启动与退出 命令说明vim 文件名打开或新建文件vim 行号 文件名打开文件并跳转到指定行(如 vim 10 file.txt):q退出 Vim&#…

解决MySQL字符集冲突引发的“Illegal mix of collations”错误

引言 在开发过程中,我们常常会遇到数据库层面的字符集兼容性问题。本文将通过一个典型的案例,分析因字符集不匹配导致的 Illegal mix of collations 错误,并提供完整的解决方案,帮助开发者彻底规避此类问题。 问题现象 假设我们…

Vue中的publicPath释义

publicPath 部署应用包时的基本URL。用法和 webpack 本身的 output.publicPath 一致,但是 Vue CLI 在一些其他地方也需要用到这个值,所以请始终使用 publicPath 而不要直接修改 webpack 的 output.publicPath。 默认情况下,Vue CLI 会假设你…

新造车不再比拼排名,恰是曲终人散时,剩者为王

据称新能源汽车周销量不再发布,这可能也预示着新造车终于到了给出答案的时候了,新造车企业前三强已基本确立,其余那些落后的车企已很难有突围的机会,而特斯拉无疑是其中的最大赢家。 3月份第一周的数据显示,销量最高的…

博客迁移----宝塔面板一键迁移遇到问题

前景 阿里云轻量级服务器到期了,又免费领了个ESC, 安转了宝塔面板。现在需要迁移数据,使用宝塔面板一键迁移功能,完成了数据的迁移,改了域名的解析,现在进入博客是显示502 bad grateway 宝塔搬家参考链接…

大数据处理最容易的开源平台

大数据处理最容易的开源平台可以从多个角度进行分析,包括易用性、灵活性、成本效益以及社区支持等方面。 Apache Spark Apache Spark 是一个广泛使用的开源大数据处理框架,以其快速、通用和易于使用的特点而著称。它支持多种编程语言(如 Scal…

Dify 使用 - 创建 翻译 工作流

文章目录 1、选择 模板2、设置 和 基本使用3、运行应用 1、选择 模板 2、设置 和 基本使用 翻译模板 自带了系统提示词,你也可以修改 3、运行应用 右上角 点击 发布 – 更新,运行应用,就可以在新的对话界面中使用此功能 2025-03-18&#x…

TreelabPLMSCM数字化供应链解决方案0608(61页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:TreelabPLMSCM 数字化供应链解决方案 0608 在当今快速变化的市场环境中,企业面临着诸多挑战,Treelab 数智化 PLM_SCM 行业解决方案应运而生。该方案聚焦市场趋势与行业现状,致力于解…

LogicFlow介绍

LogicFlow介绍 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码平…

[蓝桥杯 2023 省 B] 飞机降落

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间,即它最早可以于 T i T_{i} Ti​ 时刻…

应用分层简介

一、什么是应用分层 应用分层是一种软件开发设计思想,它将应用程序分为多个层次,每个层次各司其职,多个层次之间协同提供完整的功能,根据项目的复杂程度,将项目分为三层或者更多层。 常见的MCV设计模式,就…