暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PROMST 提示词优化框架,快速解决多步骤任务三大挑战

579

今天分享的是由MIT发布的一篇论文:

PRompt Optimization in Multi-Step Tasks (PROMST): Integrating Human Feedback and Heuristic-based Sampling

PROMST:基于人类反馈和启发式采样的多步骤任务提示词优化框架

文章链接:https://arxiv.org/pdf/2402.08702

代码链接:https://github.com/yongchao98/PROMST

项目主页:https://yongchao98.github.io/MIT-REALM-PROMST/

论文摘要

这篇文章提出了一种针对大语言模型的多步骤任务优化prompt的新框架,名为PROMST。该框架旨在解决多步骤任务中提示词优化的挑战,这些挑战包括提示内容的复杂性增加单个步骤效果评估困难以及不同用户对任务执行偏好的差异

PROMST通过结合人类设计的反馈规则自动提供改进建议,并利用一个额外的学习启发式模型来预测提示的效果,从而高效地从候选提示中进行采样。这种方法在11个多步骤任务上显著优于人工设计的提示和其他提示优化方法,在五种不同的LLM上平均提高了10.6%到29.3%的性能。

主要方法

LLM Based Agents for Multi-Step

首先,我们来了解下什么是多步任务。多步任务是指那些需要一系列连续动作或决策才能完成的任务。在涉及LLM的应用场景中,这类任务通常要求模型能够理解任务的目标,并逐步规划和执行一系列操作以达成最终目的。这些任务可能包括但不限于与软件或网站交互、规划机器人行动、或者调用外部工具来辅助完成特定目标。

例如,在使用LLM与软件或网站交互时,多步任务可能涉及登录账户、搜索信息、填写表单并提交等步骤。对于机器人行动规划,多步任务可能是让机器人移动到某个位置、拿起物品、将物品放置在另一个位置等。在使用外部工具的Agent场景下,多步任务则可能涉及检索信息、分析结果、执行特定操作等步骤。

传统的解决方法是设计详细的提示词,其中包含了所有必要的约束条件和步骤,以便引导LLM完成任务。然而,这种手动设计的提示往往冗长且难以维护。相比之下,本文介绍的方法通过使用提示优化技术,从简单的初始提示开始,逐步迭代改进,最终过渡到一个高性能的提示。这种方法减少了人为设计提示词的工作量,并允许LLM根据任务需求自动调整其行为,以更高效地完成多步任务。

PROMST框架

PROMST框架的结构如下图所示。

  • LLM组件

    • TaskLLM:执行任务的当前候选提示词。

    • PromptLLM:根据当前提示在任务上的表现生成新的候选提示词。

  • 单次执行:将一个任务测试案例中的单次执行称为一次“trial”。

TaskLLM:在每个试验(trial)中,TaskLLM会通过多轮与环境的交互来执行任务。每轮中,TaskLLM都会收到当前候选提示词及当前试验的执行历史,并据此生成下一步行动。任务执行会在检测到错误或任务完成时终止。

评分函数:候选提示词P会根据人类设计的评分函数获得一个分数。每个候选提示词会在多个试验中被评估,这些试验中环境的初始状态(如对象数量、代理数量等)会有变化。所有试验的平均分数构成了最终的平均得分。

基于评分函数的评分模型:为了减轻每一代候选提示的评估成本,学习一个得分预测模型作为启发式方法来选择一部分生成的候选提示进行实际评估。在早期迭代中在线收集提示-得分对,并且从第s代开始应用得分预测模型,其中s是一个超参数。随着每一代新收集的提示-得分对,不断地更新得分预测模型。模型使用双向Longformer-base模型(148M参数),该模型能够处理长序列数据,并且可以很好地捕捉上下文信息。为了减少方差,使用五轮随机4:1的训练/测试划分来微调五个模型。使用五个得分预测模型对候选提示词p'
进行预测。如果满足以下条件,则选择p'
:

其中:

  • 是五个模型对p'
    预测得分的均值
  • 是五个模型对p'
    预测得分的方差
  • 是五个得分模型的平均测试误差
  • 是现有提示的最高得分

人工规定的反馈规则:TaskLLM在执行任务的过程中可能会遇到错误并导致任务终止。为了避免这种情况发生,PromptLLM需要有关于这些错误的信息,以便在生成新的提示词候选时考虑这些信息。然而,对于多步骤的任务来说,通过语言模型自动分析错误是很困难的,特别是当Agent陷入动作循环等复杂情况时。

因此,文中提出了一种解决方案,即使用人为设计的规则来自动合成反馈信息。这些规则可以根据不同的错误类型生成相应的反馈,从而指导PromptLLM生成更好的提示候选。这些规则的设计过程相对简单直观,不需要复杂的试错过程。

具体来说:

  1. 自动反馈规则:由于语言模型难以自动分析多步骤任务中的错误,系统采用了人为设计的规则来生成反馈。这些规则可以根据发生的错误类型自动合成反馈信息。
  2. 通用与特定反馈:反馈规则可以分为两类:一类是适用于所有任务的通用错误类型(例如语法错误),另一类则是针对特定任务的特定错误类型。
  3. 设计过程:设计这些反馈模板的过程相对简单直接,不需要大量的尝试和错误修正。
    简而言之,当TaskLLM遇到错误时,系统使用预先定义的人为设计的规则来生成反馈信息,这些信息可以帮助PromptLLM更好地理解问题所在,并生成更有效的提示来解决这些问题。这种方法避免了通过复杂的自动分析来识别错误,而是依赖于简单的规则来提供有用的反馈。下图为人工设定的8个反馈规则的例子(机器人行动的例子)。
  1. Syntactic Error:提示描述的语法错误。如果提示的格式不正确,那么就会给出这样的反馈。

  2. Stuck in the Loop:提示可能导致LLM陷入循环。这里提供了前两轮的状态和动作,以及环境的反馈,然后指出LLM似乎陷入了重复回答相同答案的情况,任务也卡住了。

  3. Collision:响应中的动作会导致碰撞。

  4. Move Out of the Grid:响应中的动作会导致移动超出网格范围。

  5. Wrong Picking Up Order:响应中的动作顺序不对,应按照goal_0、goal_1、goal_2等的顺序拾取物品。

  6. Failure Over Query Time Limit:任务未在规定时间内完成。

  7. Invalid Action:响应中的动作无效。

  8. Wrong Object Action:响应中的动作试图引用不存在或不明确的车辆(卡车、飞机)。

这些反馈规则旨在帮助PromptLLM了解其生成的提示存在的问题,以便在后续的迭代中生成更准确、更有效的提示。
PromptLLM:一旦所有候选提示词都被评估并获得了自动反馈,表现最佳的提示会被选作“父代”来生成下一代候选提示。PromptLLM会利用每个父代提示词及其反馈来生成新的候选提示词。

具体的再生成流程如下,首先,使用一个语言模型(SumLLM)来总结反馈。为了鼓励探索更多样化的候选提示,随机选择10个反馈实例。这种随机选择也可能促进更频繁的错误出现。给定这些选定的反馈,SumLLM会产生一个总结,这个总结将作为背景信息提供给下一个步骤的GenLLM。第二步是使用另一个语言模型(GenLLM)来生成新的候选提示。GenLLM会使用SumLLM产生的总结作为背景信息来生成新的候选提示。

实验

实验设置

如下图所示,论文共测试了11个场景的任务。这些任务需要很强的逻辑、几何、科学和常识推理能力。每个任务都要求LLM代理在较大的离散操作空间中确定下一个操作。

为了确保公平比较不同方法的效果,作者采用以下这些设置:

1. 初始状态
所有方法都从相同的初始人类设计的提示词开始优化。
2. 温度参数设置
对于所有基于语言模型的方法,采样温度(sampling temperature)被设置为0。即成过程中,模型会选择具有最高概率的下一个词,而不是随机选择。
3. 评分函数
文章使用这个等式来计算任务进度得分(task progress score)的,具体定义如下:

其中 表示成功完成的子目标或子步骤的数量。 表示所有子目标或子步骤的总数。在附录中又提到了两种得分函数的变体用于计算用户关心的某些指标。。其中,是修改后的评分,是原始评分,是用户关心的因素值(如步骤数量或碰撞错误数量)。通过调整超参数ratio,可以显著改变修改后的评分函数与原始评分函数之间的关系。而且它们的趋势与原始评分函数相似。
4. 其他考量
除了上述的进度分数之外,还可以使用任务完成分数作为另一种衡量标准,但在某些情况下,这种分数可能较为稀疏(即,完成的情况较少)。两种类型的分数(进度分数与完成分数)通常是正相关的。
5. 模型设置
  • GPT3.5作为TaskLLM+GPT4作为PromptLLM
  • TaskLLM 和 PromptLLM 均使用GPT-4
  • TaskLLM 和 PromptLLM 均使用Claude 3 Opus (Anthropic, 2024)
  • TaskLLM 和 PromptLLM 均使用Mixtral-8x7B (Jiang et al., 2024)
  • TaskLLM 和 PromptLLM 均使用Mixtral-Large (Jiang et al., 2024)
6. Context窗口限制

使用一个状态-动作-反馈元组的历史记录的滑动窗口。历史记录超过窗口长度时,会裁剪掉较旧的部分。

7. 超参数
为了确保公平比较,所有方法中的超参数都被标准化,这意味着每种方法都有机会探索相同数量的提示候选词保持一致的水平。在第一级中,基于每个父提示词的子提示的数量被设置为20。对于所有后续级别,数量减少到8。
在每一级中,选择前5个(即k
=5)当前提示作为父提示词行进一步的优化。如果最近三个级别的优化过程中没有观察到评分的提高,则搜索过程终止。在PROMST方法中,超参数hyper_M
被设置为0.8),用于过滤掉得分较低的提示。
这些设置确保了实验在相同的条件下运行,使得不同模型之间的比较更加公正,并且通过调整扩展数量和顶级选择等超参数,可以有效地控制提示生成和优化的过程。同时,通过设置明确的终止条件,可以避免不必要的计算资源浪费,并确保实验效率。

实验结果分析

实验结果如下图所示:

  1. PROMST 性能表现最佳: 在大多数任务中,PROMST 的表现超过了最强的基线方法,例如使用 GPT-3.5-0613 和 GPT-4 作为 PromptLLM 时,PROMST 分别取得了 0.27 和 0.61 的分数,而最强基线分别得到了 0.32 和 0.69 的分数。
  2. 不同 LLM 生成编写的提示词 即使当使用 GPT-3.5-0613 和 GPT-4 训练的最佳提示词到不同的 TaskLLM 上时,这些提示的表现仍然超过人工编写的提示。这意味着自动优化的提示即使不是针对特定的 TaskLLM 优化,也能够展现出比人工编写更好的性能。
  3. LLM 与提示词之间的匹配性: 每个 LLM 在使用针对其自身优化的提示时表现最好。例如,使用 GPT-3.5-0613 优化的提示词用于 GPT-4 时并不能带来进一步的性能提升,反之亦然。这说明了不同 LLM 之间存在一定的差异性,它们对特定类型的提示可能有不同的响应。
  4. PROMST 不依赖于更强的 PromptLLM: 当 TaskLLM 和 PromptLLM 是同一个 LLM 时,PROMST 依然表现出色。这表明 PROMST 并不依靠更强的 PromptLLM 来向提示中传递额外的知识。这一点很重要,因为它避免了所谓的“作弊”行为——即利用更强的模型来生成提示,然后在较弱的模型上测试这些提示。
综合来看,PROMST 方法在多种不同的 LLM 上均能取得优秀的性能,而且它能够在不依赖更强 PromptLLM 的情况下工作,这使其成为一个非常实用和可靠的提示优化技术。此外,实验还揭示了不同 LLM 之间存在着一定的兼容性和特异性,这对于未来研究如何更好地优化和适应不同 LLM 提供了重要的指导方向。

总结

本文提出了一个自动的提示词优化框架,并给出了详细的实验。在文章的附录中列举了大量生成的提示词和最初提示词的对比以及使用到的提示词、评分函数的分析。但作者也提到这篇工作的一些限制,总结如下:

  1. 资源密集型:自动提示优化过程需要大量的计算资源和 LLM API 调用来探索和评估不同的提示候选。由于这是一个基于搜索的过程,即使是经过优化的方法(如引入评分模型),也需要大约 100 个提示候选的探索,这对计算资源来说是一个很大的负担。

  2. 对硬件的要求:为了减少API的调用,本地训练了评分模型。但评分模型的训练增加了本地设备的计算负载,这意味着用户需要有足够的硬件能力来支持这一过程。

  3. 适应性问题:为了有效训练评分模型,通常需要大约 100 对提示-得分的数据点。这对于黑盒提示搜索来说是合理的,因为确实需要这么多的数据点来确保模型的性能。然而,如果将来出现更高效的搜索方法,使得所需的样本数量大大减少,那么现有的评分模型可能就不再适用了。

编者简介

李剑楠:华东师范大学硕士研究生,研究方向为向量检索。作为核心研发工程师参与向量数据库、RAG等产品的研发。代表公司参加DTCC、WAIM等会议进行主题分享。
👆 关注 AI 搜索引擎,获取更多专业技术分享
~

文章转载自向量检索实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论