微信扫码
与创始人交个朋友
我要投稿
发布时间:2024 年 06 月 16 日
提示工程
RePrompt: Planning by Automatic Prompt Engineering for Large Language Models Agents
过去一年,大型语言模型(LLMs)在非传统自然语言处理领域取得了显著成就,人们开始探索其在代码生成、旅行规划和机器人控制等更贴近实际应用的领域中的应用。结合 LLMs 的强大能力与外部工具,人们正在开发 LLM 代理,旨在辅助日常生活中的各种工作。在这些领域,对 LLMs 的提示显著影响其生成内容及代理性能,因此自动提示工程成为研究者和用户关注的焦点。本文提出了一种名为 RePrompt 的新方法,通过分析与 LLM 代理的交互历史,对提示中的指令进行逐步优化,类似于“梯度下降”。优化后的提示使 LLM 能在特定领域内更好地规划。我们的实验证明,使用更新后的提示作为起点,RePrompt 能有效提升不同推理任务的性能。
https://arxiv.org/abs/2406.11132
大语言模型问世后,在多项任务上取得成功,并且通过LLM智能体的研发,拓展了大语言模型在自动驾驶、机器人控制等更广泛领域的应用。
但是这些应用的成功,都得益于提示工程的作用。不同的提示词可以显著影响任务的成功率,所以有人提出了APE(自动提示工程),可以使得大语言模型自动撰写提示词,相比简单提示词,找到更快找到更好的提示词。
但是APE在收敛到高质量提示词需要时间和计算资源,且当前应用框架存在局限,难以超越精心编写的提示。LLMs在理解不同提示对自身的影响上,并不比人类更胜一筹。无法学习新发现的范式,而人类在尝试如GPT-4或LLAMA-2等流行模型时,能不断获得编写优质提示的新思路。LLMs在面对潜在失败时,往往无法识别正确解决方案,仅对提示进行微小调整,而未能实现真正的改进。
所以作者提出了一种新的自动提示词优化方法:RePrompt,结合了CoT(思维链)和 ReAct的实践,并利用这些结果的对话历史更新提示词,通过总结并逐句优化对话历史。RePrompt聚焦于使用LLM进行特定推理任务的场景,比如旅行规划、辅助编程等。
RePrompt是一种基于交互式动作生成的提示优化工具,与传统的机器学习训练过程相似,但训练对象是输入模型的提示词,而非模型参数本身。
本文致力于通过优化提示来完善LLM代理的规划能力。我们着眼于任务已知的LLM代理问题,以OpenAI的多样GPT模型为例。我们提出的RePrompt方法,是一种基于交互式动作生成的提示优化工具,
RePrompt训练需要一个小规模的推理任务数据集,首先让LLM使用当前的提示生成回答。这个过程可能包括与反馈提供者如ReAct或Reflexion的交互,但不对交互方式或反馈的准确性设限,也称之为行为循环。
收集到一批聊天历史后,将这些历史数据输入LLM模型中,以提炼出最关键的焦点。这些焦点可能是频繁出现并导致长迭代的问题,或者是有助于生成更好回答的特定建议(比如ReAct里的thought)。
要求总结团队对不同情景进行提炼,去除特定情景信息和建议,同时避免过度总结,以免需要额外推理能力或在LLM对任务不够擅长时引入错误。
与先前的自动提示工程工作相比,如APE和ProTeGi,通过批量总结来防止提示优化过程过度拟合到单一异常数据点上。
利用总结的典型错误,使用另一个LLM来更新实际提示,并要求优化器LLM在提出潜在解决方案时遵循以下规则:
• 改进应集中于通用提示部分,而非随着数据变化的情景特定提示。
• 改进应优先识别特定问题是否出现在给定情景中。例如,如果存在预算限制,而历史记录显示这可能是导致解决方案失败的主要问题,那么在提供解决方案时,应尝试使用工具计算典型计划的成本。如果违反了预算约束,应优先考虑预算约束;否则,应忽略这个问题。
根据上面提到的原则,RePrompt的具体实现步骤如下:
• 1.针对问题提出几种可能的解决方案。
• 2.逐一分析这些方案,找出最符合规则的那一个。
• 3.挑选出最佳方案。与APE及后续一些研究不同,不要求LLM给出句子的具体数值评估。
• 4.剖析原提示中的原始步骤,判断所选方案是否应前置于当前步骤,或该方案是否为步骤的具体细节,需要用方案替换当前步骤的提示。如果属于步骤,在此添加提示。
• 5.输出融合了原始提示和更新提示的最终版本。
上图是RePrompt算法的伪代码实现。
完成这些步骤后,将获得一个经过更新的提示,并可以继续迭代,类似于机器学习模型训练的更多轮次,直至提示收敛。这个收敛后的提示词有助于提升首轮生成结果的质量。
在测试阶段,只需应用这个经过收敛的更新提示,并在新的测试集上进行测试。测试时,不必要求与生成响应完全相同的流程,例如,如果反馈生成成本高昂,可以完全从行为环节中移除。
请注意,在优化过程中,RePrompt仅调整分步指导环节,而非问题描述或格式要求的其他部分。这将导致算法最终可能形成两种提示格式:
• 如果当前提示类似ReAct风格,已包含分步指导,例如ReAct中的思考步骤,用以囊括所有潜在分析,我们的提示将通过不断添加提示来更新这一思考步骤。与动态引入提示的其他提示工程相比,RePrompt 成为一个提供更具体分析焦点的算法。
• 如果提示是分步的,如解决数学或逻辑问题,RePrompt 很可能向计划生成的程序中增加更多步骤。这将为规划过程提供更明确的尝试和关注方向,引导LLM得出正确答案,并充当将高级任务细化的规划者。
尽管ICL(语境学习)对推理效果影响很大,但是如果每一步都更新示例会存在一些困难,所以RePrompt没有对提示词中的示例进行修改。而且示例一般是对LLM的输出格式、相关能力的指导,而不是如何给出具体的分步提示,所以作者也没有发现不更新这些示例带来的任何实际问题。
上图提示词提取优化提示的损失值。
上图提示词用于在优化后的提示中定位并修正占位符。
RePrompt 并不一定每次都能成功创建更优质的提示。作者列举了常见的几类错误:
RePrompt 有时会生成不完整的提示词。如上图所示,LLMs可能仅输出一个需要用户自行复制粘贴补全的提示模板。这种情况通常发生在初始提示较长时,推测LLMs倾向于尽可能简短地响应,却未能遵循生成完整提示的指令。为解决这一问题,引入了一个额外的LLM来协助填充模板,并在附录中提供了该LLM的提示。这一额外步骤帮助我们在旅行规划领域成功生成了完整的提示。我们没有采用基于规则的自动修复工具,因为生成的提示模板可能包含多种符号,如 <> 或 {}。为了简化工作流程,我们让LLM自动识别并替换这些符号。
在某些情况下,特定领域的输出格式可能与常用格式相似,导致LLMs错误地更改提示的某些部分。例如,在PDDL领域,要求LLMs生成动作的前提条件,而非完整的PDDL文件。实验中,即便提示明确指示LLMs不得更改任何内容,尤其是输出格式,但更新后的提示有时会错误地改变输出格式,如将"Preconditions"的大写错误地更改为小写的"precondition"。为纠正这一问题,依赖语法检查器的反馈。尽管生成的结果可能存在错误,但它们应当在语法上正确且完整。如果语法分析器无法从LLMs的输出中找到"Precondition"一词,即表明使用的提示有误,会重新运行REPROMPT来生成正确的提示。鉴于当前代码的失败率不到10%,这一临时方案已足够应对。
• 首先,优化提示的过程与微调类似,意味着提示词的质量受限于训练数据,可能会影响LLMs的泛化能力。换言之,如果训练数据中出现的特异性仅存在于特定场景而不具备普遍性,优化后的提示可能反而不如原始版本高效。
• 其次,提示有效性依赖于LLM代理能够使用的全面工具集。由于优化策略直接源自LLMs,而非通过搜索算法得出,REPROMPT可能会提议使用一些在实际环境中并不可用的统计工具。考虑将LLM自行编码那些额外的、常用但当前不可用的工具,作为未来研究的方向。
• 再者,无法控制的反馈生成器有时可能产生无效甚至错误和误导的反馈。鉴于REPROMPT基于反馈进行总结,如果反馈经常出现错误,REPROMPT会将这些错误纳入提示中。由于本文未考虑从提示中移除无效步骤,这样的错误将徒增使用的标记数量,却无助于提升结果质量。未来的研究可以考虑引入基于搜索的机制来识别并修复这类错误,但这可能需要更多来自环境的真实反馈,并可能限制其在特定领域的应用。
• 最后,RePrompt 在提示阶段就进行规划,这可能不适用于需要完全不同处理流程的广泛领域,例如解决数学问题的LLM代理。然而,对于特定任务,如利用LLM代理解决高中几何问题,我们的方法能够高效地学习规划,实验结果已经证明了这一点。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-08-13
2024-08-21
2024-07-09
2024-08-04
2024-06-13
2024-04-11
2024-07-18
2024-07-01