新一代提示词工程 · 知识全景图面向有工程基础、提示词工程尚未系统化的工程师
显示设置

自动提示词工程

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机制说明

自动优化的一般回路是:由一个模型生成候选指令(改写、增删约束、补示例),在同一评测集上逐条评估,按指标选择或组合出当前最优,必要时把最优解当作下一轮起点继续迭代。

03何时该用 / 何时不该用

按场景对照:先看条件,再看该怎么做。
类别场景 / 条件(总结)具体做法(细节)
该用任务稳定、判据可自动计算、且有评测集时自动搜索能替代人工试错,并把「改了什么」留成可复查的记录。
该用需要批量生成候选并做对比实验时自动回路能把候选生成与评估并行化,显著降低人力。
该用已有优化器框架且流水线是多阶段时把指令与示例的搜索交给配置化的优化器,比手工逐段调更省维护。
不该用判据不可自动化的任务没有可计算的目标函数,搜索无法收敛到有意义的解。
不该用无留出集的场景只在调参样本上评选会过拟合,并系统性高估收益。

04实验台

  1. filepython

    查看代码
    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 字」;若调参集第一名在留出集上不再领先,即为过拟合信号,应缩小候选空间或扩大评测集,而不是直接采用调参集最优。

  2. promptmarkdown

    查看代码
    你是提示词候选生成器。给定任务描述与 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 层(同层节点彼此无先后约束)
前置PE-E-02PE-R-08→PE-E-05 本节点→后继PE-E-06

在 交互全景图 中定位本节点。