你公司那条"灵魂 prompt"——很可能只是某次午饭时某个产品经理随手写的。这篇 arXiv 2211.01910 告诉你:机器写的 prompt 已经在 19/24 个任务上超过人类了
- 关联论文:2211.01910
你有没有这种感觉 🤖?
你打开 ChatGPT / Claude / 内部 LLM 平台,信心满满写下一段精心打磨的 prompt——"请你作为一个资深分析师,从以下三个维度……"——结果输出要么"看起来对但答非所问",要么"废话一堆但关键点没说"。 你心想:"是我的 prompt 不够好吗?换一种说法试试?" 换完三种说法,输出还是飘的。你开始怀疑人生。
这件事的根源在于:prompt 工程是门手艺活,但"人写"的 prompt 跟"机器写"的 prompt 比起来,早就不是同一个水平了**。
arXiv 2211.01910(APE:Automatic Prompt Engineer)——一篇 2022 年 11 月的预印本——把这件"写 prompt"的事从手艺人活变成了自动流水线:
让大模型自己生成几十条候选指令 → 用目标评分函数给每条打分 → 聚类去重挑最优。 在 24 个 NLP 任务上,机器生成的指令在 19 个任务上达到或超过人类写作者。 整个流程只需三步:提出 → 打分 → 选择。
为什么这件事重要?因为今天所有"自动优化 prompt"的框架——DSPy、OPRO、PromptAgent、TextGrad、EvoPrompt——都能直接追到 APE 这条线。你今天用的每一个"prompt 一键优化"的工具,骨架都来自 2022 年 11 月的这篇预印本。
0 · TL;DR(30 秒版)
arXiv 2211.01910(APE) 解决一件具体的事:
把"自动提示工程"形式化成 program synthesis(程序合成)问题——让一个 LLM 当"proposer"生成 N 条候选指令,让目标函数在测试集上给每条打分,最后用聚类选最优。
关键洞察一句话:"prompt 不该是手工艺术品,而是指令空间上的离散搜索结果"。
对从业者最直接的工程含义:你今天用的 DSPy / TextGrad / OPRO 等"prompt 自动优化"框架,全部沿用 APE 2022 年的 propose-score-select 三阶段流水线。理解 APE,就理解了 2026 年所有 prompt 编译工具 80% 的设计哲学。
1 · 痛点:为什么"手写 prompt"是个坑
1.1 同一个模型换 prompt 性能能差几倍
2020 年 GPT-3 时代起,研究者就发现:同一个模型、同一个任务、不同 prompt,性能差异能到 10-50 个百分点。
这意味着: - 你以为"模型不行",可能只是 prompt 没写好。 - 你以为"模型很行",可能只是恰好踩中了 prompt 模板。 - 整个工业界的 prompt 库,本质上是一大堆不可复制的"祖传 prompt"——离了这家公司就废。
1.2 手工调 prompt 不可规模化
每个任务、每个模型都要重新写一套 prompt: - 摘要任务 prompt 模板 ≈ 30 个 - 客服对话 prompt 模板 ≈ 50 个 - 代码生成 prompt 模板 ≈ 20 个
每个模板都是某位工程师"调了半天、效果不错、沉淀下来"的产物。没有方法论、没有 A/B 标准、没有可解释性。
1.3 没有"自动 prompt 优化"的方法论
超参数优化、AutoML、NAS(神经架构搜索)都已经成熟——但 prompt 工程在 2022 年还是1960 年代"手挑特征"的水平:
- 调参:用 Optuna / Ray Tune
- 调网络架构:用 NAS(DARTS / ENAS)
- 调 prompt:靠某个工程师的直觉与运气
APE 的核心贡献就是:把 prompt 也变成可优化对象。
2 · 它到底在解决什么真问题
- 手工 prompt 不可规模化:每个任务、每个模型都要重写,没有方法论。
- prompt 优化的"自动化盲区":超参和架构都能自动搜,prompt 反而不能。
- "机器生成的指令能否搭便车提升 few-shot":如果机器写的指令本身可以 prepend 到下游任务的 few-shot prompt 前,能不能不重训模型就涨点?
APE 把这三个问题统一成一个框架:把 instruction 当成"程序",让 LLM 自己搜,再用下游评分函数选。
3 · 核心方法(人话版)
3.1 把 prompt 当"程序"——形式化
APE 的核心思想来自经典 program synthesis(程序合成):
instruction* = arg max_{instruction ∈ I} score(instruction)
I:候选指令集合,由一个 LLM(proposer)生成。score(instruction):在该指令下,目标 LLM 在测试集上的表现(准确率、对数概率、人类偏好)。
这把 prompt engineering 从"人写一句话"变成"在指令空间上的离散搜索"。
3.2 三阶段流水线
[Stage 1] Propose: LLM_propose → {i_1, i_2, ..., i_N} # 生成 N 条候选指令
[Stage 2] Score: for each i_k: compute score(i_k) # 评估每条候选
[Stage 3] Select: i* = arg max_k score(i_k) # 选最优
Stage 1:Propose(提出候选)
三种生成策略:
- Forward synthesis(正向合成):给 LLM 看若干
(input, output)示例,让它"反向写出能产出这些示例的指令"。这是最直观的方法。 - Reverse synthesis(反向合成):给 LLM 看已有候选指令,让它生成对应的输入输出对,再用这个数据集打分。
- 混合:两种策略各采一批候选。
论文还强调"温度控制 + 多样性采样"——单纯 greedy decode 会让候选高度同质化(都长得差不多)。
Stage 2:Score(打分)
两种评分方式:
- Black-box 评分:用目标 LLM 在该指令下 zero-shot 跑测试集,算准确率 / 困惑度 / BLEU。
- 基于对数概率的评分:让目标 LLM 在每条候选下生成参考输出,算对数概率平均。
Stage 3:Select(选择)
这一步是 APE 比朴素搜索更稳的关键:对"指令本身"做语义聚类,在每个簇里挑 top-k。
为什么要聚类?因为 LLM 在 Stage 1 生成的候选常常高度同质化——50 条候选里有 20 条意思差不多。不聚类的话,top-5 全是同义变体,等于浪费搜索预算。
3.3 一段伪代码看明白
def ape_pipeline(target_llm, eval_set, proposer_llm, n_cands=50, top_k=5, rounds=3):
candidates = proposer_llm.propose(eval_set.demos, n=n_cands, T=0.7)
best = None
for r in range(rounds):
scores = [score(c, target_llm, eval_set) for c in candidates]
top = cluster_and_pick_top(candidates, scores, top_k)
best = max(zip(candidates, scores), key=lambda x: x[1])
candidates = proposer_llm.mutate(best[0], n=n_cands, T=0.7)
return best
整篇论文的核心贡献其实就是这条流水线 + "propose-score-select 三阶段 + 聚类去重"的设计哲学。
3.4 多轮迭代
Stage 1 的 proposer 也可以用当前得分最高的指令做 in-context,再生成新候选。2-3 轮后收益递减,但首轮的提升通常非常显著。
4 · 关键实验与数据
APE 的实验结果非常有冲击力:
- 任务数:24 个 NLP 任务,覆盖 Instruction Induction 任务集合(因果推理、词义消歧、情感、QA、翻译等)。
- 与 LLM baseline 对比:自动生成的指令在 24 个任务上大幅超越(outperform by a large margin)之前的 LLM baseline——所谓"baseline"就是直接问 LLM "请你为这个任务写一段 prompt"的那种朴素做法。
- 与人类对比:在 19/24 任务上达到或超过人类写作者的指令表现。⚠️ 需核实:具体对比条件(paired comparison、标注员数量、标注员间一致性)原文未在已读取段落中展开,引用时应补条件。
- 跨任务迁移:在 TruthfulQA 等任务上搜出的指令可以直接 prepend 到其他任务的 few-shot prompt 前,提升 zero-shot 性能。
- 真实性 / 信息量引导:APE 搜出的指令可显式把模型往 truthfulness 或 informativeness 方向推——这是"软对齐"(不重训只换 prompt)的代表案例。
⚠️ 必须说清楚:原文以"outperform by a large margin"定性描述与 LLM baseline的具体百分点;19/24 任务上击败人类的具体任务清单需查原文表格,本文解读未逐项核实,引用时建议补具体任务名。
5 · 为什么这件事重要
5.1 它是"自动 prompt 优化"范式的祖师爷
把时间线拉直:
- 2022.11 APE(本篇):把 prompt engineering 形式化成 program synthesis。
- 2023.09 OPRO(2309.03409):把 APE 的离散搜索改成"LLM 自身在文本中写搜索历史",实现更连续的优化。
- 2023.10 DSPy(2310.03714):把 APE 思想封装成"模块化 LM program + 自动编译",从论文走向工业框架。
- 2024 PromptAgent、Promptbreeder、EvoPrompt:把 APE 的"指令空间搜索"扩展到"指令 + 示例"的协同进化。
- 2024-2026 TextGrad、OPRO+:把 APE 的 score 函数升级为 LLM-as-judge + 文本梯度。
今天所有"prompt 一键优化"工具,背后都能看到 APE 的影子。
5.2 它解释了为什么"prompt 也算模型的一部分"
DSPy 等框架的核心口号是"programming, not prompting"——把 prompt 视为可编译的中间表示(IR),而非手写代码。这背后隐含的假设就是:prompt 应该像超参数一样被自动搜索,而不是像源代码一样被人工维护。
APE 是这个范式的奠基论文:它第一次系统证明了"机器写的 prompt 可以击败人类"。
5.3 它是"软对齐"的代表案例
APE 在 TruthfulQA 上的实验证明:可以通过优化 prompt 来引导模型往真实性 / 信息量方向走,不需要重训。
这给"低成本安全对齐"提供了一个全新思路——对于很多 alignment 场景,与其改模型权重,不如直接搜 prompt。
6 · 工程落地(2026 年视角)
6.1 实际部署三大坑
- Score 函数计算代价高:每条候选 instruction 都要在完整 eval_set 上跑 target LLM。假设 N=50 条候选、eval_set=500 条样本、target=GPT-4 Turbo(~$0.01/1K tokens)、每条 query 100 tokens out,则单轮 cost ≈ $15。3 轮迭代 = $45。工业化初期建议用小模型(GPT-3.5-turbo / Qwen2.5-7B)做粗筛,再在大模型上精筛。
- "语义空洞"候选难检测:Proposer 生成 "This task requires careful analysis..." 等模板化指令时,在 target LLM 上会得到高分(因为这类指令足够模糊,target 倾向于自由发挥,得分方差小)。解法:在 score 函数里加
length_penalty或coverage_score,拒绝过短或过泛的候选。 - Self-APE 偏差是系统性陷阱:当 proposer == target 时(即 self-APE),系统会收敛到"target 模型最喜欢但不一定最优"的指令风格——这类指令在 target 上得分高,但在其他模型上泛化差。
6.2 2026 年工程等效实现路径
| APE 原件 | 2026 年工程替代 |
|---|---|
| prompt 工程做 propose | GPT-4o / Claude 3.5 用结构化输出做候选生成 |
| Black-box 评分 | LLM-as-judge(GPT-4 当评分员) |
| 语义聚类去重 | sentence-transformers + 层次聚类 |
| 多轮迭代 | DSPy 的 BootstrapFewShot + COPRO 编译器 |
| TruthfulQA 软对齐 | Constitutional AI 的 self-critique + prompt rewrite |
简单说:APE 的范式没变,底层工具链换了一代——从手工 prompt 工程换成了结构化输出,从朴素评分换成了 LLM-as-judge,从手工聚类换成了 sentence-transformers。
6.3 你今天用它的姿势
不要重新实现 APE——直接用 DSPy 或 OPRO:
- DSPy:把 APE 的 propose-score-select 封装成
BootstrapFewShot/COPRO编译器。 - OPRO:把 APE 的离散搜索改成"LLM 自身在文本中写搜索历史",实现更连续的优化。
- PromptAgent:把 APE 的单层指令搜索升级为"agent + 反思 + 迭代"。
它们的 API 形状跟 APE 的三阶段流水线一一对应,只是更稳定、更快、更省 token。
但你必须读一遍 APE 的论文——因为它的 propose-score-select 流水线,就是今天所有 prompt 自动优化框架的"骨架图"。理解骨架比记住 API 更重要。
7 · 关键数据与必须警惕的边界
- "propose-score-select 三阶段流水线":论文 Section 2 核心贡献。✅ 有据可查。
- "在 24 任务上大幅超越 LLM baseline":⚠️ 原文为定性描述("outperform by a large margin"),未在已读取段落中给出具体百分点;引用时建议补具体任务名与数字。
- "19/24 任务上达到或超过人类":⚠️ 具体对比条件(paired comparison?标注员数?标注员间一致性 Krippendorff α?)原文未在已读取段落中明确,引用时需补条件。
- "TruthfulQA 软对齐可迁移到其他任务":✅ 论文 Section 4 报告,但具体百分比未在已读取段落中明确。
- "APE 启发 DSPy / OPRO / PromptAgent":⚠️ 此为本文解读的"沿用关系判断",论文卡未明确给出此映射;属于方向性归类而非论文显式声明。
- "T=0.7 / 50 候选 / 2-3 轮迭代":⚠️ 此为常见工程经验值,原文是否明确给出 temperature 与候选数原文未在已读取段落中说明。
三个标题变体
- 《你公司那条"灵魂 prompt"——很可能只是某次午饭时某个产品经理随手写的。这篇 arXiv 2211.01910 告诉你:机器写的 prompt 已经在 19/24 个任务上超过人类了》
- 《别再让工程师手写 prompt 了——arXiv 2211.01910 APE 用"程序合成"思路,让 LLM 自己搜出比人类更好的指令》
- 《为什么"prompt 一键优化"工具现在这么多?答案藏在 arXiv 2211.01910 这篇 2022 年的"自动 prompt 工程"祖师爷论文里》
📱 小红书风格卡片文案(可直接发布)
📌 你公司那条"灵魂 prompt"——很可能只是某次午饭时某个产品经理随手写的
你有没有这种感觉 🤖 —— 你打开 ChatGPT / Claude / 内部 LLM 平台,信心满满写下一段精心打磨的 prompt——"请你作为一个资深分析师,从以下三个维度……"——结果输出要么"看起来对但答非所问",要么"废话一堆但关键点没说"。你心想:"是我的 prompt 不够好吗?换一种说法试试?"换完三种说法,输出还是飘的。
arXiv 2211.01910(APE:Automatic Prompt Engineer)—— 一篇 2022 年 11 月的预印本——把这件"写 prompt"的事从手艺人活变成了自动流水线。
让大模型自己生成几十条候选指令 → 用目标评分函数给每条打分 → 聚类去重挑最优。 在 24 个 NLP 任务上,机器生成的指令在 19 个任务上达到或超过人类写作者。 整个流程只需三步:提出 → 打分 → 选择。
🔸 3 个普通读者最该记住的点:
1️⃣ 它是今天所有"自动 prompt 优化"工具的"祖师爷"——DSPy、OPRO、PromptAgent、TextGrad、EvoPrompt,propose-score-select 三阶段流水线全部沿用 APE 2022 年画的骨架图。理解 APE,就理解了 2026 年所有 prompt 编译工具 80% 的设计哲学。
2️⃣ "prompt 是程序,不是艺术品"是这条范式的灵魂——把 prompt 视为"指令空间上的离散搜索结果",而非工程师手工调参的产物。这是 2026 年所有 LLM 应用框架的共识起点。
3️⃣ 它是"软对齐"的代表案例——APE 在 TruthfulQA 上的实验证明,可以通过优化 prompt 来引导模型往真实性方向走,不需要重训。这给"低成本安全对齐"提供了一个全新思路。
🔸 一句话给老板:
别再让工程师手写 prompt 了。arXiv 2211.01910 APE 在 24 个 NLP 任务上证明了机器生成的 prompt 可以在 19 个任务上超过人类——而今天的 DSPy / OPRO / TextGrad 都把 APE 的流水线封装成了"prompt 一键优化"的工业框架。"prompt 编译"已经从研究论文变成了工程实践,下一个不学 APE 的 prompt 工程师,会被会写 DSPy 的同事替代。