PromptAgent:基于LLM进行策略规划,实现专家级别的提示优化

PromptAgent:基于LLM进行策略规划,实现专家级别的提示优化

加州大学的团队提出了一个名为PromptAgent的框架,它能够自动优化Prompt。该框架结合了大模型的自我反思特点与蒙特卡洛树搜索规划算法,通过自动迭代检查Prompt并对其进行改进的方式,寻找通往最优Prompt的路径。
针对开源的LLM,有论文指出可以利用其内部状态或梯度来训练附加参数,比如Soft prompt、基于梯度搜索或者RL的方式来得到离散提示,但是这些方法对于已经封装好的闭源模型(ChatGPT3.5-turbo、GPT4)不可用,而无梯度Prompt优化的方法基本上采用的是基于Prompt采样的迭代过程,即从初始提示开始,对候选Prompt进行迭代采样并对它们进行评分,然后选择下一次迭代的最佳提示。这些方法强调多样化的提示候选,包括基于编辑的方法(删除或者交换短语、回译等)、基于对采样进行优化的方法(蒙特卡洛搜索、吉布斯抽样、束搜索等)而PromptAgent跟上面说的方法都不太相同,这种方法能够将初始Prompt从平平无奇变为媲美人类专家手工设计的Prompt。

论文标题:PROMPTAGENT: STRATEGIC PLANNING WITH LANGUAGE MODELS ENABLES EXPERT-LEVEL PROMPT OPTIMIZATION

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

先通过文章给出的示例感受一下普通用户的Prompt、基于抽样方法的Prompt和专家级Prompt之间存在的差别。

让我们以生物医学领域的命名实体识别任务为例,这个任务需要从句子中提取疾病等实体。
普通与专家
示例中普通用户的Prompt设置为:

从句子中提取疾病或状况(如果有)

上面这种简单粗暴的普通用户编写的Prompt可能能够完成部分简单任务,但是其效果并不好。
而基于抽样方法的专家级Prompt提供了更丰富的特定领域详细信息和结构化指导,其中包括任务描述、领域知识、解决方案指导、异常处理与输出格式。
而PromptAgent可以通过该Prompt所获得的结果指出错误,并不断优化Prompt,最后得到的Prompt如下:

您的任务是提取疾病或病症……避免纳入任何相关元素,例如遗传模式(如常染色体显性遗传)、基因或基因位点(如 PAH)、蛋白质或生物途径…
考虑特定疾病和更广泛的类别,并记住疾病和病症也可以作为常见的缩写或变体出现。按以下格式提供已识别的疾病或病症:{entity_1,entity_2,....} …
请注意,术语“locus”应被视为基因组位置,而不是疾病名称。

PromptAgent
上图描述了PromptAgent框架中的NCBI最高平均奖励路径的MCTS状态-动作转换轨迹。初始状态为 s 0 s_0 s0,并配备有人工编写的提示。在每个状态转换步骤中,根据错误反馈调整先前的状态来制作新的提示。通过突出显示颜色来表明类似特定领域的见解。最后一个状态整合了整个轨迹的信息,将 F 1 F1 F1分数从0.521提高到0.645。

具体方法

PromptAgent 将提示优化问题表示为由元组 ( S , A , T , r ) (S, A, T, r) (S,A,T,r)组成的马尔可夫决策过程 (MDP)。这里, S S S表示状态空间, A A A是动作空间, T T T定义转移函数T : S × A → S S × A→S S×AS,r是奖励函数r : S × A → R S × A → \mathbb{R} S×AR
如下图(a)所示,对于任何给定的当前状态 s t s_t st,PromptAgent 基于 a t ∼ p O ( a ∣ s t , m 1 ) a_t ∼ p_O (a|s_t, m_1) atpO(ast,m1) 迭代生成一个动作 a t a_t at,其中 m 1 m_1 m1 是优化器 L L M O LLM O LLMO 用来促进动作生成的元提示。具体来说,下图 (b) 显示了动作生成的两步过程:从训练样本中收集基础模型的错误(步骤 1)并反映这些错误以得出有用的错误反馈(步骤 2)。之后,PromptAgent 根据转换函数 p O ( s t + 1 ∣ s t , a t , m 2 ) pO (s_{t+1}|s_t, a_t, m_2) pO(st+1st,at,m2) 获得新状态,其中 m 2 m_2 m2 是另一个帮助状态转换更新提示的元提示,也在 O O O 上操作。更具体地说,给定当前错误反馈作为动作, m 2 m_2 m2 要求优化器生成新的提示(状态),以利用任何领域知识并有效解决模型错误,类似于提示专家根据错误反馈修改提示的方式。最后,应用动作 a t a_t at 后每个新生成的状态 s t s_t st 的质量由奖励函数 r t = r ( s t , a t ) rt = r(s_t, a_t) rt=r(st,at) 确定。与强化学习(RL)中奖励工程的复杂性相似,奖励的设计可能很复杂,以适应特定领域的知识或为感兴趣的任务指定的偏好。在不失去本框架在各种任务中的通用性的情况下,文章直接将奖励定义为与给定训练样本分开的保留集上的任务表现。然而,奖励的确切定义将取决于特定于任务的指标。

PromptAgent框架设计

PromptAgent的目标是将专家级的先验知识有效地整合到任务提示中,同时确保在广阔的Prompt空间中进行高效和策略性的搜索。所谓专家知识通过大模型如GPT-4生成,而其搜索策略使用的是著名的蒙特卡洛树搜索。整体框架如下图所示:
框架设计
本文将任务Prompt定义为状态 s t s_t st,而对Prompt的修改过程定义为执行动作 a t a_t at。如上图(b)所示:

  1. 给定当前状态 s t s_t st(也就是初始Prompt),基础模型(gpt-3.5-turbo)从任务数据集获得初始输出,初始输出往往不如人意,需要进一步优化。
  2. 使用优化器模型(gpt-4)提供错误反馈并给出改进建议。
  3. 优化后的模型根据反馈更新Prompt并过渡到下一个状态 s t + 1 s_{t+1} st+1

如此循环往复,最终导向专家级Prompt。

上述对prompt优化的过程可以无缝地将PromptAgent与主要的规划算法特别是蒙特卡洛树搜索(MCTS)相结合。从而产生最具普适性的专家级Prompt。

策略优化过程

蒙特卡洛树搜索(MCTS)通过逐步构建树状结构来实现策略搜索,如上图(a)所示,其中每个节点表示一个状态,每条边表示状态转移的动作。MCTS执行选择、扩展、模拟和反向传播四步走来迭代搜索。迭代过程在达到预定义的迭代次数后结束,选择最高回报的路径作为最终的Prompt。
图1

  1. 选择:在每层选择最promising节点进行进一步的扩展和探索。在每次迭代中,它从根节点开始,遍历每树的每一层,选择每层的后续子节点,并在叶节点处停止。在选择每层的子节点时,利用了上界置信树算法(UCT),帮助在"选择最有希望的路径"和"探索新路径"之间找到一个好的平衡。具体如下所示:
    公式1
    其中 Q ( s t , a t ′ ) Q(s_t,a^{'}_{t}) Q(st,at)表示在状态 s t s_t st执行动作 a t ′ a^{'}_{t} at时的有可能获得的回报, A ( s t ) A(s_t) A(st)表示节点的动作集合, N ( s t ) \textit{N}(s_t) N(st)表示节点 s t s_t st的访问次数, c h ( s t , a t ′ ) ch(s_t,a^{'}_{t}) ch(st,at)表示在应用动作 a t ′ a^{'}_{t} at到节点 s t s_t st后得到的子节点,是一个用于调整探索的常数。

公式中第一项用于衡量路径的价值,而第二项衡量被访问节点的不确定性。换句话说,如果一个节点被探索得较少且其子节点也较少被访问过,那么第二项的值会较高。

  1. 扩展:在前一步选择到达的叶节点下面添加新的子节点来扩展树结构。通过多次应用动作生成和状态转换(上图(b))来完成的,从而产生多个新的动作和状态。需要注意的是,本文采样了多个训练批次得到多样化的错误反馈(动作)。在新的节点中,选择最高回报的节点作为下一个模拟步骤的输入。
  2. 模拟:模拟扩展阶段所选节点的未来轨迹,并计算如果选择该路径可能得到的回报。模拟策略的选择很灵活,比如选择随机移动直到达到终止状态。为了减少模拟的计算成本并简化过程,本文选择不断生成多个动作,并选择其中回报最高的节点,以快速进入下一个树级别。
  3. 反向传播:在模拟过程中遇到终止状态时,将进行反向传播。终止状态由预设的最大深度或提前停止条件决定。此时,通过更新Q值函数,沿着从根节点到终止节点的路径反向传播计算未来的回报。对于次条路径中的每个状态-动作对,聚合从状态 s t s_t st开始的所有未来轨迹的回报来更新 Q ( s t , a t ) Q(s_t,a_t) Q(st,at),更新方式如下:
    公式2
    这里 M M M表示从状态 s t s_t st开始的未来轨迹的数量, S s t j S^{j}_{s_t} Sstj A a t j A^{j}_{a_t} Aatj分别表示从状态 s t s_t st和动作 a t a_t at开始的第 j j j个状态序列和动作序列。

PromptAgent使用预设的迭代次数执行上述四个操作,当达到迭代次数后,选择具有最高回报的最佳路径中的最佳节点(即Prompt)进行最终评估。

实验

实验设置

为了全面评估PromptAgent对各种应用的影响,作者从三个不同领域精选了12个任务进行深入实验:

  • 6个BIG-Bench Hard (BBH)任务,强调领域知识(如几何形状和因果判断)和复杂推理能力(如桌上的企鹅、物体计数、认识论推理和时间序列)。
  • 3个生物医学领域特定任务:疾病命名实体识别(NER)、生物医学句子相似性任务(Biosses)和医学问答任务(Med QA)。
  • 3个著名的自然语言理解任务,包括两个文本分类任务(TREC和Subj)和一个自然语言推理任务(CB)。

实验结果与分析

整体效果

下表中显示PromptAgent在BBH任务上明显优于所有基线。相对人类Prompt(ZS)、CoT和APE方法分别提升了28.9%、9.5%和11.2%。
表1

对于需要广泛的领域知识和深厚的LLM Prompt工程经验的生物领域任务,人类Prompt和CoTPrompt效果不佳。而APE通过自动Prompt抽样和优化融入了一些领域知识,减少了人工干预,效果有所提升。但是,PromptAgent相对于APE平均提高了7.3%,这表明PromptAgent可以更好地引导有效的领域知识,产生专家级Prompt,并弥合新手和专家Prompt工程师之间的知识差距。

而对于通用的NLU任务,PromptAgent的能力和通用性也完胜所有的基线。
表2

Prompt泛化性

作者还对经过PromptAgent优化后的Prompt能否推广到其他基础LLM模型上展开评估。由于较低级别和较小规模的LLM模型(如GPT-2或LLaMA)可能无法熟练掌握这些专家级Prompt的微妙之处,会导致显著的性能下降。本次评估选取了一个性能更强大(GPT-4)和一个比GPT-3.5性能更弱的模型(PaLM 2)。结果显示PromptAgent具有巨大的潜力:

  • 当使用更强大的GPT-4时,优化后的专家Prompt几乎在所有任务(11/12)中都取得了进一步改进。
  • 将专家Prompt转移到PaLM 2时,性能可能不如更强大的模型,但仍然可以在某些任务(如Penguins)中获得提升。

表3

消融实验

本文还对比了多种搜索策略的效果,包括每次随机抽样并选择一个动作的单次蒙特卡洛(MC)搜索、始终选择多个样本中的最佳样本的贪婪深度优先搜索(Greedy)和在每个层级保留多个有用路径的束搜索(Beam search)。下表显示:

  • 贪婪搜索(Greedy)和束搜索(Beam)都极大地改进了MC基线,表明结构化的迭代探索是必要的。
  • Beam和Greedy严格按照前进的方向操作,没有在Prompt空间中进行策略性搜索,缺乏预见未来结果和回溯过去决策的能力。相比之下,MCTS的策略规划允许PromptAgent更有效地遍历复杂的专家Prompt空间,在所有任务上明显优于所有搜索变体。
    表4

搜索效率分析

除了卓越的性能外,PromptAgent的一个关键优势是通过策略规划能够高效地搜索。搜索效率是通过搜索过程中Prompt数量来衡量的,即在搜索过程中生成的节点数。下图中绘制了搜索效率与任务性能的关系,可以看到,PromptAgent的数据点聚集在左上角,表明在更高的准确性下,搜索的节点数也较少。
表5

结论

本文介绍了PromptAgent,一种新颖的Prompt优化框架,结合LLMs的自我反思能力将任务的领域特定知识纳入到新生成的Prompt中,并使用MCTS规划的能力高效遍历复杂的Prompt空间找到专家级Prompt,PromptAgent优化后Prompt也始终表现出专家级的特征,丰富了领域特定的细节和指导。

在未来势必会出现越来越强大的大语言模型,能理解并支持的复杂指令越来越多,仅依赖人工专家Prompt是远远不够的,自动构建专家级Prompt将是一个非常有潜力的方向。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于LLM(Language Model)的测试效率提升主要体现在以下几个方面: 1. 自动化测试:LLM的出现使得测试工程师能够利用自然语言的特点,快速生成测试用例和测试脚本。相比传统的手动编写测试用例,LLM能够极大地减少测试人员的工作量和时间成本,提高了测试效率。 2. 敏捷开发:LLM能够快速学习和适应不同的测试场景和需求,根据不同的自然语言输入生成相应的测试用例和脚本。这种灵活性使得测试人员能够更加快速地响应项目变更,及时执行测试,提高了敏捷开发的效率。 3. 覆盖率提升:LLM可以根据自然语言输入,自动生成全面且具有一定逻辑性的测试用例。相比人工编写测试用例,LLM能够更好地覆盖不同功能模块的边界条件和异常情况,从而提高测试的覆盖率。 4. 功能验证加速:LLM通过自动生成测试用例和脚本,可以快速验证新功能的正确性和稳定性。测试人员只需输入相应的功能描述,LLM会自动生成相应的测试用例,从而加快了功能验证的速度。 5. 测试回归:LLM可以根据自然语言输入,快速生成全面的测试脚本,以及对应的测试数据和预期结果。这种自动化回归测试能够提高测试的复用性和可维护性,降低了回归测试的工作量,提高了回归测试的效率。 综上所述,基于LLM的测试效率提升主要体现在自动化测试、敏捷开发、覆盖率提升、功能验证加速和测试回归等方面。LLM的应用能够帮助测试人员更快速、全面地进行测试工作,提高测试效率,降低测试成本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值