Octopus: 软件API函数调用的设备端语言模型

24年4月斯坦福和哈佛的论文“Octopus: On-device language model for function calling of software APIs”。

在快速发展的人工智能领域,大语言模型 (LLM) 因其先进的文本处理和生成能力而发挥着至关重要的作用。 本研究引入了一种新策略,旨在利用设备上的 LLM 来调用软件 API。 精心编译源自软件 API 文档的数据集,并对具有 2B、3B 和 7B 参数能力的LLMs进行微调,专门提高他们在软件 API 交互方面的熟练程度。 该方法专注于完善模型对 API 结构和语法的掌握,显着提高 API 函数调用的准确性。 此外,提出条件掩码技术,确保以所需格式输出并降低错误率,同时保持推理速度。 还提出一个新基准,旨在评估LLMs在 API 交互中的有效性,为后续研究奠定基础。 事实证明,经过微调的模型 Octopus 在软件 API 调用方面比 GPT-4 具有更好的性能。

GPT-4、Alpaca 和 Llama 等大语言模型 (LLM) 中外部计算工具的集成标志着在增强其能力方面取得了实质性进展。 最初,集成工作主要围绕特定于模型的微调方法(Lin et al. 2024,Hu et al. 2023),尽管有效,但在广泛和灵活的应用中遇到了挑战。 随着示范性演示这种提示的采用,发生了显着的转变,扩大了工具可访问性的范围。 该范围包括专门的代码解释器和广泛的检索框架,显着增强了模型解释和执行复杂指令的能力(Zhou et al. 2023)。 也注意到工具交互模拟环境(Shen 2024a;Du 2024;Xi 2023)和 API 参与框架(Li2023)的发展。 此外,高级推理(Valmeekam et al. 2022;Hao et al. 2023;Lewkowycz et al. 2022)策略的结合显着提高了模型解释和解决复杂任务的效率。

初始数据集包含来自 RapidAPI Hub(世界上最大的 API 存储库之一)的 API 文档。 为了促进大语言模型理解 API 使用模式,编译一个全面的 API 文档集合,重点关注大约 30,000 个最常用API。 该数据集获取分为两个主要阶段:初始收集和处理各个 API 文档片段,然后进行细致的细化过程去优化用于训练目的的数据集。

如图所示:通过严格的工作流程将数据集 A 细化为数据集 B。 该过程涉及三个关键步骤:对可通过特定 API 解决的肯定查询进行采样,并生成相应的响应和 CoT; 识别无法解决的查询,并用不相关的函数体增强; 采用语义分析将类似的功能加入到数据点中。 经过 GPT-4 的严格验证,数据集 B 作为优化的训练数据集出现,有望显着提升模型效率。

添加图片注释,不超过 140 字(可选)

为了验证框架的有效性,在四个著名的开源模型上对其进行了微调:CodeLlama7b、Google Gemma 2B & 7B 和 Stable Code LM 3B。 所有模型均采用标准化训练模板。 用 LoRA 和 8 bit量化技术,A100 80GB GPU 的时间分配如下:CodeLlama7b 和 Google Gemma 7B 为 90 小时,Google Gemma 2B 为 30 小时,Stable Code LM 3B 为 60 小时。 学习率设置为 5×10−5,并使用线性调度器优化结果。 在推理阶段,用户查询触发函数检索和执行,将生成的函数及其参数映射到相应的API,进行最终响应,确保在正确的函数和参数名称生成的情况下得到准确的结果。

尝试了不同的Lora设置,最好的设置是选择Lora等级为16,并将该方法应用于“q proj”,“v proj”,“o proj”、“up proj”和“down proj”等模数。 如图附上所选模型的训练和验证损失。 在训练过程中,逐步在数据集点上使用更多类似的示例进行训练,进行课程学习。

添加图片注释,不超过 140 字(可选)

小参数大语言模型(LLM)的使用面临着一个关键挑战:生成输出时鲁棒性明显下降。 在模型中也观察到了这一挑战,这需要使用精确的函数名称及其相应的参数来强制执行响应。 预期的输出格式要求参数封装在括号内,函数名称与预定义的存储库对齐,并且参数值符合其指定的类型。 函数名称中的印刷错误或参数类型中的错位等差异会严重破坏输出的完整性,使其容易出错。 例如,在 GPT-4 和本文模型中,函数名称的偏差(无论是拼写错误还是延长表达式)都可能导致意外的改正,无法映射回原始函数名称,从而扭曲预期的输出。

引入一个条件掩码。在构造掩码时,所有未与正确格式对齐的tokens,设计为掩码,将值 0 分配给它们各自的位置,而值 1 分配给所有其他位置。 例如,如果已经知道下一个token代表整数,则只会去掩码那些用于整数的tokens。 因此,准确的掩码公式对于实现预期结果至关重要。 几种用于导出掩码的方法包括:
枚举数据类型。函数名称通常是已知的,并且在推理过程中不会改变,可以视为可枚举的数据变量。 为了有效地管理这些名称,可以构造一棵 Trie 树,以 O(D) 的时间复杂度方便地检索掩码,其中 D 表示 Trie 树的深度,相当于函数名称的最大长度, 例子取D大约是 20。这导致时间复杂度恒定。 作为一种替代方法,将潜在函数名称的所有前缀存储在字典中可以进一步将复杂性降低到 O(1)。
string、float、dict、int 类型。正则表达式可用于分析后续tokens并生成条件掩码。

对数据集进行了一系列全面的测试,将 Octopus 模型与其他先进模型进行了评估。 本次评估重点关注 Octopus 理解 API 调用的能力,特别是 RapidAPI 上的 API 调用。 此外,还探讨在训练阶段结合各种检索技术对模型最终有效性的影响。

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值