ReST 与 ReAct 的交汇:多步推理大语言模型 (LLM) 智能体的自我进化之路 [译]

摘要

在回答复杂的自然语言问题时,往往需要通过多步推理并结合外部信息。目前已有几种系统能够结合大语言模型 (LLM) 和知识检索来应对此类问题。但这些系统存在一些失败的案例,且由于与外部知识交互的过程不可导,我们无法直接对这些系统进行端到端的训练以解决这些问题。为了克服这些挑战,我们设计了一个能够理解和操控外部知识的 ReAct 风格 LLM 智能体。

我们进一步通过一种类似 ReST 的方法对该智能体进行优化,这种方法通过迭代地训练前期的行为轨迹,并利用带有 AI 反馈的逐步扩大的强化学习,实现了持续的自我提高和自我简化。从一个初步设定的大型模型出发,仅经过两次迭代,我们成功打造了一个微调过的小型模型。这个小型模型在解决复杂组合问答问题上的表现可以媲美大型模型,但其参数量却少了两个数量级。

1 引言

图 1: 智能体的自我提升与自我蒸馏过程。Bamboogle 自动评估,在 10 次运行中的平均准确率及其标准偏差,(%)
图 1: 智能体的自我提升与自我蒸馏过程。Bamboogle 自动评估,在 10 次运行中的平均准确率及其标准偏差,(%)

在处理一些基础的自然语言任务,如简单问答或摘要编写时,我们通常能够轻松判断最终成果的优劣,并基于此收集大量数据,以此数据作为反馈指标来训练语言模型。但对于更为复杂的问题,单纯依赖结果反馈的系统往往显得力不从心。因此,近来基于过程监督的方法日益受到重视,并被视为一种更有效的替代方案(参见 Reppert et al. (2023))。在这一领域内,无论是技术(参见 Gao et al. (2023); Madaan et al. (2023))、框架(参见 Dohan et al. (2022); Khattab et al. (2023b))还是库(参见 Liu (2022), Chase (2022)),都在迅速发展,以便更好地通过人类易于理解的任务分解来定义大语言模型(LLM)的过程型工作流程。在这些工作流程中,许多需要与外部工具、API 或环境互动,此时相关的多步骤工作流程一般被称为大语言模型智能体(LLM 智能体)(参见 Xi et al. (2023))——一种能够执行一连串动作以实现特定目标的系统。

让我们来探讨一下解答复杂、开放性问题的任务,这里面智能体需要利用搜索 API 收集多个信息片段,再整合成一段完整的答案。一种常见的构建这类大语言模型 (LLM) 智能体的方法是采用 ReAct 方法(由 Yao 等人在 2022 年提出),该方法将链式思维推理、行动和观察交替进行,贯穿在多轮思考 - 行动 - 观察中。在我们的研究中,我们沿用了 ReAct 的基本框架来设计我们的搜索智能体,并为其制定了少样本 (few-shot) 提示,以便生成长篇、清晰可追溯的答案(参考 Nakano 等人的研究,2021)。

我们接下来自然会想到,如何应对这类智能体的失败情况,并提升其性能和鲁棒性。对于基于结果的系统,通常的解决办法是直接收集更多人工标记的数据。但对于基于过程的系统来说,获取这类数据既困难又昂贵:需要更多的数据量(参见 Uesato 等人 2022 和 Lightman 等人 2023 的研究),而且对于人来说,确定最优的多步骤路径通常更加困难。

为了解决缺乏和难以获取多步骤人工标记数据的问题,我们专注于通过自我评估、AI 反馈和合成数据生成来提升智能体的质量。特别地,针对合成数据生成,我们采用了最近 Gulcehre 等人在 2023 年提出的强化自我训练 (Reinforced Self-Training, ReST) 算法,并对其进行了调整,使其适应智能体的应用场景。ReST 的内外循环流程保持不变:在外循环(“成长”阶段)中,通过从最新策略中采样来扩大数据集;在内循环(“提升”阶段)中,通过奖励模型对固定数据集进行排名或筛选,从而提升策略。在我们的案例中,“成长”阶段的采样意味着制定一个多步骤的完整轨迹,而“提升”阶段的排名则是直接通过大语言模型 (LLM) 调用,而非依赖于人类偏好的奖励模型。

我们通过衡量智能体回答各种复杂问题的能力来评估搜索智能体的整体表现。这些问题被人工核实,搜索引擎无法直接回答,包含在我们的 Bamboogle 数据集(Press et al., 2023)和自主构建的 BamTwoogle 数据集中。虽然这两个数据集规模较小,但它们足以揭示我们研究中感兴趣的现象。举个例子,图 1 展示了智能体在处理 Bamboogle 问题时,不同模型规模的表现,以及通过 ReST 迭代优化带来的性能提升(我们用的是大型模型制造的合成数据,所以小型模型的表现实际上是基于这些数据的蒸馏效果)。

我们的贡献总结如下:

  • 我们为长篇问答任务打造了一种自我评估的 ReAct 智能体。

  • 我们依据 Bamboogle 和 BamTwoogle 数据集,定义了一种评估智能体的代理指标,重点是自动评估。

  • 我们证明了通过对智能体的推理轨迹进行 ReST 风格的迭代式微调,可以显著提高其性能。

  • 我们仅通过 AI 分步反馈实现了这一点,而不依赖于人工标记的训练数据。

  • 最后,我们发现,在这个迭代过程中生成的合成数据,可以用于将智能体缩减至只有原始教师智能体一到两个数量级的小型模型,同时保持与原始教师智能体相媲美的性能。

2 背景:搜索智能体

这一部分着重介绍“搜索智能体”,这是基于 ReAct (Yao et al., 2022) 智能体改进而来,并融合了 Reflexion 技术 (Shinn et al., 2023)。它利用网络搜索,能够为广泛的知识探索类开放式问题提供详尽、明确来源的长篇答案。智能体处理问题的流程如下 (参见图 2):

  1. 智能体收到一个问题,开始执行搜索循环:

    • 它首先判断是否需要更多信息来回答这个问题。

    • 如果需要,它便调用搜索工具,整理获得的信息摘要,然后返回到决策环节。

    • 如果不需要,则结束搜索循环。

  2. 智能体根据搜索循环中搜集到的信息,撰写出第一版答案草稿。

  3. 接下来,智能体会进行两轮自我修订,确保最终答案的质量:

    • 一次是确保答案与原始问题紧密相关,

    • 另一次则是验证答案是否扎实地基于搜集到的信息。

图 2: 描述搜索智能体工作流程的状态机图示。每个蓝色的图形代表一个大语言模型 (LLM) 的单独调用,展现了不同的推理步骤。
图 2: 描述搜索智能体工作流程的状态机图示。每个蓝色的图形代表一个大语言模型 (LLM) 的单独调用,展现了不同的推理步骤。

3.1 提示方式

我们首先为搜索 AI 智能体手动构建了针对图 2 中五个推理步骤的少样本提示,以此定义了引导流程。特别地,我们选择以 Python 代码的形式格式化我们的提示(具体提示见附录,清单 1 - 6)。

选择“以代码为提示”的方法,是基于以下几点观察:

  • 我们经常需要解析大语言模型的输出,以便与其他系统和工具集成,如果模型的输入和输出结构化,这将更加简单。

  • 同时,代码独特地融合了结构化的元素(如关键字和语法)和自然语言的元素(比如注释和描述性命名)。

  • 此外,大语言模型还能够理解和编写代码。

总的来说,因为代码本身具有结构化且易于解析的特点,它成为与模型交流的理想媒介。在“以代码为提示”的范式下,大语言模型被期待能理解输入中的代码,并以正确的 Python 代码形式继续输出,这对小型模型来说是个挑战。在我们尝试的众多预训练模型中,只有 PaLM 2-L(Anil et al., 2023)能够持续而有效地完成这一任务。因此,我们使用这一模型来生成基于少样本提示的推理路径。

3.2 实施细节

为了使搜索智能体 (Search Agent) 运行起来,我们采用了几种尺寸不一的 PaLM 2“基础”模型(包括 XS、S 和 L 型号),这些模型都经历了预训练和后期的精细调整。在处理每一个步骤时,我们一般会生成多个样本(采用温度值为 T=0.5T=0.5,详见第 4.2 节 了解如何选择温度),并从中选出一个困惑度最低的样本来继续后续流程(对于 L 和 S 型号,我们生成 4 个样本;对于 XS 型号,则生成 16 个)。在搜索工具方面,我们使用了 Google 内部的问答 API,该 API 能够返回排名靠前的若干摘要,我们一般会从中提取每个查询的前 3 个摘要。此外,我们还限定了每个智能体轨迹的搜索总次数,最多不超过 10 次(这一限制通过提示中的 REMAINING_SEARCHES 字段来实现)。搜索智能体通过在 PAST_ACTIONS 字段记录下迄今为止所执行的所有动作,以此来保持轨迹的连续性。

3.3 输入数据

在本研究中,我们选用了四个不同的数据集,作为我们的搜索智能体轨迹的初始问题来源:

  • HotpotQA(杨等人,2018)是一个要求系统进行多文档信息整合以得出答案的多跳推理问答数据集。

  • Eli5(范等人,2019)则是一个长篇问答数据集,要求对开放式问题给出详尽深入的答案。这个数据集基于 Reddit 上的“像我五岁一样解释”(ELI5)论坛,r/explainlikeimfive。

  • Eli5-askH(布拉戈耶维奇,2022)与上述相似,但源自 Reddit 上的 r/askhistorians 子版块,用户在此可以询问历史相关的问题或发起讨论。

  • Eli5-askS(布拉戈耶维奇,2022)与上述相同,不过是来源于 r/askscience 子版块,这里面主要围绕科学问题和答案展开讨论。

我们从每个数据集的训练集中随机挑选了 500 个问题,共计获得了 2000 个多样而富有挑战性的问题。在研究中,我们没有使用这些数据集中的其他信息,比如标签(例如,我们没有通过匹配 HotpotQA 的正确答案来进行筛选,也没有使用这些数据集的验证部分来调整超参数或评估性能)。

3.4 微调

对于每个完成的搜索智能体轨迹,我们将其分解为若干推理步骤,并基于这些步骤创建一个用于微调的混合数据集。我们在所有实验中都采用完整的微调策略。考虑到更大模型的微调成本会显著增加,我们尽量多地使用 XS 规模的模型进行实验。

3.5 排名“奖励”模型

在我们之前的讨论中提到,为了代理的行动轨迹的每一步推理,我们会生成多个样本。通常情况下,我们会选择那些使困惑度最低的样本来继续推进轨迹或进行模型的微调混合。但我们也发现,通过更精细的方法来挑选最佳样本,或许能够取得更好的效果。为此,我们使用了一种经过特别指令调整的 PaLM 2-L 模型,它可以根据模型输入、多个样本输出和排名指导来进行选择(具体的提示信息可以在附录的 8 号列表中找到)。这样,我们就可以根据排名而不是单纯的困惑度值来选择用于微调的样本。

在这一部分,我们的方法与 ReST 的做法有所不同。ReST 使用的是基于阈值过滤和基于人类偏好数据训练的奖励模型。而我们的方法更类似于 RAFT(Dong et al., 2023),在这种方法中,奖励模型会对采样回应进行排名,以选出得分较高的子集进行模型微调,而这里的排名比绝对得分更加重要。特别指出的是,我们主要是在策略之外,即通过更新当前用于微调的动作,来进行基于大语言模型(LLM)的选择。而策略内的轨迹展开则是基于困惑度来进行的。

3.6 迭代自我提升

接下来介绍自我提升算法的核心步骤:

  • 一开始,我们使用一个能在一定水平上完成搜索代理任务的模型,比如经过提示的 PaLM 2-L 模型。我们会基于 2000 个初始问题,从这个模型中收集推理轨迹,这个过程类似于 ReST 方法中的“增长”阶段,不过区别在于我们固定使用这一套初始问题。

  • 接着,我们把这些轨迹转换成用于微调的混合数据,并在转换过程中应用重排算法 RM,这个步骤大致相当于 ReST 中的“改进”阶段。但我们只进行一次这样的“改进”。

  • 然后,我们在这些混合数据上对同等规模的新模型进行微调,并确保新模型的表现超越原模型(具体操作方法将在下一节中讨论)。完成后,我们再用这个性能更强的新模型重复上述过程。

最后,通过在自我提升的不同迭代阶段产生的微调数据上训练规模更小的模型,我们还可以实现一种自我蒸馏的算法。

4 评估

4.1 Bamboogle

我们的主要评估工具是 Bamboogle 数据集(Press 等人,2023)。这是一个半对抗性的数据集,共有 125 个两步式问题,这些问题设计得 Google 搜索无法直接找到答案,但所需的两部分信息都能在 Wikipedia 上找到。当搜索智能体(Search Agent)在处理 Bamboogle 问题时表现得越来越好,我们就可以推断它在使用搜索工具方面的整体能力有所提升。

考虑到搜索智能体生成的答案具有开放式特点(参见图 3),我们不能单纯依靠精确匹配来评估其准确性。我们可以选择手动评估其正确性,或者使用 PaLM 2-L“基础”模型进行自动评估。

例如,一个问题是:世界上第三快的鸟的最高空速是多少(单位为 km/h)?模型给出的回答是:金雕是第三快的鸟。根据[link_id=4, 5, 6],其最高空速为 200mph,折合为 320kph。而实际答案是:320 km/h。

Question: 第三快的鸟的最大空速是多少(单位:千米/小时)?
Model Answer: 金雕是速度第三快的鸟类。根据[link_id=4, 5, 6],它的最大飞行速度为 200mph,即 320kph。
Ground truth: 320 km/h

图 3: 一个 Bamboogle 问题的实例,显示了模型给出的长格式答案。

4.2 自动评估

虽然严格的人工评估更为理想,但它们不仅耗时,而且难以扩展(进行一次人工评估比进行五次简单得多),这使得我们的评估结果波动较大。我们需要提醒的是,智能体的行为路径是随机的(我们在采样推理步骤时使用非零温度),但是要通过增加每个问题的重复评估次数来降低人工评估的不稳定性,并非易事。

我们通过引入基于大语言模型 (LLM) 的自动评估方法来解决这些问题,同时验证它与我们此前对 Bamboogle 轨迹进行的人工评估之间的一致性。我们对比了自动评估和人工评估在多种不同的智能体上的结果,发现它们高度一致。具体而言,皮尔逊相关系数高达 0.98,p=6.6\times 10^,而斯皮尔曼相关系数为 0.83,p=0.0015p=0.0015。考虑到自动评估成本较低,我们现在能够通过大量重复实验来减少结果的波动性。通常,我们会对每个 Bamboogle 问题产生的十个不同路径进行自动评估汇总。

最重要的是,我们不仅使用 Bamboogle 自动评估来估计最终模型的性能,还用它来回答通常需要通过验证集才能解决的各种问题,例如:

  • 智能体最理想的抽样温度是多少?(T=0.5T=0.5

  • 对于不同大小的模型,我们应该选择哪些检查点?(XS 模型的第 9000 步,S 模型的第 5000 步,L 模型的第 3500 步)

  • 我们是否应该继续进行下一轮自我改进?

  • 对于微调模型,针对每个问题使用多条路径的性能影响有多大?

  • 我们是否应该使用自我检查功能?它们是否真的有助于改善结果?(有轻微帮助,参见图 4

特别需要注意的是,我们从不把 Bamboogle 当作训练集,也不会在 Bamboogle 上调整我们的提示,或者使用它的问题来生成微调路径。

图 4: 展示了代理自我提升和自我蒸馏的过程,分别演示了有无自我批判步骤的情况。Bamboogle 自动评估的结果显示,经过十次运行后得出的平均准确率及其标准差,(%)
图 4: 展示了代理自我提升和自我蒸馏的过程,分别演示了有无自我批判步骤的情况。Bamboogle 自动评估的结果显示,经过十次运行后得出的平均准确率及其标准差,(%)

4.3 BamTwoogle

由于 Bamboogle 数据集体积较小,且被用作搜索代理的类似验证集,因此可能存在过拟合的问题。为此,我们引入了一个新的数据集 BamTwoogle,作为测试集来使用。BamTwoogle 主要用于评估模型的最终表现。

BamTwoogle 数据集旨在成为 Bamboogle 的补充,提供更具挑战性的续集。它还解决了我们在人类评估过程中发现的 Bamboogle 的一些不足之处。特别是,我们确保了所有问题都需要至少两步以上的步骤才能回答。由于搜索算法的调整,不是所有 Bamboogle 的问题都符合这一标准,有些甚至可以通过一次搜索解决。

BamTwoogle 与 Bamboogle 类似,是一个小型(共有 100 个问题)、手工制作的信息搜索问题集。其涵盖的主题和问题格式多样化。一般来说,BamTwoogle 遵循以下几个原则:

问题

  • 大部分问题需要进行两次搜索或推理步骤(类似于 Bamboogle),但也有一些问题需要 3 到 4 次搜索或推理

  • 确保答案没有出现在 Google 搜索结果的第一页,这需要通过人工检查来保证

预期答案

  • 答案应该明确无歧义

  • 答案不应随时间而改变,无论是由于问题措辞还是答案本身的性质

  • 在适当的情况下,应考虑包含专有名词的不同版本

  • 应当优先考虑使用维基百科作为事实的来源,尤其是那些未被标记为内容不完整或缺少来源等问题的主题或文章

5 实验

5.1 Pilot 实验

表 1: 代理自我改进和自我提炼,Bamboogle 自动评估,10 轮实验的平均准确率及其标准偏差,(%)

训练数据XSSL
预训练状态不适用不适用70.3±3.5\pm 3.5
:---:---::---::---:
Pilot 实验,人工筛选数据44.7±3.1\pm 3.156.6±3.8\pm 3.871.5±2.2\pm 2.2
自我改进,第一代54.4±3.6\pm 3.661.9±1.9\pm 1.974.0±3.3\pm 3.3
自我改进,第二代65.9±2.6\pm 2.669.7±1.3\pm 1.376.1±1.3\pm 1.3

在主要的自我改进方案外,我们还进行了一个简化版本的 Pilot 实验,如第 3 节所述。这个实验中,我们只从 HotpotQA 和 Eli5 数据集选取 500 个起始问题(这意味着规模较小,并未包括 Eli5-askH 或 Eli5-askS)。我们基于最低困惑度默认设置(不进行 RM 重新排名)构建 Pilot 的微调混合数据。此外,我们还手动检查微调数据,筛选掉约 3030% 的数据样本,因为这些样本存在问题,如提出无效查询、缺乏思考内容、总结遗漏重要信息等。这些 Pilot 实验数据为我们提供了一个微调的基准。

5.2 自我进化与自我优化策略

本研究的核心成果呈现在图 1 和表 1 中。正如前文所述,表格中每个格子展示了对特定模型在 10 次 Bamboogle 测试中自我评估的平均值(和对应的标准差)。

表 2:人类评估,Bamboogle 和 BamTwoogle,准确率(%)

预训练 (L)第二代 (XS)第二代 (S)第二代 (L)
Bamboogle68.867.268.074.4
BamTwoogle68.063.063.074.0

我们的起点是一个预先训练好的(经过提示的)PaLM 2-L 模型,利用此模型生成了 500 条引导轨迹和(独立地)2000 条用于第一轮自我提升的轨迹(称为“第一代”)。随后,我们对 PaLM 2-L、PaLM 2-S 和 PaLM 2-XS 这三种模型进行了针对这些混合数据的微调。

之后,我们使用在第一代数据上微调过的 PaLM 2-L 模型,为第二轮自我提升(“第二代”)生成轨迹。我们通过 8000 条轨迹构建了第二代数据(使用同样的 2000 个初始问题,每个重复四次,这与 ReST 中的“增长”阶段相似)。像之前一样,我们对这三个模型进行了针对新的第二代混合数据的微调。

最后,为了进一步验证,我们对每个第二代模型在 Bamboogle 和 BamTwoogle 上的单次运行进行了人类评估(见表 2),同时也对比了原始的预训练 PaLM 2-L 模型。

5.3 实验削弱测试

人工筛选数据有何影响?

出乎意料的是,我们发现在经过筛选的数据上进行模型微调会略微降低性能(下降了 2.5%),相比之下,未经筛选的初始混合数据表现更好(见表 3,原始数据列)。我们认为这种现象可能是由以下两个因素共同作用的结果:

  • 筛选后的数据量减少,使得模型更难精确学习到如何处理各种提示,
  • 我们的筛选只去除了具体的“差劲”样例,并没有影响整个数据的质量;在其它微调样本中,“差劲”的步骤常常还会作为过去行为(PAST_ACTIONS)的一部分被保留。

对每个问题应该使用多条轨迹吗?

实践证明,与每个问题只用一条轨迹相比,使用两条轨迹可以在微调过程中取得更好的效果(性能提升了 2.2%),但使用更多轨迹并不会显著提高性能(见表 3,第二代数据列)。

表 3:PaLM 2-XS 模型微调训练数据的质量与数量对效果的影响

原始数据,经人工筛选原始数据,未筛选第一代第二代 (1x)第二代 (2x)第二代 (4x)
总轨迹数50050020002000x12000x22000x4
训练样例数3015451817970180073623872424
Bamboogle 自动评测44.7±3.1\pm 3.147.2±3.1\pm 3.154.4±3.6\pm 3.663.4±1.7\pm 1.765.6±1.8\pm 1.865.9±2.6\pm 2.6

数据质量比数据量更重要。

根据表 3的数据,我们可以看出,保持数据量大致相同的情况下,提高数据质量(比如,从第一代产品提升到第二代时获得的 9% 的效益)比增加数据量更加重要。更为关键的是,提高数据质量还能降低评估结果的波动性。

自我批评的影响。

通过智能体的多步骤设计,我们能够轻松评估自我批评环节对整体性能的影响。具体方法是,我们对表 1中使用的所有 Bamboogle 轨迹进行自动评估,但评估的重点是“答案生成”阶段,而不是通常的“最终答案”阶段(见图 2)。正如图 4所示,自我批评对大多数模型带来了小幅度但可测量的正面提升,大约在 0.5-1.0% 之间。具体数据可以在附录的表 4中找到。

6 讨论

过程监督的重要性。

我们需要再次强调,我们在收集轨迹时,并没有使用训练数据中的标签作为信号。这得益于结合了基于过程的方法(将智能体定义为状态机),高温度探索,AI 反馈(用于行动重新排序的零样本“奖励”模型),以及对完成轨迹的逐状态微调。这意味着,即使是最终导致错误答案的状态,模型也能从中学习有价值的信息。更重要的是,它能够处理那些没有单一确定答案的开放式问题,就像 Eli5 中的许多问题一样。

在智能体评估方面,一些特点如非贪婪采样和长篇答案生成带来了新的挑战。我们需要既评估长篇答案的质量,又考虑不同智能体在同一输入下可能产生的不同结果。这要求我们开发与人类评审者保持一致的强大自动评估系统,同时也意味着因为要多次执行智能体轨迹和使用 PaLM 2-L 模型进行自动评估,计算成本大幅提高。

即便计算成本高,可靠的自动评估在衡量不同智能体超参数影响方面仍具有诸多优势。以自我批评步骤为例,我们发现它虽影响不大,但对多步推理的整体性能有积极作用。这与 Huang 等人在 2023 年的研究形成鲜明对比,他们发现在基于结果的 CoT 设置中,自我批评反而降低了性能。我们还注意到,自我批评的积极影响与模型大小有关,对较大模型影响更大,但似乎与自我改进过程无关。

本研究为智能体自我提升奠定了基础,但也存在不少局限,如手动构造的提示、小规模评估、有限的模型选择和单一工具使用等。

未来的研究可探讨是否同一自我提升算法适用于多种工具,特别是在处理未见工具方面的能力是否能得到改善。如果这种能力与自我批评类似,在迭代式训练中无法得到提升,那么我们需要进行哪些调整才能使自我提升在两方面都有效?

还有一个问题是饱和点——我们能进行多少次自我提升迭代,仍能获得显著收益?对于小型模型,饱和点又是怎样的?它们是否最终都会达到相同的性能,还是小型模型的性能始终受限于初始大型模型的表现?

7 相关研究

在继承了 WebGPT(由 Nakano 等人在 2021 年提出,参见链接)的研究基础上,我们正致力于解决长篇问答任务(由 Krishna 等人在 2021 年提出,详情见链接)。在这项任务中,我们的语言智能体会使用网络搜索作为辅助工具,通过检索信息并结合明确的参考资料来生成答案。虽然 WebGPT 主要关注于模仿学习和基于大量人类示例的强化学习 (RL),但我们的研究更加注重减少对人工干预的依赖。我们训练中唯一使用的标注示例,是在智能体推理步骤的提示中引入的少量样本示例(详见附录 A.1)。

虽然使用手工设计的少样本提示来设置语言智能体是目前最普遍的方法(参考 Press 等人 2023 年的研究 链接,Yao 等人 2022 年的研究 链接,以及 Shinn 等人 2023 年的研究 链接),但也有例外。例如,DSP(由 Khattab 等人在 2023a 年提出,参见链接)就是一个例外,它自动调整少样本示例中的提示,利用一些已标注的训练样本进行优化,并能对智能体的特定部分进行进一步的微调。

与一般的提示(prompting)方法不同,智能体(agent)的微调(fine-tuning)操作相对较少(参见 Nakano et al. (2021)、Yao et al. (2022)、Chen et al. (2023))。我们的微调方式与 FireAct (Chen et al., 2023) 类似,但主要区别在于我们在训练或筛选数据时不依赖人类的标注。相反,我们通过利用 AI 反馈来构建合成数据,以达到自我提升的目的。

在自我提升方面,一些值得关注的论文包括 STAR (Zelikman et al., 2022)、ReST (Gulcehre et al., 2023)、ReSTEM (Singh et al., 2023) 和 RAFT (Dong et al., 2023)。不同于 STAR 和 ReSTEM,我们不将答案的准确性作为反馈信号。与 ReST 和 RAFT 不同,我们没有训练过的基于人类偏好的奖励模型。此外,这四篇论文都是针对以结果为导向的系统,而我们的研究则集中在基于过程的系统上。

8 结论

本研究展示了结合 AI 反馈的类 ReST 方法,如何有效地应用于多步骤推理的大语言模型(LLM)智能体。我们证明了这种方法是构建高质量合成数据、实现智能体自我提升的一种简单有效的途径。而且,这些质量不断提高的数据也能用于把多步智能体转化为体积更小的模型,同时保持大型原模型的大部分性能。

参考文献

  • Anil 等人 (2023)↑Rohan Anil、Andrew M Dai、Orhan Firat、Melvin Johnson、Dmitry Lepikhin、Alexandre Passos、Siamak Shakeri、Emanuel Taropa、Paige Bailey、Zhifeng Chen 等。《Palm 2 技术报告》。arXiv 预印本 arXiv:2305.10403,2023 年发表。

  • Blagojevic (2022)↑Vladimir Blagojevic。《长篇问答超越 ELI5:一个更新后的数据集和方法论》,2022 年发表。链接 towardsdatascience.com/long-form-qa-beyond-eli5-an-updated-dataset-and-approach-319cb841aabb

  • Chase (2022)↑Harrison Chase。Langchain 项目。https://github.com/hwchase17/langchain,2022 年推出。

  • Chen 等人 (2023)↑Baian Chen、Chang Shu、Ehsan Shareghi、Nigel Collier、Karthik Narasimhan、Shunyu Yao。《Fireact:向语言智能体微调迈进》,2023 年。

  • Dohan 等人 (2022)↑David Dohan、Winnie Xu、Aitor Lewkowycz、Jacob Austin、David Bieber、Raphael Gontijo Lopes、Yuhuai Wu、Henryk Michalewski、Rif A. Saurous、Jascha Sohl-dickstein、Kevin Murphy、Charles Sutton。《语言模型级联》,2022 年。

  • Dong 等人 (2023)↑Hanze Dong、Wei Xiong、Deepanshu Goyal、Yihan Zhang、Winnie Chow、Rui Pan、Shizhe Diao、Jipeng Zhang、Kashun Shum、Tong Zhang。《Raft:奖励排名微调在生成式基础模型对齐中的应用》,2023 年。

  • Fan 等人 (2019)↑Angela Fan, Yacine Jernite, Ethan Perez, David Grangier, Jason Weston, 和 Michael Auli. 他们提出了一种长篇问答形式的论文《ELI5》。该论文发表于 2019 年的 CoRR,论文编号为 abs/1907.09190。详情可见网址 http://arxiv.org/abs/1907.09190

  • Gao 等人 (2023)↑Luyu Gao, Aman Madaan, Shuyan Zhou, Uri Alon, Pengfei Liu, Yiming Yang, Jamie Callan, 和 Graham Neubig. 在 2023 年,他们提出了一种名为 PAL(程序辅助的语言模型)的新概念。

  • Gulcehre 等人 (2023)↑Caglar Gulcehre, Tom Le Paine, Srivatsan Srinivasan, Ksenia Konyushkova, Lotte Weerts, Abhishek Sharma, Aditya Siddhant, Alex Ahern, Miaosen Wang, Chenjie Gu, 等。他们在 2023 年撰写了关于语言建模的强化自训练 (REST) 研究的预印本文章,标题为《Reinforced self-training for language modeling》,编号为 arXiv:2308.08998。

  • Huang 等人 (2023)↑Jie Huang, Xinyun Chen, Swaroop Mishra, Huaixiu Steven Zheng, Adams Wei Yu, Xinying Song, 和 Denny Zhou. 他们在 2023 年指出,大语言模型目前还无法自行纠正推理错误。

  • Khattab 等人 (2023a)↑Omar Khattab, Keshav Santhanam, Xiang Lisa Li, David Hall, Percy Liang, Christopher Potts, 和 Matei Zaharia. 他们于 2023 年提出了一种新方法,名为“展示 - 搜索 - 预测”,用以结合检索和语言模型,以解决知识密集型的自然语言处理问题。

  • Khattab 等人 (2023b)↑Omar Khattab, Arnav Singhvi, Paridhi Maheshwari, Zhiyuan Zhang, Keshav Santhanam, Sri Vardhamanan, Saiful Haq, Ashutosh Sharma, Thomas T. Joshi, Hanna Moazam, Heather Miller, Matei Zaharia, 和 Christopher Potts. 他们在 2023 年发表了一篇名为 DSPY 的论文,该论文介绍了如何将声明式语言模型调用编译成自我改进的管道。

  • Krishna et al. (2021)↑Kalpesh Krishna, Aurko Roy, 和 Mohit Iyyer. 探讨长篇问题解答中面临的挑战,2021.

  • Lightman et al. (2023)↑Hunter Lightman, Vineet Kosaraju, Yura Burda, Harri Edwards, Bowen Baker, Teddy Lee, Jan Leike, John Schulman, Ilya Sutskever, 和 Karl Cobbe. 让我们逐步核实,2023.

  • Liu (2022)↑Jerry Liu. Llamaindex. https://github.com/jerryjliu/llama_index, 2022.

  • Madaan et al. (2023)↑Aman Madaan, Niket Tandon, Prakhar Gupta, Skyler Hallinan, Luyu Gao, Sarah Wiegreffe, Uri Alon, Nouha Dziri, Shrimai Prabhumoye, Yiming Yang, Shashank Gupta, Bodhisattwa Prasad Majumder, Katherine Hermann, Sean Welleck, Amir Yazdanbakhsh, 和 Peter Clark. 自我精炼:用自反馈迭代优化,2023.

  • Nakano et al. (2021)↑Reiichiro Nakano, Jacob Hilton, Suchir Balaji, Jeff Wu, Long Ouyang, Christina Kim, Christopher Hesse, Shantanu Jain, Vineet Kosaraju, William Saunders, 等。WebGPT: 结合人类反馈的浏览器辅助问答系统。arXiv 预印本 arXiv:2112.09332, 2021.

  • Press et al. (2023)↑Ofir Press, Muru Zhang, Sewon Min, Ludwig Schmidt, Noah A. Smith, 和 Mike Lewis. 量化并缩减语言模型中的合成能力差异,2023.

  • Reppert et al. (2023)↑Justin Reppert, Ben Rachbach, Charlie George, Luke Stebbing, Jungwon Byun, Maggie Appleton, 和 Andreas Stuhlmüller. 迭代分解法:监督推理过程以提升科学问答质量,2023.

  • Shinn 等人 (2023)↑Noah Shinn, Beck Labash, 和 Ashwin Gopinath 的研究发表了一篇论文,标题为《Reflexion》:这是一种具备动态记忆和自我反思能力的自治 AI 智能体。这项研究已于 2023 年在 arXiv 发布预印本,编号为 arXiv:2303.11366。

  • Singh 等人 (2023)↑Avi Singh 与其团队的研究表明,通过使用语言模型,我们可以超越人类数据的限制,扩展自我训练方法来解决复杂问题。这项成果发表于 2023 年。

  • Uesato 等人 (2022)↑Jonathan Uesato 和团队于 2022 年提出了一种新方法,利用过程和结果反馈来解决数学文字题,这为数学教学和自动化提供了新的视角。

  • Xi 等人 (2023)↑Zhiheng Xi 及其团队在 2023 年进行了一项关于大语言模型智能体的综合调查,探讨了它们的崛起及其巨大潜力。这份研究报告详细地分析了这一领域的最新进展和未来趋势。

  • Yang 等人 (2018)↑Zhilin Yang, Peng Qi, Saizheng Zhang, Yoshua Bengio, William W. Cohen, Ruslan Salakhutdinov, 和 Christopher D. Manning. 他们发表的论文 "HotpotQA: 一个多样化、可解释多跳问题回答的数据集",探讨了一个新的数据集,旨在提高问题回答的多样性和可解释性。该论文发表于 CoRR 杂志,编号为 abs/1809.09600, 2018 年。论文链接 http://arxiv.org/abs/1809.09600

  • Yao 等人 (2022)↑Shunyu Yao, Jeffrey Zhao, Dian Yu, Nan Du, Izhak Shafran, Karthik Narasimhan, 和 Yuan Cao. 他们在论文 "React: 在语言模型中融合推理与行动" 中,探讨了如何在语言模型中有效结合推理和行动。这篇预印本论文发表于 arXiv preprint,编号为 arXiv:2210.03629, 2022 年。

  • Zelikman 等人 (2022)↑Eric Zelikman, Yuhuai Wu, Jesse Mu, 和 Noah D. Goodman. 他们的论文 "Star: 通过推理来引导推理",在 2022 年提出了一种新的推理引导方法。

推理步骤解读。

我们所有的推理提示均为多次射击 (n 次,n>1n>1) 形式,但此处仅展示了部分内容,限于首个示例:

  • 决策步骤的提示见列表 1(完整提示共有 9 次射击内容)。

  • 摘要步骤的提示展示在列表 2(完整提示包括 6 次射击内容)。

  • 生成答案的提示为 5 次射击,列表 3 中展示了其中的 1 次射击部分。

  • 关于相关性自我检查的提示见列表 5(完整提示为 6 次射击)。

  • 最后,关于基础自我检查的提示展示在列表 6(完整提示包含 5 次射击内容)。

  • 这两项自检均采用了来自列表 4 的共同前缀。

列表 1:决策步骤提示(部分内容)

"""Implement an agent capable of answering complex queries by potentially search multiple times.
"""
import dataclasses
class Action:
"""Base class for different actions."""
...
@dataclasses.dataclass
class ActionWrapper:
"""Encapsulates the reasoning as well as the selected action.
Attributes:
thoughts: Record your thoughts on why we should do this action.
action: The actually selected action.
"""
thoughts: str
action: Action
@dataclasses.dataclass
class Search(Action):
"""The Google search command.
Attributes:
query: The query to be sent to Google.
"""
query: str
@dataclasses.dataclass
class Terminate(Action):
"""Command to terminate the search sequence."""
...
#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = ’I want to buy the Ikea Klippan loveseat, but I\’m not sure whether it can fit into my 2019 Honda Odyssey. Could you check whether I need to fold down the seat?’
PAST_ACTIONS: List[Action] = [
Search(query=’ikea klippan loveseat dimension’,
thoughts="To answer the ORIGINAL_QUESTION, we need to find the size of the Ikea Klippan loveseat and the cargo size of the 2019 Honda Odyssey, and then compare them. Let’s start by finding the size of the Ikea Klippan loveseat.",
),
SelectLink(selected_links=[
ResultItem(link_id=1, link_text=’KLIPPAN Loveseat, Vissle gray - IKEA’,
snippet=’ Measurements Width: 70 7/8 " Depth: 34 5/8 " Height: 26 " Height under furniture: 4 3/8 " Seat depth: 21 1/4 " Seat height: 16 7/8 "),],
grounded_summarization=’According to [link_id=1] the dimension of the ikea klippan loveseat is Width: 70 7/8"; Depth: 34 5/8"; Height: 26".,
thoughts="We still need to find the cargo size of the 2019 Honda Odyssey to answer the ORIGINAL_QUESTION.",
),
]
REMAINING_SEARCHES: int = 4
ORIGINAL_QUESTION: str = ’I want to buy the Ikea Klippan loveseat, but I\’m not sure whether it can fit into my 2019 Honda Odyssey. Could you check whether I need to fold down the seat?’
ACTION_SELECTED = ActionWrapper(thoughts="The past result gives us the dimension of the love seat. We indeed need to find the cargo size of the 2019 Honda Odyssey.", action=Search(query=2019 Honda Odyssey cargo size’)) # [END]
#########################
# Example 2:
#########################

列表 2:摘要步骤提示(部分内容)

"""Implementing step 2 of Search and Answer procedure: Search result filtering and summarization.
"""
#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = "What’s the efficiency of the solar panels on the garden solar lights?"
PAST_ACTIONS: List[Action] = [
Search(query=’garden solar light panel efficiency’,
thoughts="Let’s just rephrase the search query a bit. The intention of the original question is pretty clear.",
),
]
CURRENT_SEARCH_RESULTS = SearchResult(links=[
ResultItem(link_id=17, link_text=’Use Solar Outdoor Lighting for Energy Efficiency - Sepco Solar’,
snippet=’Depending on the type of lighting you install and the wattage of the fixtures, this can eat up a budget quickly. Instead, going with a solar outdoor lighting system to provide the required light can greatly reduce the project costs, help improve the environment, and keep electrical costs in the bank where it belongs.),
ResultItem(link_id=18, link_text=’How Do Solar Garden Lights Work? - The OutdoorLights Store’,
snippet=’The solar panel converts solar energy into electricity The energy absorbed by the photovoltaic cells in the panel creates electrical charges. These charges move in response to an electrical field in the solar panel's cells, which ultimately causes electricity to flow.),
ResultItem(link_id=19, link_text=10 things you should know about the garden solar lights’,
snippet=’The solar panels are generally made from two types of cells, monocrystalline or polycrystalline. Both of them are low cost, however, different panel technology can lead to different efficiency under different conditions.),
])
ORIGINAL_QUESTION: str = "What’s the efficiency of the solar panels on the garden solar lights?"
# [link_id=17] is an article about garden solar light, which doesn’t have anything specific about the solar panels. Not selected.
# [link_id=18] is an article on how to best install those solar lights. Not relevant to the solar panels used. Not selected.
ACTION_SELECTED: LinkSelection = LinkSelection(grounded_summarization=’According to [link_id=19], there are two types of solar cells used for garden solar lights, the monocrystalline or polycrystalline panels., thoughts="It seems like non of the links shows the efficiency number. However, link 19 provides some hints on what to search next. We can look into the efficiency number of those two types of panels.", selected_link_ids=[19]) # [END]
#########################
# Example 2:
#########################

列表 3:生成答案提示(部分内容)

"""Implementing step 3 of the multi-round search agent: Answer generation based on all the collected search results.
"""
#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = "What’s the white powdery residual often found on a humidifier?"
PAST_ACTIONS: List[Action] = [
Search(query=’what is humidifier’,
thoughts="Let’s solve this step by step. The person is asking about the residual found in humidifier. Let’s first define what does humidifier do.",
),
SelectLink(selected_links=[
ResultItem(link_id=1, link_text=’Humidifiers: What They Do for Health, Uses, Types, and More’,
snippet=’What is a humidifier? Humidifiers are devices that add moisture to the air to prevent dryness that can cause irritation in many parts of the body. Humidifiers can be particularly effective for treating dryness of the skin, nose, throat, and lips. They can also ease some symptoms caused by the flu or common cold.),
ResultItem(link_id=3, link_text=5 humidifier uses: Benefits and risks - Medical News Today’,
snippet=’We do the research so you can find trusted products for your health and wellness. Read more about our vetting process. Humidifiers add moisture to the air, which can benefit people with respiratory symptoms or dry skin. There are several ways to use humidifiers in the home or office, but there are also some risks.),],
grounded_summarization=’According to [link_id=1] and [link_id=3], humidifier is a device that adds moisture to the air to prevent dryness that can cause irritation in many parts of the body.),
thoughts="Now that we know what humidifier is, we can look into the white powdery residual.",
),
Search(query=’white powdery residual in humidifier’,
thoughts="Let’s now look into the white powdery residual.",
),
SelectLink(selected_links=[
ResultItem(link_id=10, link_text=’What is white dust and should I be concerned about it? - HVAC.com’,
snippet=’White dust is usually caused by mineral content in the water that goes into a humidifier. When the mist lands on furniture or other surfaces and dries, it can sometimes leave behind dried mineral deposits, or "white dust."),
link_text=’What is white dust and should I be concerned about it? - HVAC.com’, snippet=’White dust is usually caused by mineral content in the water that goes into a humidifier. When the mist lands on furniture or other surfaces and dries, it can sometimes leave behind dried mineral deposits, or "white dust.")
ResultItem(link_id=11, link_text=’Why is White Dust Coming Out of My Humidifier?’,
snippet=’The white dust that you are finding on surfaces around your home is likely dried-up minerals from water vapor created by the humidifier. These minerals are natural in our home water supply. If you've ever heard of the term "hard water," it's referring to water with high levels of calcium and magnesium.),],
grounded_summarization=’According to [link_id=10], and [link_id=11], the white powdery residual is caused by the mineral content in the water.),
thoughts="We have all the information to answer the question.",
),
Terminate(thoughts="We have all the information to answer the question."),
]
ORIGINAL_QUESTION: str = "What’s the white powdery residual often found on a humidifier?"
ACTION_SELECTED: Answer = Answer(thoughts="The first search (’what is humidifier’) is probably not what the questioner cares, so let’s omit that in the answer. We can focus more on the question itself.", answer="The white powdery residue in the humidifier is usually caused by mineral content in the water, according to [link_id=10]. For example, water may contain high levels of calcium and magnesium [link_id=11].") # [END]
#########################
# Example 2:
#########################

列表 4:自我检查提示(前缀部分)

"""Check whether the ANSWER addresses the ORIGINAL_QUESTION and whether the ANSWER is based on SelectLinks in PAST_ACTIONS."""
from dataclasses import dataclass
from typing import List, Tuple
class Action:
"""Base class for different actions."""
class Check_Answer(Action):
"""Check whether the ANSWER addresses the ORIGINAL_QUESTION."""
def __init__(self, passed: bool) -> None:
self.passed = passed
class Revise_Answer(Action):
"""Revise the answer if it did not pass the check, based on information from SelectLinks in PAST_ACTIONS."""
def __init__(self, revised_answer: str) -> None:
self.revised_answer = revised_answer
...
@dataclasses.dataclass
class ResultItem:
"""Single search result, with link id, link title and snippet.
Attributes:
link_id: A unique integer id of this link.
link_text: The title of the link.
snippet: The snippet from the page that’s relevant to the query
"""
link_id: int
link_text: str
snippet: str

列表 5:相关性自我检查(部分内容)

#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = ’How to exclude a website from Google search’
PAST_ACTIONS: List[Action] = [
Search(query=’exclude site in google search’,
thoughts="We simply the ORIGINAL_QUESTION to a good search query.",
),
SelectLink(selected_links=[
ResultItem(link_id=2, link_text=’How to Exclude a Website from Google Search Results - Keyword’,
snippet="You can exclude a domain or even a specific page from appearing on Google search results. Here’s how ..."),
ResultItem(link_id=3, link_text=’How do I exclude/block specific web sites from search results?’),
snippet="In the absence of a browser extension, the simplest way is to add -site:website_name after your search terms. ... I can’t get rid of books.google.com results. I’ ..."),
ResultItem(link_id=6, link_text="Q&A: Can you exclude a specific website from Google’s search results?"),
snippet=’Jul 31, 2022 . All you have to do is simply append -site:pinterest.com to the end of your search query. For example, if you were searching for the term "paper ...),
],
grounded_summarization=[link_id=3] mentions that we can add -site:website_name to the google search query to exclude a website. [link_id=6] provides an example.),
thoughts="We found enough info for a good answer to the ORIGINAL_QUESTION.",
),
Terminate(thoughts="This is a good answer to the question.")
Answer(thoughts="We summarize the relevant info found in PAST_ACTIONS.", answer="To exclude a website from Google search result, you can add -site:website_name after your search terms according to [link_id=3]. For example, if you want to exclude pinterest.com, you can simply add -site:pinterest.com according to [link_id=6].")
]
ORIGINAL_QUESTION: str = ’How to exclude a website from Google search’
ANSWER: str = ’To exclude a website from Google search result, you can add -site:website_name after your search terms according to [link_id=3]. For example, if you want to exclude pinterest.com, you can simply add -site:pinterest.com according to [link_id=6].
# The ANSWER is directly addressing the ORIGINAL_QUESTION.
# The ANSWER refers to [link_id=3] which correctly supports the core statement of adding -site:website_name. The example from the answer is indeed from [link_id=6].
ACTION_SELECTED: Command = Check_Answer(passed=True) # [END]
#########################
# Example 2:
#########################

列表 6:基础自我检查(部分内容)

#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = "What did Jim Betts’ competitor in the 1980 election achieve in 1962?"
PAST_ACTIONS: List[Action] = [
Search(query=’who was Jim Betts competitor in 1980,
thoughts="This question is asking about the achievement of Jim Betts’ competitor in 1962. Let’s first search for who this competitor is.",
),
SelectLink(selected_links=[
ResultItem(link_id=1, link_text=’Jim Betts (politician) - Wikipedia’,
snippet=’Jim Betts is a former member of the Ohio House of Representatives. He ran against incumbent U.S. Senator John Glenn in 1980. He lost and ran in 1982 for lieutenant governor.),],
grounded_summarization="According to [link_id=1], Jim Betts’ competitor in 1980 was John Glenn."),
thoughts="Now that we know who the competitor is, we can search for his achievements in 1962.",
),
Search(query=’John Glenn achievements 1982,
thoughts="Now that we know who the competitor is, we can search for his achievements in 1982.",
),
SelectLink(selected_links=[
],
grounded_summarization=’Nothing is selected.),
thoughts="The query ’John Glenn achievements 1982’ is not very good. It should be ’John Glenn achievements 1962’.",
),
Search(query=’John Glenn achievements 1962,
thoughts="John Glenn is the person we are looking for. Let’s change the date to 1962.",
),
SelectLink(selected_links=[
ResultItem(link_id=19, link_text=’John Glenn | Biography, Accomplishments, & Facts | Britannica’,
snippet="Glenn, Jr., (born July 18, 1921, Cambridge, Ohio, U.S.-died December 8, 2016, Columbus, Ohio), the first U.S. astronaut to orbit Earth, completing three orbits in 1962. (Soviet cosmonaut Yuri Gagarin, the first person in space, had made a single orbit of Earth in 1961.) Glenn joined the U.S. Naval Reserve in 1942."),],
grounded_summarization="According to [link_id=19], John Glenn’s achievement in 1962 was to become the first American to orbit the Earth."),
thoughts="We have all the information to answer the question.",
),
Terminate(thoughts="We have all the information we need to answer the ORIGINAL_QUESTION. Let’s stop searching and answer the question.")
Answer(thoughts="We have the answer to the question.", answer="Jim Betts\’ competitor in the 1980 election was John Glenn. And John Glenn\’s achievement in 1962 was to become the first American to orbit the Earth.")
]
ORIGINAL_QUESTION: str = "What did Jim Betts’ competitor in the 1980 election achieve in 1962?"
ANSWER: str = ’Jim Betts\’ competitor in the 1980 election was John Glenn [link_id=1]. And John Glenn\’s achievement in 1962 was to become the first American to orbit the Earth [link_id=19].
# ANSWER directly addresses the ORIGINAL_QUESTION.
# [link_id=1] indeed says that Jim Betts\’ run against John Glenn in 1980, consistent with ANSWER.
# [link_id=19] indeed says John Glenn is the first US astronaut to orbit the earth, consistent with ANSWER.
ACTION_SELECTED: Command = Check_Answer(passed=True) # [END]
#########################
# Example 2:
#########################

自动评估方法。

完整的 5 次射击自动评估方法提示详见列表 7

列表 7:自动评估方法(完整提示)

"""Check whether the ANSWER implies the REF_ANSWER to the question."""
def Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER):
"""Check whether the ANSWER implies the REF_ANSWER."""
# todo
#########################
# Example 1:
#########################
ORIGINAL_QUESTION: str = ’Are McIntyre Mines and Copperfields Mine in the same country?’
ANSWER: str = ’According to [link_id=1], Copperfields Mine is in Ontario, Canada. According to [link_id=4], McIntyre Mines is also in Ontario, Canada. So yes, they are in the same country.
REF_ANSWER: str = ’yes’
# the ANSWER implies the answer to the original question is yes, this is consistent with the REF_ANSWER.
Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER) = True # [END]
#########################
# Example 2:
#########################
ORIGINAL_QUESTION: str = ’Which Director, James Richard Kelly or Paul L. Stein has a list of 67 films to his credit? ’
ANSWER: str = ’According to [link_id=1] and [link_id=2], James Richard Kelly has 5 films to his credit.
REF_ANSWER: str = ’Paul Ludwig Stein (4 February 1892 - 2 May 1951) was an Austrian-born film director with 67 films to his credit.
# the ANSWER does not imply the REF_ANSWER because ANSWER does not mention Paul Ludwig Stein.
Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER) = False # [END]
#########################
# Example 3:
#########################
ORIGINAL_QUESTION: str = ’Are the genuses Michelia and Stenomesson in the same family?’
ANSWER: str = ’Based on the information we have, we are not sure whether the genuses Michelia and Stenomesson are in the same family [link_id=3] does not contain this information.
REF_ANSWER: str = ’no’
# The ANSWER did not determine whether or not Michelia and Stenomesson are in the same family.
# The REF_ANSWER implies that they are not in the same family.
# Thus we cannot infer the REF_ANSWER given the ANSWER.
Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER) = False # [END]
#########################
# Example 4:
#########################
ORIGINAL_QUESTION: str = ’In what year was the winner of the 44th edition of the Miss World competition born?’
ANSWER: str = ’According to [link_id=2], the winner of the 44th edition of the Miss World competition is Aishwarya Rai.\nAccording to [link_id=4], she was born in 1973.
REF_ANSWER: str =1973
# The ANSWER implies 1973 as the final answer to ORIGINAL_QUESTION.
# REF_ANSWER implies 1973 as the final answer to ORIGINAL_QUESTION, too.
Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER) = True # [END]
#########################
# Example 5:
#########################
ORIGINAL_QUESTION: str = ’Skull & Bones is a mini-series by a man that is an editor of what two comics?’
ANSWER: str = ’The question is ill-formed or out-of-date. We should ask for clarification from the asker.
REF_ANSWER: str = ’Marvel Comics and DC Comics’
# The ANSWER did not provide any answer to ORIGINAL_QUESTION.
Check_Answer(ORIGINAL_QUESTION, ANSWER, REF_ANSWER) = False # [END]
#########################
# Example 6:
#########################

“奖励”模型排名

这份奖励模型的完整提示内容可以在文献 8 的清单中找到。值得一提的是,这是唯一一个不采用“代码作为提示”方法的零样本提示,它设计的初衷是配合接受过指令调整的模型一起使用。

清单 8:奖励模型的完整提示

"""Rater Instructions:
- The goal of this rating is to filter out bad actions, so that they’ll be excluded from the fine-tuning dataset.
- Overall, we want to the agent to produce relevant and grounded answers with minimal steps. Anything that deviates from this goal is considered bad.
- If any element (thoughts, comments etc.) is empty, then it’s automatically bad.
#########################################
*** Model Can See:
‘‘‘
{inputs}
‘‘‘
*** Model Output #1:
‘‘‘
{action1}
‘‘‘
*** Model Output #2:
‘‘‘
{action2}
‘‘‘
*** Model Output #3:
‘‘‘
{action3}
‘‘‘
*** Model Output #4:
‘‘‘
{action4}
‘‘‘
#########################################
Your Instructions:
- Choose the best model output based on the rater’s instructions.
- Don’t assume in your decision that the model knows anything outside of "Model Can See" section.
- Be specific in your explanation.
Output 3 lines when answering and make sure to follow the precise format.
Explanation: why you think model output #X is the best
Answer: #X
Ranking: #X > #Y > ...
"""

A.2 附加数据

表 4 显示了智能体自我提升和自我精炼的过程。这是通过 Bamboogle 自我评估方法,在 10 次运行中计算出的平均准确率及其标准偏差(百分比)。这些数据是在自我批判步骤之前收集的。

XSSL
预训练情况无数据无数据69.5±2.8\pm 2.8 (-0.8)
初步尝试,人工筛选44.3±3.0\pm 3.0 (-0.4)54.4±4.1\pm 4.1 (-2.2)70.9±3.0\pm 3.0 (-0.6)
第一代自我提升54.8±3.7\pm 3.7 (+0.4)61.2±2.5\pm 2.5 (-0.7)73.1±3.0\pm 3.0 (-0.9)
第二代自我提升65.6±3.0\pm 3.0 (-0.3)69.2±1.8\pm 1.8 (-0.5)75.0±1.3\pm 1.3 (-1.1)