RePrompt:面向大模型代理的自动提示工程优化方法

人工智能咨询培训老师叶梓 转载标明出处

大模型(LLMs)在传统自然语言处理领域之外的应用取得了显著成功,例如代码生成、旅行规划和机器人控制等。这些领域中,向LLMs提供的提示(prompt)对生成结果的影响巨大,因此,自动提示工程(APE)成为研究者和用户关注的重点。然而,现有的APE方法存在局限性,如难以超越手工精心设计的提示,以及LLMs无法学习新范式等。针对这些问题,本文提出了一种新的方法——RePrompt,旨在通过优化LLM代理的提示来提高特定领域的规划能力。

 想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具(限时免费)。

1小时实战课程,您将学习到如何轻松上手并有效利用 Llama Factory 来微调您的模型,以发挥其最大潜力。

CSDN教学平台录播地址:https://edu.csdn.net/course/detail/39987 

方法

由于大模型可能无法一次性给出正确答案,因此提出了在最终答案给出之前允许进行多次交互的方法。这些交互允许用户提供错误信息,使大模型能够利用这些额外信息再次尝试。例如,在代码生成任务中,这些信息可能是典型的Python运行时错误消息。如何使用特定的提示与错误消息,主要取决于不同的任务。以广泛使用的REACT为例,大模型需要在进行下一轮之前提供对当前结果的思考,这些思考可能包括对当前操作是否正确的简短分析。

为了使大模型专注于推理,链式思维(Chain-of-Thoughts, CoT)是大模型中常用的一种方法。通过添加简单的“让我们一步一步来做”的句子,大模型会自动考虑在生成最终答案之前输出辅助步骤。这些辅助步骤被证明能有效帮助大模型解决推理问题。不同任务所需的辅助步骤可能差异显著,这些确切的步骤被称为大模型代理中的规划。

RePrompt是针对大模型代理规划部分的提示优化方法。该方法基于交互式动作生成过程,类似于典型的机器学习训练循环,但这里训练的是输入模型的提示,而不是大模型的参数。给定用于训练的特定小型推理任务数据集,首先让大模型使用当前提示生成响应。这个过程包括与反馈提供者的交互,如REACT或REFLEXION。

Fig. 1 展示了RePrompt的工作流程。这个流程包括行动循环(Act Loop),即大模型根据当前提示生成响应,以及优化循环(Optimizer Loop),即根据聊天历史的总结来更新提示。

在收集了整个批次的聊天历史后,将这些数据输入到大模型中,以总结最重要的焦点问题。这个焦点可能是经常出现并导致长迭代的某个问题,或者是在REACT中被证明对生成良好响应非常有效的特定建议(思考)。

然后,使用另一个大模型根据这个总结的典型错误来更新实际提示。这个优化器大模型需要遵循以下规则:改进应集中在通用提示部分,而不是因数据点而异的场景特定提示;改进应优先识别特定问题是否出现在给定场景中。

基于这些规则,大模型将执行以下步骤:提出几种可能的解决方案;逐一分析这些解决方案,看哪一个更好地符合规则;选择最佳解决方案;分析原始提示中的原始步骤,检查所选解决方案是否应插入当前步骤之前,或者解决方案是否是步骤的更具体细节,如果是步骤,则在此处添加提示。

完成这些步骤后,将获得更新后的提示,并可以继续进行更多迭代,直到提示收敛。这个收敛的提示将有助于提高首轮生成结果。在测试期间,只需要使用收敛后更新的提示,并在新测试集上进行测试。在测试期间,不需要完全相同的生成响应过程,例如,如果反馈生成器的成本非常高,可以完全从Act过程中移除。

在优化过程中,RePrompt只改变分步指令阶段,而不是任何其他问题描述或格式要求。这导致算法最终可能得到两种提示格式:如果当前提示是REACT风格的,已经包括了分步指令,那么提示将通过添加更多关于操作的提示来不断更新这个思考步骤;如果提示是分步的,比如解决数学或逻辑问题,那么算法可能会向规划生成的程序中添加越来越多的步骤,这将导致在规划过程中有更具体的尝试和关注方向,指导大模型得到正确的最终答案,并作为分解高级任务的规划器。

实验

实验中,每个领域的停止标准和其他超参数设置与原始环境相同。默认情况下,使用温度参数为0,种子为42。所有结果都在GPT-4-turbo-1106-preview上进行测试,这是因为其强大的通用能力。

实验首先测试了规划定义和领域语言(PDDL)生成任务。给定一个PDDL实例的自然语言描述,任务是定义PDDL中动作的前提条件和效果。具体来说,实验只考虑构建模型的第一步,不涉及后续的校正阶段和PDDL翻译阶段。

Table 1 展示了在没有任何额外领域专家帮助的情况下,正确生成PDDL实例的结果。该表显示了在“TyreWorld”领域的聊天历史用于RePrompt的训练集,并更新一次以获得更新的提示。由于反馈由领域专家提供,准确但昂贵,因此不进行多轮迭代,选择只对RePrompt进行1轮训练,大大减少了额外注释的需求。结果显示,RePrompt得到的提示不仅在训练集上表现更好,而且推广到其他相关领域并提高了成功率。有趣的是,更改提示后并没有引入任何新的错误,即新提示犯的错误是原始论文提示犯错误的子集。这意味着需要更少的领域专家来提供注释,使整个PDDL翻译过程更加快速。

在剩余的错误中,一些是由于缺少描述中提到的常识造成的。例如,在动作“Empty a Vacuum Cleaner”中,动作描述包括一句话:“如果垃圾桶可以打开,则应打开垃圾桶。”这是常识,没有额外的信息。然而,在当前上下文中,这句话表示了一个前提条件。但是,大模型生成的PDDL前提条件却省略了这一点,导致了错误。类似的问题也发生了几次,导致了大量可以归类在一起的错误。

接下来,实验在TravelPlanner基准测试中进行了单独规划设置的测试。在这个基准测试中,大模型需要提供一个具体的每日计划,包括住宿、餐饮和旅行方式,并满足常识性约束,如合理的城市路线和预算约束。虽然有一些具体约束的分解,但比较不同方法的主要指标是最终通过率。

Table 2 展示了Travel Planner基准测试的结果。结果显示,经过5轮训练的RePrompt生成的提示比纯REFLEXION结果在最终通过率上更好。在优化过程中,与PDDL环境不同,经过一轮训练的优化提示并没有显示出任何好处。这是因为第一轮更新的提示只包括一个额外的建议,即考虑预算约束。无论这轮更新是什么,它都是从REACT方案提供的想法中总结出来的,通常是生成最终计划的迭代循环已经注意到并处理的事情。经过5轮训练的优化提示有助于大模型在用于训练的数据集和未包含在优化过程中的其他数据上表现更好。这表明了通过该过程获得的提示的泛化能力。

进一步分析最终通过率的提高,发现该方法有助于提高宏观常识通过率,这是当前使用大模型进行旅行规划的主要瓶颈。进一步分析发现,提示显著提高了所谓的“合理城市路线”的通过率(未在Table 2中显示,但这是TravelPlanner测试的一个约束)。这种常识是为了确保“旅行期间城市的变化必须是合理的”。这是大模型在过程中可以自己检测到的常识约束之一,有时但不经常包含在反馈循环中提供的想法里。RePrompt捕获并包含了这一约束在提示中,因此大多数迭代都将涵盖它。研究者们认为这是算法解决Travelplanner论文中提到的“代理努力使他们的行动与他们的推理一致”的挑战的一个例子。

令人惊讶的是,发现该方法并不能阻止“代理因信息混淆而产生幻觉答案”,代理仍然输出错误的航班号,用于错误的航班航段,并为出发和到达航班输出相同的航班号。虽然这理论上可以通过反馈提供者来解决,但似乎这种反馈从未在循环中提供和解决,RePrompt训练循环也无法捕捉到这种错误。研究者们期待进一步研究RePrompt框架如何作为简单幻觉错误的进一步检查级别。其中一个可能性是在尝试计算“损失”时,将场景特定信息与聊天历史结合起来。

RePrompt方法展示了其在PDDL生成和旅行规划任务中的有效性。尽管如此,该方法仍存在局限性:首先,优化后的提示可能受限于训练数据,影响大模型的泛化能力。其次,RePrompt依赖于大模型代理可用的全面工具,有时可能提出实际设置中不可用的工具。此外,反馈生成器可能产生无用或误导性的结果,这些结果如果被错误地纳入提示,将不利于性能提升。最后,RePrompt在提示阶段进行规划,对于需要完全不同程序的广泛领域可能不适用。未来工作将探索如何使RePrompt更加健壮,以及如何将其应用于更广泛的任务和领域。

论文链接:https://arxiv.org/pdf/2406.11132

猜你喜欢

转载自blog.csdn.net/weixin_44292902/article/details/143503736