论文:[2502.06855] Self-Supervised Prompt Optimization
仓库:GitHub - Airmomo/SPO: SPO | Self-Supervised Prompt Optimization
自监督提示优化(SPO)
创新点
成对比较评估
输出指导优化
全文介绍
背景
随着大语言模型的发展,设计提示对于最大限度发挥模型的推理能力,以及确保符合不同的任务要求,逐渐成为了关键。然而,创建有效的提示通常需要大量的试错实验和深入的特定任务的知识。 (模板填充具体问题 → 生成完整提示 → 输入模型 → 获得输出) 研究人员探索了使用LLM自己的能力来自动改进提示的提示优化(PO)方法。PO提供了一种更系统和更有效的快速设计方法,它通常涉及一个快速优化、执行和评价的迭代过程。现有的方法数值评价机制和文本梯度优化策略上都取得了成功。 数值评价机制:通过可量化的指标直接评估提示的性能,并基于数值反馈迭代优化提示。 文本梯度优化:通过自然语言反馈指导提示优化,利用LLM生成“文本梯度”(即改进建议),逐步调整提示内容。
(相关方法正在整理中)
问题
目前的方法往往严重依赖于外部参考进行评价。
采用真实标签(Ground Truth)进行评价导致其难以适用于开放任务。
现有的方法通常需要对大量样本进行提示评估,以获得可靠的反馈,从而导致大量的计算开销。
解决方案:自监督提示优化(Self-Supervised Prompt Optimization, SPO)
核心贡献
无需外部参考的优化框架:
提出自监督提示优化(SPO),通过LLM输出的成对比较评估提示质量,摆脱对标注数据或人工反馈的依赖。
利用LLM自身理解任务需求的能力,将输出直接作为优化信号。
极致的成本效率:
优化成本仅为现有方法的 1.1%~5.6%(如单数据集成本低至 0.15美元),且仅需 3个样本即可完成一轮优化。
任务普适性:
在封闭任务(数学推理、事实核查)和开放任务(创意写作、角色扮演)中均表现优异,尤其提升小模型(如GPT-4o-mini)性能达 30%。
模型设计
三大功能:
优化函数(ϕₒₚₜ):分析当前最优提示及输出,生成新提示(如引入结构化XML模板指导LLM迭代改进)。
执行函数(ϕₑₓₑ):生成输出(路径 + 答案)
评估函数(ϕₑᵥₐₗ):通过LLM对输出进行成对比较,选择更优提示。
用户输入 ↓ [ϕₒₚₜ] 初始化提示模板 ↓ [ϕₑₓₑ] 执行生成首次输出 ↓ [ϕₑᵥₐₗ] 评估输出质量 ↓ [ϕₒₚₜ] 根据反馈优化提示 ↓ [ϕₑₓₑ] 执行新提示生成输出 ↓ [ϕₑᵥₐₗ] 多轮对比评估 ↓ (循环直至收敛) ↓ 最终输出
评估
历史分析
评估方法:
预定义的指标
LLM-as-a-judge
人类反馈
评估反馈
数值反馈(需要大量样本、容易忽略细节)
文本反馈
排序或选择反馈
评估框架
Output vs. Ground Truth(真实标签):需 Ground Truth,适合封闭任务
Output vs. Output(核心):不依赖外部参考,适配开放任务
优化函数
目标:基于当前最佳提示和对应输出,生成改进后的新提示。 实现机制:
结构化模板引导:使用XML格式的元提示(Meta Prompt)指导LLM分析现有输出的不足并提出改进方向。
基于任务理解的动态调整:LLM根据输出内容反推任务需求,自动调整提示结构。例如,在数学推理任务中,若发现模型忽略坐标计算,新提示会强制要求“每一步更新坐标并记录”。
优化过程
优化方向由模型输出的缺陷驱动
修改的是提示的语义内容
执行函数
目标:将优化后的提示应用于LLM,生成任务输出。 关键设计:
小样本高效执行:仅需3个随机样本(无需标注答案)即可运行,大幅降低成本。
输出结构化:强制要求输出包含推理路径和最终答案,便于后续评估。
评估函数
目标:通过LLM对比新旧提示的输出,选择更优者。 评估流程:
构建对比对:将同一问题在新旧提示下的输出组成对(Output A vs. Output B)。
设计评估指令:要求LLM基于任务需求(如逻辑严谨性、格式合规性)判断优劣。
多轮随机评估:每个迭代进行4轮独立比较,减少偶然偏差。
评估结果处理:
若新提示胜率超过阈值(如3/4),则替换为当前最佳提示;
否则保留原提示,进入下一轮优化。
闭环迭代流程
初始化:从基础提示模板(如Chain-of-Thought)和3个样本开始。
迭代优化:
第1轮:生成Prompt₁ → 执行 → 评估 vs. Prompt₀;
第2轮:生成Prompt₂ → 执行 → 评估 vs. Prompt₁;
持续至达到最大迭代次数(如10轮)或性能收敛。
终止条件:达到预设迭代次数或连续多轮无显著改进。
全文总结
一句话总结:在实现显著成本效益的同时的同时,消除了对外部参考的依赖。
成果
(1)克服了依赖于外部参考实现快速优化的问题。
(2)以每个数据集仅0.15美元的价格实现了显著的成本效益。
(3)实现了最先进的结果,而只需要现有方法成本的1.1%- 5.6%。
(4)在标准基准测试和不同的实际应用程序上的成功验证了SPO的有效性和泛化能力。
风险
潜在的偏见放大:SPO依赖LLM自身作为评估者,导致“偏见反馈→优化强化偏见”(正反馈调节)。【尝试解决将有可能导致风险3】
解决方案:1.加入公平性约束(Bias Penalty Loss),惩罚带有偏见的输出。【注意:平衡成本】2.去偏数据集微调评估函数(ϕₑᵥₐₗ)?
Mitigating Social Bias in Large Language Models: A Multi-Objective Approach within a Multi-Agent Framework
Bias and Fairness in Large Language Models: A Survey
有害内容产生的误用:SPO仅以性能为优化目标,忽略内容安全性。【尝试解决将有可能导致风险3】
解决方案:内置Moderation API?
以及过度依赖LLM:SPO生成的提示可能会更符合人类的偏好,且全流程无需人工介入,用户可能忽视对关键结果的二次验证。
解决方案:增加置信度分析。数据集微调评估函数(ϕₑᵥₐₗ)?
细节
1、优化函数如何根据输出修改提示?
通过元提示(Meta Prompt)调用LLM,直接生成改进后的提示。
(元提示模板eg.)
<analyse> 分析当前输出的缺陷:{缺陷描述} </analyse> <modification> 总结改进方向:{改进策略} </modification> <prompt> 生成优化后的完整提示 </prompt>
这个提示模板指导llm通过结构化XML分析迭代地改进现有的提示。它需要识别提示输出中的缺陷,提出修改,并生成优化的版本。
该模板在保持需求遵从性的同时,也强调了增量式的改进。
在每次迭代中,优化函数生成新提示后,评估函数会进行四轮独立评估,具体流程如下:
每轮从数据集中随机抽取不同的样本(3个最优,10次迭代)
四轮中若新提示胜出≥3次,则判定为优化成功;否则保留原提示