首页 知识分组 G05 评测与自动优化 PE-E-05
自动提示词工程
Automatic Prompt Engineering
PE-E-05 内容已写满 G05 评测与自动优化 第 17 层
自动优化 评测 搜索
一句话结论
自动提示词工程用模型生成候选、用评测集筛选,把提示词的优化变成可批量执行的搜索;它的上限由评测集质量与判据的可判定性决定,因此先有可自动计算的评测,才谈得上自动优化。
本页结构(可跳转)
G
生成候选指令
V
在评测集上评估
G->V
N
三条工程要点
① 评测集必须含留出部分,防搜索过拟合
② 判据必须可自动计算:人工判断先固化为代理指标
③ 限制搜索预算并记录最优候选
G->N
S
按指标选择
或组合
V->S
S->G
必要时迭代
F
前提与边界
无评测集与判据时,搜索没有目标函数
推理模型上自动优化的空间与人工优化一样被压缩
S->F
自动优化回路图:生成候选 → 评测集评估 → 选择或组合 → 必要时迭代的闭环,与三条工程要点(留出集、可自动计算的判据、搜索预算)。 (本站自制)
01 为什么需要它
人工试错写提示词的瓶颈不在灵感而在验证:一句改动到底有没有让结果变好,只能由评测集回答。
自动提示词工程把「想一句更好的指令」换成「生成一批候选、按指标排序、留下最好的那一条」,让优化过程可批量执行、可复现、可记录。 它成立的前提是评测集与可自动计算的判据已经存在;没有目标函数时,搜索只是在没有刻度的空间里空转,候选再多也选不出方向。
适用边界
这条路线只在「有评测集 + 判据可自动计算 + 任务分布稳定」三者同时成立时才划算;缺任意一项,搜出来的最优候选都只是对某一小批样本的拟合。判据里含大量人工判断时,自动回路优化的是代理指标而不是真实目标,代理与目标偏离越大,报出来的收益越假。搜索预算不设上限时,成本线性增长而分数早已进入平台期,于是出现账单翻倍、指标持平的组合。此外,自动生成的指令仍然绑定调参时的问题分布:输入规模或任务形态一变,原先的最优提示会迅速退化,因此分布变化后要重跑评测,而不是沿用旧候选。
02 机制说明
自动优化的一般回路是:由一个模型生成候选指令(改写、增删约束、补示例),在同一评测集上逐条评估,按指标选择或组合出当前最优,必要时把最优解当作下一轮起点继续迭代。
以 APE 为代表的早期工作显示,在多项任务上自动生成的指令可以超过先前基线并接近人工标注水平;后续工作把这条回路做成可配置的优化器,加入示例选择、反思反馈与预算控制,使它能在多阶段流水线上反复运行。 工程要点有三条 评测集必须切出留出部分,只用调参样本评选会让搜索过拟合到那批样本 判据必须可自动计算,含人工判断的部分要先固化成可判定的代理指标,并接受代理指标与真实目标之间的偏差 必须设定并记录搜索预算(候选数、迭代轮数、调用成本),因为收益随搜索量递减而成本随搜索量线性增长。 在推理模型上,可优化的空间与人工优化一样被压缩:底座已经内化的能力,不必再用搜索写一遍。
03 何时该用 / 何时不该用
04 实验台
file python
查看代码 import random
# 最小自动优化回路:候选生成 -> 评测 -> 选择(调参集 / 留出集分开报告)
def score(prompt, rows):
return sum(1 for r in rows if r["label"] in prompt.fake_run(r["x"])) / len(rows)
class Prompt:
def __init__(self, text):
self.text = text
def fake_run(self, x):
return self.text # 桩:真实实现替换为一次模型调用
candidates = [Prompt(t) for t in open("candidates.txt", encoding="utf-8").read().split("\n\n") if t.strip()]
train, holdout = rows[:80], rows[80:]
ranked = sorted(candidates, key=lambda p: score(p, train), reverse=True)
for p in ranked[:5]:
print(round(score(p, train), 3), round(score(p, holdout), 3), p.text[:40])
best = max(candidates, key=lambda p: score(p, train))
print("选定(按调参集):", round(score(best, train), 3), "留出集:", round(score(best, holdout), 3))预期观察:逐条打印「调参集分数 / 留出集分数 / 候选前 40 字」;若调参集第一名在留出集上不再领先,即为过拟合信号,应缩小候选空间或扩大评测集,而不是直接采用调参集最优。
prompt markdown
查看代码 你是提示词候选生成器。给定任务描述与 3 条失败样例,产出 6 条互不相同的候选指令。
要求:
1. 每条候选只改变一个设计维度(输出格式 / 判定标准 / 边界条件 / 示例策略 / 视角 / 约束强度),并在开头用一行标注改的是哪个维度;
2. 指令必须写到可被判定的程度:写明输出形态、判定标准与失败条件;
3. 禁止只做同义改写;若某维度无法再改,明确写「该维度已饱和」。
输出格式:每条候选一个 Markdown 小节,标题为维度名,正文为完整指令。预期观察:得到 6 条维度可区分的候选而不是 6 段同义改写;「该维度已饱和」的出现次数即提示搜索空间是否已经耗尽——出现过多说明应换生成策略或换评测集,而不是继续加轮数。
05 证据
主张 APE 的原始实验显示,模型自动生成的指令在 24 项 NLP 任务上大幅超过先前 LLM 基线,并在 19/24 项上达到或接近人工标注指令的水平。
分级 paper
来源 S-0050 https://arxiv.org/abs/2211.01910
原文 展开原文关键句 our automatically generated instructions outperform the prior LLM baseline by a large margin … better or comparable performance to the instructions generated by human annotators on 19/24 tasks.
主张 OPRO 把优化过程本身交给模型做迭代搜索,其搜索出的最优提示在 GSM8K 与 Big-Bench Hard 上超过人工设计的提示。
分级 paper
来源 S-0051 https://arxiv.org/abs/2309.03409
原文 展开原文关键句 the best prompts optimized by OPRO outperform human-designed prompts by up to 8% on GSM8K, and by up to 50% on Big-Bench Hard tasks.
主张 该研究显示提示的收益只在提示与问题类高度贴合时出现,且随查询规模超出示例规模而迅速衰减——自动搜索出的最优提示同样绑定在调参分布上。
分级 official
来源 S-0036 https://proceedings.neurips.cc/paper_files/paper/2024/hash/3365d974ce309623bd8151082d78206c-Abstract-Conference.html
原文 展开原文关键句 those prompts are exceedingly specific to their problem class … those improvements quickly deteriorate as the size n of the query-specified stack grows past the size of stacks shown in the examples
06 术语
术语 自动提示词工程 APE
界定 由模型自动生成候选指令并按评测指标筛选的优化路线;其候选生成与筛选都需要评测集支撑。
相关节点 —
术语 评测集 Eval Set
界定 带判据的一组代表性输入输出样本,是判断提示词改动是否真的变好的唯一依据;先建评测集再做优化。
相关节点 —
术语 指令的具体性与可验证性 Instruction Specificity and Verifiability
界定 指令应写到可被判定的程度:明确输出形态、判定标准与失败条件,使结果可被自动化校验而非靠人工观感。
相关节点 —
07 失效模式
无留出集 只在调参样本上评选候选,分数虚高,上线后回落到基线以下。 判据不可自动计算 把「读起来更顺」当指标,搜索退化成措辞轮换,多轮迭代后输出无实质变化。 预算无上限 候选数与迭代轮数不受控,成本线性增长而收益早已进入平台期,账单与分数脱钩。 候选同质化 生成器只做同义改写,搜索空间实际只剩一条路径,多轮迭代等于重复调用同一个提示。 沿用旧最优 分布变化后不重跑评测直接复用旧候选,退化无人发现。
08 在本站知识结构中的位置
所属分组 G05 评测与自动优化 依赖深度 第 17 层(同层节点彼此无先后约束)
在 交互全景图 中定位本节点。