PROMST:首个针对多步骤复杂任务的自动化提示优化框架
PROMST:首个针对多步骤复杂任务的自动化提示优化框架
在人工智能领域,Chain-of-Thought (CoT) 提示已成为提升语言模型推理能力的重要方法。然而,对于复杂的多步骤任务,如何有效优化这种有多步骤复杂任务的CoT类型的提示词仍是一个巨大挑战。近日,来自MIT、哈佛大学和IBM Watson AI实验室的研究者提出了PROMST (PRompt Optimization in Multi-Step Tasks),这是首个专门针对多步骤复杂任务的自动化提示优化框架。本文将深入解析PROMST的核心原理及其实验结果。
多步骤任务提示优化的困境
多步骤任务通常需要结构化的提示,包含任务描述、约束条件、执行步骤等多个组成部分。而且具体的指令可能限制模型的问题解决能力,而过于模糊的指令则可能导致模型行为不一致或偏离任务目标。因为需要同时考虑多个相互关联的元素,改变一个维度可能会影响其他多个维度,导致连锁反应,这种复杂结构使得结构化提示优化变得异常困难。
在多步骤任务中,前一步的错误可能会导致后续步骤的失败,形成错误累积效应。这使得仅基于最终结果的优化方法难以定位和解决问题的根源。在论文中示例的机器人路径规划中,一个稍微偏离最优路径的决策可能导致后续所有步骤都不够理想,最终显著增加完成任务所需的总步数。
提示优化本质上是在一个庞大的搜索空间中寻找最优解。对于多步骤任务,这个搜索空间呈指数级增长,传统的优化方法往往难以应对。例如,如果每个步骤有5种不同的表述方式,一个10步骤的任务就有510种可能的提示组合,人工优化显得很不现实。
PROMST: 多步骤优化的新基准
PROMST采用了一种新颖的架构设计,如上图所示。它包括以下关键组件:
- 人工设计的初始提示
- TaskLLM: 执行多步骤任务的语言模型
- PromptLLM: 负责生成新的候选提示
- 人工设计的评分函数
- 人工设计的反馈规则
- 微调的评分预测模型
这种设计巧妙地结合了人工智能与人类专业知识,形成了一个闭环的优化系统。
PROMST采用了一种高效的策略性搜索算法MCTS,您也可以采用MDP或者Bayesian等高级算法,在庞大的提示空间中快速定位潜在的优质候选项。具体而言:
- 使用PromptLLM生成多个候选提示
- 应用微调的评分预测模型进行初筛
- 选择高分候选项进行实际评估
- 根据评估结果更新搜索策略
这种方法大大提高了搜索效率,使得在有限的计算资源下探索更广阔的提示空间成为可能。
PROMST引入了一种新颖的人机协作反馈机制:
- 人工设计的反馈规则自动捕获常见错误类型
- TaskLLM执行过程中的错误信息被归类和汇总
- PromptLLM根据汇总的错误信息生成改进建议
- 人类专家可以审核并调整反馈规则
这种机制不仅提高了优化效率,还保证了优化过程的可解释性和可控性。当然在实际操作中你也可以用代码自动化完成。
PROMST的核心原理
PROMST采用了一种动态评分函数,能够根据任务的不同阶段和特点自适应调整评分标准。例如,在任务初期可能更注重探索性,而在后期则更关注精确性。这种动态调整使得优化过程更加灵活和有效。
PROMST将常见错误类型进行了系统化分类,如语法错误、逻辑错误、步骤遗漏等。针对每种错误类型,都有专门的优化策略。这种定向优化方法能够更精准地解决特定问题,而不是盲目地进行全局修改。优化策略取决于你的初始Prompt,如果你的初始Prompt精心设计,有很好的表现,
PROMST借鉴了遗传算法的思想,将优质提示的"基因"进行重组和变异,生成新一代的候选提示。这种演化方法既保留了优秀提示的核心特征,又引入了适度的随机性,有利于跳出局部最优解。
PROMST的实验结果与分析
研究者在8个具有代表性的多步骤任务上评估了PROMST的性能,包括BoxNet、WareHouse、GridWorld等。如表1所示,PROMST在绝大多数任务上都取得了最佳成绩,平均性能提升幅度达到171%。
PROMST与其他先进的六种自动化提示优化方法(如APE、APO)进行了对比。结果显示,PROMST在各种任务和模型组合下都展现出了显著优势。特别是在使用GPT-3.5作为TaskLLM时,PROMST的优势更为明显,这说明该方法对于能力较弱的模型具有更好的提升效果。
研究者还专门分析了评分预测模型的作用。如图上图所示,使用评分预测模型后,优化过程收敛速度更快,最终性能也更高。这验证了PROMST中评分预测模型的重要性。
PROMST的使用指南
尽管PROMST能够自动优化提示,但一个好的初始提示仍然很重要。建议Prompt工程师在设计初始提示时:
- 清晰描述任务目标和约束条件
- 提供典型的错误示例和正确示例
- 考虑任务的关键步骤和潜在陷阱
有效的反馈规则是PROMST成功的关键。你可以根据Prompt让高级模型帮你生成,以下是一些设计技巧:
- 覆盖常见错误类型,如语法错误、逻辑错误、步骤遗漏等
- 使用明确的触发条件,避免模糊不清的规则
- 提供具体的改进建议,而不是笼统的评价
- 定期review和更新规则,适应新出现的错误模式
PROMST的优化过程可能比较耗时。如果在网页上优化需要你用两个模型交叉进行,一个充当PormptLLM生辰候选提示,另一个充当TaskLLM执行优化。这样很浪费时间,但也能得到不错的优化效果,特别是对于复杂任务。为了在有限资源下获得最佳效果,您可以考虑:
- 使用较小的模型进行初步优化,再用大模型微调
- 采用分阶段优化策略,先优化关键步骤,再细化次要部分
- 利用并行计算加速评估过程
网页版因为SYSTEM PROMPT的存在,优化效果有限,明显会逊色于代码环境下的效果。
我们还是优化上一篇写小说开头的那条Prompt为例:
代码环境是基于PROMST的核心设计的,用了两个国产模型。在此感谢群友刘先生推荐了跃阶星辰stepfun大模型,我用step-1-8k作为PromptLLM,Deepseek的大模型deepseek-chat作为TaskLLM,时间原因还没有进行交叉测试。
我发现优化过程中Prompt示例池中出现了一些不错的句子:
示例池:
- 提供一些与身份认同主题相关的经典开场示例,如《麦田守望者》中的"如果你真的想听我说,你可能会想知道我在哪里出生,我悲惨的童年是如何度过的,我父母在生我之前是做什么的,以及所有这些大卫·科波菲尔式的废话。"
- 提供一些与身份认同主题相关的对话开场示例,如《饥饿游戏》中的"我在黑暗中醒来,不记得自己是如何入睡的。"
- 提供一些与身份认同主题相关的行动开场示例,如《发条橙》中的"我叫亚历克斯,我有病。"
- 提供一些与身份认同主题相关的内心独白开场示例,如《了不起的盖茨比》中的"当我年轻而愚蠢的时候,我父亲给了我一些忠告,我至今仍然牢记在心。"
- 提供一些与身份认同主题相关的倒叙开场示例,如《百年孤独》中的"许多年后,当奥雷利亚诺上校站在行刑队面前时,他会回想起父亲带他去见识冰块的那个遥远的下午。"
--- 使用优化后提示生成的最终小说开头 ---
在那个被霓虹灯和全息广告淹没的夜晚,艾丽娅站在摩天大楼的阴影下,她的心跳与城市的脉搏同步。她的手指轻轻触碰着脸上的虚拟面具,那是一个她从未真正认同过的身份。艾丽娅,一个在数据流中迷失的灵魂,今晚,她决定撕下那层虚假的表皮,寻找真正的自己。
"你确定要这么做吗?" 一个声音从她的智能耳环中传来,那是她的AI助手,一个永远冷静、永远理性的存在。
艾丽娅深吸一口气,城市的喧嚣在她耳边渐渐模糊,她闭上眼睛,感受着内心的颤动。"是的,我确定。" 她的声音坚定而清晰,仿佛是在向整个世界宣告。
她迈出一步,踏入了那片由光和影编织的迷宫。每一步都像是在剥离一层层的伪装,直到她站在城市的中心,面对着那个巨大的全息屏幕,屏幕上正播放着她自己的虚拟形象,一个她从未真正认识的自己。
"我是谁?" 艾丽娅低语,她的声音在空旷的街道上回荡,像是在向这个冷漠的都市发出挑战。
突然,一阵刺耳的警报声划破了夜空,红色的警示灯在四周闪烁。艾丽娅转身,看到一群身穿制服的执法机器人正向她逼近,它们的眼睛闪烁着冷酷的红光。
"身份验证失败,立即停止行动。" 机器人的合成声音冰冷而无情。
艾丽娅握紧了拳头,她的心跳加速,血液在血管中沸腾。她知道,这一刻,她要么选择逃避,继续隐藏在虚拟的面具下,要么勇敢地面对,揭开真正的自我。
"我是艾丽娅,不是你们所定义的任何标签。" 她大声宣告,声音中充满了力量和决心。
她转身,迎着机器人的红光,迈出了那一步,踏入了未知的未来。