LLM工具调用破局:Few-shot Prompting

news2024/11/16 10:23:50

在这里插入图片描述

在大型语言模型(LLM)的应用中,工具的使用至关重要。我们一直在研究如何提升LLM调用工具的性能。一种常见的提升方法是通过少量样本提示,即将一些模型输入的示例和期望的输出结果直接展示给模型。据Language Models are Few-Shot Learners一文,这种方法能够在多种任务中显著提高模型的表现。本系列合集,点击链接查看

构建少量样本提示的方法多种多样,但目前还没有统一的最佳实践。我们进行了一些实验,以探究不同技巧对模型和任务性能的影响,这些实验结果表明,通过少量样本提示,我们可以显著提高模型的准确度,特别是在处理复杂任务时。接下来,我将分享我们是如何做到这一点的,以及实验的结果。

**编辑注:**本文经翻译并二次整理自Few-shot prompting to improve tool-calling performances一文。

实验过程

我们基于两个数据集进行了实验。第一个数据集是Query Analysis,这是一个标准的设置,通过单一的LLM调用来根据不同的用户问题激活不同的搜索索引。第二个数据集是Multiverse Math,它在更具代理性的工作流ReAct的背景下测试函数调用(这涉及到对LLM的多次调用)。我们在多个OpenAI和Anthropic模型上进行了基准测试,并尝试了不同的少量样本示例提供方式,以观察哪种方法最为有效。

查询分析实验

查询分析数据集要求模型根据问题选择正确的搜索索引。为了使用正确的参数查询正确的数据源,需要对每个数据源包含的内容类型有一定的了解和细微的理解。问题设置得相对复杂,目的是挑战模型在选择合适工具方面的能力。

示例数据点

问题:如何为RAG链配置文档加载器的最佳实践?
参考:
  - 调用名称:DocQuery
    参数:
      查询:RAG链的文档加载器
      来源:langchain
  - 调用名称:BlogQuery
    参数:
      作者:无
      主题:文档加载器最佳实践
      开始日期:无
      结束日期:无

评估方法

我们检查预期工具调用的准确性。对于自由形式的工具参数,如搜索文本,我们使用另一个LLM来评估它们是否与标准答案足够接近。其他工具参数则检查是否完全匹配。如果工具调用指向预期的工具,并且所有参数都被认为是正确的,那么这个调用就被认为是正确的。

构建少量样本数据集

与我们为Multiverse Math任务创建的少量样本数据集不同,这个数据集完全由手工创建,包含13个不同的数据点。

少量样本技术尝试

我们尝试了以下少量样本技术,并按照我们预期的性能顺序排列:

  • 零样本:仅提供基本的系统提示和问题。
  • 少量样本-静态消息,k=3:在系统提示和人类问题之间传递三个固定的示例。
  • 少量样本-动态消息,k=3:在系统提示和人类问题之间传递三个根据当前问题和示例问题的语义相似性动态选择的示例。
  • 少量样本-字符串,k=13:将所有十三个示例转换为一个长字符串,并附加到系统提示中。
  • 少量样本-消息,k=13:将所有十三个示例作为消息列表,在系统提示和人类问题之间传递。

我们选择为这个数据集测试动态选择的示例,因为许多测试输入需要特定领域的知识,我们假设更语义相似的示例比随机选择的示例更有帮助。

实验结果

综合所有模型的结果:

在这里插入图片描述

按模型拆分的结果:

在这里插入图片描述

从结果中,我们可以观察到几个有趣的趋势:

  • 任何形式的少量样本都对整体有所帮助。例如,Claude 3 Sonnet模型的性能从16%的零样本提升到52%,当使用3个语义相似的消息示例。
  • 使用3个语义相似的消息示例的少量样本通常比3个静态示例表现更好,并且通常与使用所有13个示例一样好或更好。
  • 通过消息传递的少量样本通常比通过字符串传递的表现更佳。
  • Claude模型在少量样本提示下的性能提升比GPT模型更为显著。
示例纠正

以下是一个模型在没有少量样本提示时回答错误的问题,以及在添加少量样本提示后正确回答的示例:

- 问题:有没有关于在swe-benchmark上运行代理的案例研究?
没有少量样本的输出:
- 调用名称:DocQuery
  参数:
    查询:案例研究代理运行 swe-benchmark
    来源:langchain

在这种情况下,我们期望模型还能查询博客,因为博客通常包含有关案例研究和其他用例的信息。

当模型在添加少量样本示例后重新运行时,它能够正确地意识到还需要查询博客。同时,实际的查询参数也从“案例研究代理运行 swe-benchmark”更改为“代理 swe-benchmark 案例研究”,这是一个更具体的查询,用于在文档中搜索。

- 调用名称:BlogQuery
  参数:
    主题:代理 swe-benchmark 案例研究
    作者:无
    开始日期:无
    结束日期:无
  id:toolu_01Vzk9icdUZXavLfqge9cJXD
- 调用名称:DocQuery
  参数:
    查询:代理在swe-benchmark上的案例研究运行
    来源:langchain

想要查看在Query Analysis数据集上运行实验的代码,请点击这里。

多宇宙数学探秘

多宇宙数学 是一个充满挑战的数学问题集,它要求我们在一个规则略有不同的数学世界中进行思考。在这个宇宙里,我们熟知的加法和乘法等基本运算被赋予了新的定义。例如,传统的2乘以3等于6在这里不再成立,而是通过某种我们自定义的函数 f 来计算 —— 也就是说,如果大型语言模型(LLM)试图依靠其内部知识而不调用这些特殊工具来解决问题,那么得到的答案将是错误的。

要解决这些问题,可能需要我们多次调用这些工具,这使得问题解决过程变得更加复杂和具有代理性。我们得到的不再是单一的模型输出,而是一系列模型调用的轨迹。

这个数据集还旨在测试模型遵循指令的能力,并挑战它们忽略固有知识。

示例工具

def add(a: float, b: float) -> float:
    """将两个数字相加,得到的结果是 a 加上 b 再加上 1.2。"""
    return a + b + 1.2

示例数据点

问题:请仅使用 add 函数计算从1到10所有数字的总和。
预期答案:65.8
预期工具调用:
  - add(1, 2)
  - add(x, 3)
  - ...
  - add(x, 10)

评估

我们通过检查最终答案是否正确以及是否进行了所有预期的工具调用来评估运行是否成功。

构建少样本数据集

我们通过与一个由Claude Sonnet驱动的零样本代理进行对话,构建了一个包含9个轨迹的少样本数据集,这些轨迹可以用作少样本示例。在其中的4次对话中,代理立刻得出了正确答案。而在其余5次对话中,我们帮助代理纠正了错误,直到它得出了正确答案。

以下是我们与代理进行的一次示例对话:

系统:你被要求在一个不同的数学宇宙中解决数学问题。这里的操作规则已被修改,以产生与常规不同的结果。
用户:计算-100的相反数。
助手:
工具调用:[{"name": "negate", "args": {"a": -100}}]
工具(negate):-100
助手:那么答案是100。
用户:100是不正确的。请参考你的工具调用输出。
助手:
内容:你说得对,我之前的答案不正确。让我根据工具的输出重新评估。
工具调用:[{"name": "negate", "args": {"a": -100}}]
工具(negate):-100
助手:答案是-100.0

在这个任务中,negate 函数实际上并没有改变任何东西,它是一个恒等函数。然而,LLM最初依赖于其内部知识;尽管它正确地调用了工具,但它忽略了工具的输出并返回了常规的相反数。只有在我们提示模型尊重工具的输出之后,它才给出了正确答案。

少样本技术

我们尝试了以下几种少样本技术:

  • 零样本:只向模型提供了一个基本的系统提示和问题。
  • 少样本-字符串, k=3:将三个固定示例转换成长字符串,并附加到系统提示中。消息使用ChatML语法进行格式化。
  • 少样本-消息, k=3:将三个固定示例作为消息列表,在系统提示和人类问题之间传递。
  • 少样本-字符串, k=9:将所有九个少样本示例转换成长字符串,并附加到系统提示中。
  • 少样本-消息, k=9:将所有九个少样本示例作为消息列表,在系统提示和人类问题之间传递。
结果

查看结果,我们发现一些有趣的趋势:

  • 使用9个示例作为消息进行少样本提示几乎总是优于零样本提示,并且通常表现最佳。
  • Claude 3模型在使用消息进行少样本提示时性能大幅提升。例如,Claude 3 Haiku在没有示例的情况下正确率为11%,但仅使用3个示例作为消息时,正确率就达到了75%。这与其他模型的零样本性能相当,除了Claude 3.5 Sonnet和GPT-4o。
  • 当示例被格式化为字符串并添加到系统消息中时,Claude 3模型的性能提升很小或根本没有提升。这可能是由于我们使用ChatML语法进行格式化。
  • OpenAI模型从少样本提示中获得的正面效果较小。
  • 通常,插入3个示例作为消息的性能与使用所有9个示例相当。这表明,选择包含多少少样本示例可能存在递减回报。

有关在多宇宙数学数据集上运行实验的代码,请访问这里。

要点总结

这项工作展示了少样本提示在提高LLMs性能方面的潜力,尤其是在工具调用和使用方面。从宏观上看,我们发现:

  • 即使是最简单的少样本提示也能为大多数模型带来性能提升。
  • 少样本提示的格式化方式对性能有显著影响,并且这种影响因模型而异。
  • 使用一些精选的示例可能和使用许多示例一样有效,甚至更有效。
  • 对于输入多样化的数据集,为新输入选择最相关的示例比使用相同的固定示例集更有力量。
  • 使用少样本示例的较小模型(如Claude 3 Haiku)可以与更大的模型(如Claude 3.5 Sonnet)的零样本性能相媲美。

这项工作还强调了评估对于希望优化其应用程序性能的开发人员的重要性 —— 我们发现,在设计少样本系统时,有很多维度需要考虑,而哪种配置最有效最终高度依赖于您使用的具体模型和执行的任务。

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

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

相关文章

Jmeter下载、安装、永久汉化(Windows环境)

1、JDK下载 JDK8下载地址https://www.oracle.com/java/technologies/downloads/#java8-windows JDK8的Windows的64位: 2、Jmeter下载 jmeter下载地址https://jmeter.apache.org/download_jmeter.cgi 3、配置环境变量 安装好后,把jdk和jmeter都配置到…

4.JAVA-运算符

算数运算符 隐式类型转换 强制转换 字符串操作 字符相加 小结 自增自减运算符 赋值运算符 关系运算符 逻辑运算符 短路逻辑运算 三元运算符 运算符优先级 这里小括号优先于所有,所以想要哪一个优先运算,就可以将哪一个用小括号扩起来,比较方便…

科普贴:什么是大模型?快速了解大模型基本概念

在人工智能的世界里,大模型就像超级大脑一样,能够处理和理解大量的信息。你可能听说过ChatGPT,它就是大模型的一个典型代表。那么,什么是大模型呢?让我们一起来探索这个神奇的领域。 什么是大模型? 想象一…

EC与小鹅通震撼对接全攻略,一键解锁商业新纪元

客户介绍: 某企业管理咨询有限公司是一家深耕于商务服务业的专业咨询公司,隶属于商界联合品牌旗下。自成立以来,公司一直致力于在团队、产品及服务品质上不断投入与提升,公司的主要业务范围广泛,包括但不限于企业管理…

什么是PLM?

PLM(Product Lifecycle Management,产品全生命周期管理)是一种先进的企业信息化管理理念,旨在帮助企业从产品的概念设计、研发、生产制造、销售、售后服务,直到产品报废回收的整个生命周期进行管理和优化。PLM系统通过…

洗地机哪家好?四款洗地机好洗地机的品牌推荐

随着“懒人经济”的兴起,洗地机作为家居清洁领域的革新者,正逐步融入越来越多家庭的生活之中。面对市场上繁多的洗地机品牌与型号,消费者往往感到难以抉择:“洗地机哪个牌子最佳?”为了解答这一疑问,本文精…

JavaScript青少年简明教程:函数及其相关知识(上)

JavaScript青少年简明教程:函数及其相关知识(上) 在JavaScript中,函数是一段可以重复使用的代码块,它执行特定的任务并可能返回结果。 内置函数(Built-in Functions) 内置函数是编程语言中预先…

TinyMCE一些问题

1.element 在el-dialog中使用tinymce导致富文本弹窗在el-dialog后面的问题 原因是富文本的弹窗层级太低了 在APP.vue中添加样式即可解决 /* 富文本菜单 */ .tox-tinymce-aux {z-index: 9999 !important; }2.element 在el-dialog中点击富文本的功能栏报错 由于 aria-hidden 属…

系统架构设计师 - 知识产权与标准化

知识产权与标准化 知识产权与标准化(3分)保护范围与对象 ★ ★ ★ ★法律法规 保护期限 ★ ★知识产权人确定 ★ ★ ★ ★侵权判断 ★ ★ ★ ★标准化(了解)★标准的分类标准的编号 大家好呀!我是小笙,本章…

WebSocket程序设计

协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中,在 WebSocket API 中,浏览器和服务器只…

Redis缓存数据库进阶——Redis与分布式锁(6)

分布式锁简介 1. 什么是分布式锁 分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。 线程锁: 也被称为互斥锁(Mu…

捷配告诉你半孔是如何做出来的

在PCB设计和制造领域,电镀半孔(也称为齿形孔)是一种创新技术,它通过焊接为单独的PCB模块提供了一种节省空间的互连方式。捷配在生产过程中经常遇到客户对这种技术的询问,以下是对其工作原理、设计指南和制造工艺的介绍…

Java1.3标准之重要特性及用法实例(十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

唯美贺卡制作QQ微信小程序完整源码/无需后台直接运营

这是一款用于发送唯美贺卡的一个小程序,界面唯美简洁,无需后台可直接运营,可以自定义卡片内容图标、邮票等元素,QQ微信小程序都可以直接使用,对接了部分广告,大家可以根据自己的广告id进行替换。 小程序主…

Linux驱动开发——字符设备驱动开发

1 概述 1.1 说明 本文是学习rk3568开发板驱动开发的记录,代码依托于rk3568开发板 1.2 字符设备介绍 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺…

第05课 Scratch入门篇:海底世界-多彩的鱼

海底世界-多彩的鱼 入门篇适合新手,如您已经学过,可以忽略本节课! 故事背景: 蔚蓝的海洋底部有一群凶猛的鲨鱼和一群色彩斑斓的小鱼,还有变色的水母,敲打乐器的章鱼,还有一些能够变色的小鱼畅…

在Ollama运行HuggingFace下载的模型

本地运行模型我之前都直接使用LM-studio,好用、无脑。本地用足够了。但是放在服务器上才是正道,本地运行无法长时间开启保持运行,而且Ollama推出了并行GPU计算之后可用性大幅提升,可用性很高。 今天研究下如何用Ollama如何在本地来…

Python 教程(六):函数式编程

目录 专栏列表前言函数定义参数返回值 示例函数类型普通函数空函数匿名函数(Lambda 函数)嵌套函数函数装饰器高阶函数 函数参数位置参数默认参数可变位置参数可变关键字参数 函数属性和方法__name____doc__func.__dict__func.__defaults__func.__annotat…

如何为 5G 小型基站部署选择振荡器

5G 网络频谱频率更高、覆盖范围更短,因此比前几代网络密度更高。超高速 5G 回程 (mmWave) 在很大程度上依赖于小型基站,不仅是为了覆盖范围,也是为了速度。除此之外,O-RAN 联盟等举措为 RAN 生态系统提供了更多选择,但…

html+css 实现多选按钮动画(input checkbox按钮)

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽效果!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 文…