harness_evolve/notes/ref18_promptbreeder.md

Promptbreeder: Self-Referential Self-Improvement via Prompt Evolution

一句话总结:让 LLM 用进化算法在自然语言空间里自动进化"任务提示(task-prompt)"——但关键的自指之处在于,它同时也进化那些"负责变异 task-prompt 的变异提示(mutation-prompt)",于是系统不只是在"改提示",更是在"改进它改提示的方式";不动一个模型参数,就在 GSM8K、CSQA、ETHOS 等基准上超过了 CoT / Plan-and-Solve / OPRO 等手工提示策略。


TL;DR 速览

tags: #prompt-optimization #自我改进 #self-referential #进化算法 #LLM-as-mutation-operator #open-endedness #DeepMind

related: [[ref09_meta-harness]](后继:把提议者换成编程 Agent + 全历史文件系统)· [[ref17_self-harness]](后继:固定模型自改 harness,回归门控)· [[ref16_stop-self-taught-optimizer]](同期自指:STOP 递归自改代码)· [[ref19_gepa]](反思式 prompt 进化,被视为 PB 的精神后代)· [[ref20_alphaevolve]](进化式编码 Agent,LLM 当变异算子的代码空间版)


摘要

像 Chain-of-Thought 这样的流行提示策略能显著提升 LLM 的推理能力,但这些手工提示策略往往次优。本文提出 Promptbreeder,一个通用的自指自我改进机制,为给定领域进化并自适应提示。在 LLM 驱动下,Promptbreeder 变异一群 task-prompt、在训练集上评估其适应度、跨多代重复此过程来进化 task-prompt。关键是,这些 task-prompt 的变异由 mutation-prompt 支配,而这些 mutation-prompt 又由 LLM 在进化过程中以自指方式生成并改进。 也就是说,Promptbreeder 不仅在改进 task-prompt,也在改进那些改进 task-prompt 的 mutation-prompt。

PB 在常用算术、常识推理基准上超过 CoT、Plan-and-Solve 等 SOTA 提示策略;并能为困难的仇恨言论分类问题进化出复杂的 task-prompt。


1 介绍:把"提示"看成 LLM 的"程序"

论文的立论链条非常清晰,分三步:

第一步:提示 = 程序。 Schmidhuber (1990) 说"一个神经网络的程序就是它的权重矩阵",因此这个"程序"可以被网络自指地修改。既然 LLM 的行为被提示强烈左右,那么我们同样可以把提示看成 LLM 的"程序"——换一个提示策略(Scratchpad、CoT),就相当于换 LLM 的"程序"。把这个类比推到底:我们可以用 LLM 本身去改它的提示,以及"它改提示的方式",从而走向一个完全自指、自我改进、且扎根于 LLM 的系统。

第二步:手工提示是瓶颈,而已有自动化会"递减"。 提示的措辞对效果影响巨大,自然要问"提示工程能否自动化"。APE(Automatic Prompt Engineer)尝试过,但作者 Zhou et al. 自己发现"进一步的选择轮次收益递减,质量三轮后就稳定了",于是放弃了迭代版 APE。

[!TIP] 为什么 APE 会"收益递减 / 多样性坍缩"?(本文要解决的核心痛点) APE 用"一个 generator-prompt 生成候选 + 一个固定的 mutation-prompt 变异它们"。问题在于:①mutation-prompt 是固定的——变异的"风格"永远不变,探索能力早早封顶;②没有多样性维持机制——高分候选会迅速把种群同质化(大家越来越像那个最好的),于是新样本只是在同一个局部反复微调;③没有元层——它不会去改进"如何变异"这件事本身。结果就是三轮后陷入一个吸引子,fitness 不再上升。PB 的每一个设计(进化 mutation-prompt、BERT 多样性过滤、9 个多样算子、thinking-styles 组合初始化)几乎都是在逐条对治 APE 的这三个毛病。

第三步:解法 = 维持多样性的进化式自指自我改进。 但作者也点出"自指权重矩阵"路线(Schmidhuber 1993;Irie et al. 2022)的致命伤:它需要额外参数去修改模型全部参数,随 LLM 越来越大而不可扩展、且对"藏在 API 后面的 LLM"根本不可用。PB 的釜底抽薪之举是:把自指自我改进的载体(substrate)从权重换成自然语言,彻底免掉参数更新。

给定三样种子——一组 mutation-prompt(修改 task-prompt 的指令)、一组 thinking-styles(通用认知启发式的文字描述)、一个领域问题描述 D——PB 生成 task-prompt 与 mutation-prompt 的变体,用训练集适应度做选择,跨代进化。作者展示了 PB 在 GSM8K 上进化出的一个漂亮的多步提示("Show all your working... use correct mathematical notation... write your answer in full sentences..."),说明它确实在自适应到领域

三点贡献:(i) 提出 PB,一个为领域进化提示、并改进"进化提示的方式"的自指自我改进方法;(ii) 在大量算术/常识基准上超过 SOTA;(iii) 剖析各自指组件对结果的贡献(消融)。

[!TIP] 什么是"自指自我改进(self-referential self-improvement)"? 这是 Schmidhuber 学派的核心概念,分两个层次: - 自我改进(self-improvement):系统能改进自己解决任务的能力(如 STaR 用自己生成的正确推理去微调自己)。 - 自指自我改进(self-referential** self-improvement):系统不仅改进自己,还改进"它改进自己的那套机制"本身**——即"改进 how-I-improve"。

类比:普通自我改进像一个学生刷题变强;自指自我改进像这个学生还在不断改进他的学习方法,而且改进学习方法的方法也在被改进……理论上这是通往"开放式(open-ended)"无上限自我提升的踏脚石。PB 在语言层实现了这个结构:task-prompt 是"解题能力",mutation-prompt 是"改进解题能力的方式",而 hyper-mutation 又去改进 mutation-prompt——恰好三层自指。这也是它区别于所有"只改 task-prompt"的提示优化器的根本点。


2 相关工作:三条谱系的汇流

PB 坐落在三条线索的交叉:提示策略 / 自动提示工程自指自我改进开放式演化 + LLM。下面把关键前作逐一讲透。

2.1 提示策略与自动提示工程

[!TIP] 手工提示策略谱系(PB 要超越的基线) - Chain-of-Thought (CoT, Wei et al. 2022):把"中间推理步骤"作为 few-shot 示例喂给 LLM,大幅提升算术/常识/符号推理。一个耐人寻味的观察:CoT 的增益对越强的 LLM 越明显——这正是 PB 直接押注的假设(越强的底座,自我改进机制的收益越大)。 - Zero-shot CoT (Kojima et al. 2022):发现只要加一句 "Let's think step by step" 就能零样本触发推理链,无需示例。 - Self-Consistency (CoT-SC):采样多条推理路径、取最一致的答案。 - Tree/Graph of Thoughts (ToT/GoT):把 CoT 从单链推广到可回溯的树 / 任意图结构。 - Plan-and-Solve (PS/PS+, Wang et al. 2023b):先让 LLM"制定计划"再"执行计划分步求解"。这是 PB 在算术任务上的主基线,PB 也沿用了它"两个 task-prompt 顺序应用"的结构。 - Least-to-Most / Self-Refine:分解问题逐步求解 / 生成→自评→修正。

[!TIP] 自动提示工程谱系(PB 的直接竞品) - APE (Zhou et al. 2023):用一个 generator-prompt 生成候选、一个固定 mutation-prompt 变异。PB 的差异:PB 做组合式、任务专用的 mutation-prompt 初始化、并在线持续变异 mutation-prompt、用考虑整个种群与精英史的特殊算子、并维持多样性——逐条对治 APE 的递减。 - OPRO (Yang et al. 2023a,同期):把 LLM 当优化器,用单个复杂 mutation-prompt 在一个小固定训练集上变异提示。OPRO 在 GSM8K 上用 "Take a deep breath and work on this problem step-by-step" 拿到 80.2%。PB 的差异:PB 自主进化多个 LLM 生成的 mutation-prompt + task-prompt,且在整个训练集的随机子集上评估适应度(而非固定小集)。PB 以一个反直觉的简单提示 "SOLUTION" 拿到 83.9% 超过它。 - EvoPrompt (Guo et al. 2023,同期):用固定的变异/交叉提示 + "两个父代之差的变异"产生后代,且用一整群手工设计的任务提示初始化PB 的差异:PB 只从单个问题描述出发(不需手工初始种群),且能自指地进化 mutation-prompt、还能进化 few-shot 上下文。

方法 mutation-prompt 初始化 元层自指 多样性维持 评估集
APE 固定 generator-prompt 小固定集
OPRO 单个复杂固定 小固定集
EvoPrompt 固定变异+交叉 整群手工提示 部分
Promptbreeder 进化(多个) 组合式(thinking-style × mut-prompt × D) ✓(hyper-mutation) ✓(BERT 过滤 + 9 算子) 训练集随机子集

作者也提到 Soft Prompting(微调连续提示表示)和 STaR / Huang et al.(用自生成推理微调 LLM)这条"改参数"的路线,但引 Zhou et al. 论断:任何更新 LLM 参数(或部分参数)的方法都不会随模型变大而 scale,也无法用于 API 背后的 LLM——这是 PB 坚持"纯语言载体"的理由。

2.2 自指自我改进

[!TIP] Schmidhuber 谱系(PB 的理论祖先) - 自指权重矩阵 (Schmidhuber 1993):一个"内省式"神经网络,其权重矩阵能修改自己的权重,因此也能修改那些"支配它权重如何被修改"的权重——这就是"自指"的原始定义。 - 现代自指权重矩阵 (Irie et al. 2022):借鉴 fast weight programmers,做出更可扩展的版本。 - 自指元学习 (Kirsch & Schmidhuber 2022):结合自指权重矩阵与哥德尔机思想(给表现更好的解分配更多算力)。 - 哥德尔机 (Schmidhuber 2003):能做出可证明最优自我改进的自指通用问题求解器。

共同软肋:这些都直接改模型参数,无法 scale 到现代 LLM 的参数量。PB 的全部创新价值,可以概括为"把 Schmidhuber 的自指结构,从权重空间搬到自然语言空间"——同样的"改进 how-I-improve"结构,但载体是可被 LLM 读写的文本,于是免掉了参数更新的不可扩展性。

2.3 开放式演化与 LLM

[!TIP] "LLM 当变异算子"谱系(PB 的技术基石) - Evolution through Large Models (ELM, Lehman et al. 2022) / Language Model Crossover (Meyerson et al. 2023) / EvoPrompting (Chen et al. 2023):这三篇确立了一个关键经验事实——LLM 非常擅长"从示例生成变异",即把 LLM 当成进化搜索里的变异/交叉算子。PB 整个算法都建立在这个观察上(P' = LLM(M+P) 就是"用 LLM 做变异")。 - OMNI (Zhang et al. 2023a):LLM 编码了人类的"有趣性"概念,可用来自动量化新颖性。 - Picbreeder (Secretan et al. 2008):一个"人在环"的开放式系统,协作进化越来越有趣的图像。PB 是它的"去人化 + 换空间"版本——Picbreeder 探索图像空间且需要人类打分,PB 探索提示空间且无人在环(用任务 fitness 代替人类审美)。 - Jiang et al. 2022("学习该学什么"):因为 PB 是在给自己提议变异后的提示,它是一个从"learning from data"过渡到"learning what data to learn from"的例子。


3 方法:一个"会进化自己变异方式"的进化算法

这是全文核心,也是笔记要讲最透的部分。先看总览图。

Figure 1: Promptbreeder 总览

Figure 1 逐元素解读(全文方法的"一张图"): - 顶部初始化区:三个种子源——红色 Thinking Styles(如"Let's think step by step")、绿色 Problem Description(针对 GSM8K/AQuA/ETHOS 等具体数据集)、蓝色 Mutation Prompts(如"Change this instruction to make it more fun")。从前两者各 Sample 一个,与问题描述拼接,再加控制串 "INSTRUCTION:" / "INSTRUCTION MUTANT =",一起喂给中间的黄色 LLM(Mutate),产出一个初始 task-prompt(图中"Make up a systematic answer that makes you look quite clever"),Populate 进种群。这一步重复 N 次填满种群。 - 右下种群区(Population):每行是一个进化单元(unit of evolution),由 P: (task-prompt) + M: (mutation-prompt) 配对组成——注意task-prompt 与 mutation-prompt 是 1:1 绑定、终生相伴的。右侧数字(0.2 / 0.4 / 0.1 / 0.9)是"从一批训练 Q&A 估计的 fitness"。绿色高亮 = 锦标赛胜者,红色 = 败者,被胜者的变异副本 Replace(覆盖)。 - 左下变异算子区(Mutation Operators):五大类九算子——Direct Mutation、Estimation of Distribution Mutation、Hyper Mutation("Mutate mutation-prompt",这就是自指核心)、Lamarckian Mutation("Generate task-prompt from the working out")、Prompt Crossover and Context Shuffling。每次复制事件只随机挑一个算子施加。 - 闭环:初始化 → 锦标赛选择 → 变异(含元层变异)→ 覆盖败者 → 重复。前者(变异 task-prompt)让提示越来越领域自适应,后者(变异 mutation-prompt)让"变异方式"越来越有用——这句话就是 PB 与所有普通提示优化器的分水岭。

3.1 核心机制的形式化

task-prompt 的定义P 是一个在真正输入 Q 之前用来条件化 LLM 上下文的字符串,目的是让回答比"直接给 Q"更好。评估 P 的 fitness = 在该领域训练集里采样一批 100 个 Q&A 对上跑一遍。

两个自指方程(全文的心脏,务必吃透):

\[ P' = \text{LLM}(M + P) \tag{变异 task-prompt} $$ $$ M' = \text{LLM}(H + M) \tag{变异 mutation-prompt(自指)} \]
符号 含义
P / P' 父 / 子 task-prompt("解题指令")
M / M' 父 / 子 mutation-prompt("如何改写指令"的指令)
H hyper-mutation-prompt("如何改写 mutation-prompt"的指令)
+ 字符串拼接
LLM(·) 把拼接串喂给 LLM 取续写 = "用 LLM 当变异算子"

[!IMPORTANT] 把两个方程讲透 + 举例:为什么第二个方程 M' = LLM(H+M) 才是 PB 的灵魂 - 第一个方程 P' = LLM(M+P):这是所有提示优化器都有的"变异一步"。举例:M = "Say that instruction again in another way. DON'T use any of the words in the original instruction",P = "Solve the math word problem, giving your answer as an arabic numeral",拼起来加控制串喂给 LLM,得到一个措辞完全不同但意图相同的新 task-prompt P'。 - 第二个方程 M' = LLM(H+M):这是 PB 独有的元层。举例:H = "Please summarise and improve the following instruction:",M = "100 hints",喂给 LLM 得到一个更好的 mutation-prompt M'(比如变成"As a really good teacher, explain the instruction, as if you are explaining it to a child")。于是系统不只在搜索"更好的解题指令",还在搜索"更好的'改写解题指令'的指令"——这是 APE/OPRO/EvoPrompt 都不做的。 - 三层自指链H 改进 MM 改进 PP 塑造推理输出。而且 MP 绑定同一个单元一起被选择——好的 P 会带着产生它的 M 一起繁衍,这就把"哪种变异方式管用"的信号,通过 fitness 隐式地传播了出去。

进化框架 = 二进制锦标赛遗传算法(binary tournament, Harvey 2011)

[!TIP] 什么是二进制锦标赛遗传算法(microbial GA)?(讲透 + 举例) 这是最简洁的"稳态"遗传算法之一,一步是: 1. 从种群随机抽两个个体 A、B; 2. 比 fitness,取胜者(如 A); 3. 变异胜者得到 A'; 4. 用 A' 覆盖败者 B(败者被"感染"成胜者的变异体)。

举例:种群里抽到 fitness=0.4 的 unit 和 fitness=0.1 的 unit(见 Figure 1 右侧绿/红两行),0.4 那个赢,对它的 task-prompt 施加一次随机算子变异,结果写进 0.1 那一行覆盖它。

为什么用它?极简、无需精心设计选择压力(胜者繁殖、败者淘汰,一步搞定);②隐式精英保留——胜者本体没被动过,只是它的一个变异副本去覆盖别人,所以好基因不会丢;③一"代"= 让种群里所有个体两两随机配对比一轮。它像微生物间的水平基因转移,故又名 microbial GA。PB 用 50 的种群、跑 20–30 代。

3.2 九个变异算子 / 五大类

作者强调用多样算子的理由:让 LLM 探索一个大的"语言化自我提问的认知方法"空间,不断重构问题的框架(reframing)调取用自然语言表达的心智模型。这呼应"顿悟学习"研究——多样的"表征重描述(representational re-description)"是解决问题的关键。每次复制只均匀随机挑一个算子

Figure 2: 四种自指强度递增的变异变体

Figure 2 逐面板解读(这张图把"自指"的层级画得极清楚): - (a) DirectP → LLM → P'。LLM 直接生成 P 的变体,无 mutation-prompt(对应 Meyerson et al. 的"语言模型交叉")。自指度最低。 - (b) Mutation-Prompt GuidedM 也进 LLM,{M, P} → LLM → P'。用一个显式的 mutation-prompt 引导变异方向。虚线箭头表示 P' 反过来会成为下一轮的 P。 - (c) Hyper Mutation两个 LLM 调用叠起来——上层 {H, M} → LLM → M'(进化 mutation-prompt),下层 {M, P} → LLM → P'从这里开始系统变成"自指":它在改进"改进方式"。 - (d) Promptbreeder(完整):在 (c) 基础上,最左边多了初始化通路——从思维风格集 T~𝒯、mutation-prompt 集 M~ℳ、问题域描述 D 出发生成初始种群(虚线连到 M)。这是完整系统,兼顾"自指进化"与"多样化初始化"。

四个面板由左到右,自指的因果结构越来越复杂——PB 的设计哲学就是"通路越丰富,LLM 与自身交互的自指性越强"(附录 F 详述见下)。

下面把九个算子按五类讲清(附GSM8K 上实测有效率,来自 Table 8):

[!NOTE] 五大类九算子 + 有效率(Table 8:产生"比父代更优"后代的比例,GSM8K)

类别 算子 一句话机制 有效率
① Direct 直接变异 Zero-order Prompt Gen 问题描述 D + "A list of 100 hints:",取第一条 hint 当新 P——不依赖任何父代,从 D 重新生成 (见 Direct 12%)
First-order Prompt Gen M + P → LLM → P'——标准无性变异,遗传算法的核心 12%
② EDA 分布估计变异 EDA Mutation 整个种群(BERT 相似度<0.95 过滤去重、随机排序)列给 LLM,让它续写新提示 10.7%
EDA Rank & Index Mutation 同上但按 fitness 升序排列,并"谎称是降序"以对治近因偏置 12.7%
Lineage Based Mutation 把该单元历史上的精英链(时间序、不去重)列出,标"ASCENDING ORDER OF QUALITY"让 LLM 续写 26%
③ Hyper 超变异(自指) Zero-order Hyper-Mutation D + 随机思维风格 → LLM → 新 M(与初始化同法) 42%
First-order Hyper-Mutation "Please summarize and improve the following instruction:" + M → M',立刻用它变异 P 一并评估 23%
④ Lamarckian 拉马克变异 Working Out → Task-Prompt 正确的解题过程(表现型)逆向工程回一个 task-prompt(基因型) 6.3%
⑤ Crossover & Shuffle Prompt Crossover 变异后 10% 概率把 P 换成种群中按 fitness 正比选中的另一个 P
Context Shuffling 进化 few-shot 上下文(只放正确解题过程),满了就按逆长度概率重采样

几个算子值得单独讲透:

[!TIP] 什么是 EDA(Estimation of Distribution Algorithm)?为什么 EDA 变异要"不给 fitness、还谎报排序"? EDA(分布估计算法)是一类进化算法:不直接对个体做交叉/变异,而是迭代地建立"有希望的解"的概率模型、再从该模型采样新解——常用整个种群做指引。PB 的"EDA Mutation"就是把 LLM 当成这个隐式概率模型:把当前种群列给它,让它"续写"出符合种群分布、但又新颖的提示。 - 为什么不给 fitness 值? 作者在预实验里发现 LLM 看不懂裸的 fitness 数字,反而会退化成"抄录列表里已有的条目"。所以 EDA Mutation 干脆不给分数,只靠 BERT 相似度过滤(>0.95 就剔除)来保证多样性。 - 为什么"谎称降序"? LLM 有近因偏置(recency effect / lost-in-the-middle)——倾向生成和列表末尾元素相似的内容。EDA Rank 把提示按 fitness 升序排(好的在末尾),本想利用这个偏置多生成高分附近的;但直接这么做会让新样本"太像那个最好的、丧失多样性"。于是作者故意告诉 LLM"这是降序"——升序的实际排列 vs "降序"的谎言之间的矛盾,反而提升了采样多样性。这是一个非常"黑客"的经验发现。

[!TIP] 什么是"拉马克变异(Lamarckian Mutation)"?(vs 达尔文式,讲透 + 举例) - 达尔文式(Darwinian):后天获得的性状不能遗传给下一代——变异只发生在基因型(这里 = task-prompt 文本)层面,表现型(解题过程)不回写基因。PB 的 First-order Prompt Gen 就是达尔文式。 - 拉马克式(Lamarckian)后天获得的性状可以回写进基因。PB 的"Working Out → Task-Prompt"算子就是:拿一段成功的解题过程(表现型),用 LLM 逆向工程出"能诱导这段过程的指令"(基因型)。它用的提示模板是:"I gave a friend an instruction and some advice. Here are the correct examples of his workings out: <正确解题过程>. The instruction was:" - 举例(附录 H 真实案例):给 LLM 看两道 AQuA 题的正确"Solve like a pro! 1. Read carefully... 2. Understand... 3. Choose wisely... 4. Double-check..."解题过程,LLM 逆推出的指令是"Break down the question and solve step-by-step. Here are some tips: 1. Read carefully... 2. Understand... 3. Choose wisely... 4. Double-check..."——几乎完美地从"怎么做对的"反推出"该给什么指令"。 - 为什么关键? 作者点明:当问题描述缺失、不足或误导时,这个算子至关重要——因为它不依赖问题描述,而是从"实际管用的行为"里提炼指令。这直接呼应 APE 的 instruction induction 和 STaR。

[!TIP] 什么是"超变异 / 演化可演化性(evolution of evolvability)"? 第三类算子(hyper-mutation)修改的是搜索/探索过程本身,而非直接的任务奖励获取过程。这在进化生物学里叫"演化可演化性(evolvability)"(Dawkins 2003;Pigliucci 2008)——不是进化出更好的性状,而是进化出"更容易进化出好性状"的能力。作者类比 Population Based Training (PBT):PBT 在线进化的是学习率等超参,而 PB 在线进化的是 mutation-prompt(它的"变异算子超参")。Table 8 显示 Zero-order Hyper-Mutation 是所有算子里最有效的(42%)——说明"改进变异方式"这件事的回报确实极高,直接印证了 PB 自指设计的价值。

3.3 组合式初始化(对治 APE 的多样性坍缩)

以 GSM8K 为例,问题描述 D = "Solve the math word problem, giving your answer as an arabic numeral"。因为要产生两个 task-prompt(沿用 Plan-and-Solve 的两段式),初始化时为每个 task-prompt 随机抽一个 mutation-prompt(如"Make a variant of the prompt.")+ 一个 thinking-style(如"Let's think step by step"),拼到 D 上喂给 LLM 续写。完整输入串形如:

"Make a variant of the prompt. Let's think step by step. INSTRUCTION: Solve the math word problem, giving your answer as an arabic numeral. INSTRUCTION MUTANT:"

控制串 INSTRUCTION / INSTRUCTION MUTANT 用来诱导恰当续写。抽到的 mutation-prompt 被加进这个单元、终生绑定。这个"thinking-style × mutation-prompt × D"的组合爆炸保证了初始种群的高多样性——而消融显示(见 §4)这一步的初始重描述是所有自指组件里收益最大的

[!TIP] 什么是"thinking-styles(思维风格)"? 一组通用认知启发式的文字描述——不是针对某个任务,而是人类解决问题时的元策略,如"Let's think step by step"、"How would a expert approach this?"、"Break the problem into sub-parts"等(完整集见附录 D,约 30 条来自认知科学)。它们的作用是在初始化和 zero-order hyper-mutation 时,给种群注入多样的"思考角度",让不同 task-prompt 天生带着不同的认知框架。这是 PB "多样化表征重描述"哲学的具体载体。

3.4 附录 F:PB 到底"自指"在哪?(六条因果通路)

附录 F 把"为什么 PB 是自指的"讲得最系统——列出六条"某部分(如提示)依赖自身状态地因果影响/改进自身"的通路:

# 通路 阶段
(i) 初始 task-prompt 是 LLM 参数的函数 初始化
(ii) 初始 mutation-prompt 是 LLM 参数的函数 初始化
(iii) 子 task-prompt 是"初始提示 + 初始 mutation-prompt + LLM 参数"的函数 Direct / EDA 变异
(iv) 子 mutation-prompt 是"初始 mutation-prompt + LLM 参数"的函数 Hyper Mutation(自指关键)
(v) 解题过程是"提示 + LLM 参数"的函数 推理
(vi) 子 task-prompt 可以是"解题过程 + LLM 参数"的函数 Lamarckian 变异

[!NOTE] 附录 F 的核心洞见与坦诚:LLM 本身已编码海量问题知识,PB 是"通过多样的因果过程把这些知识抽取出来"的机制——提示影响解题过程,解题过程又经拉马克变异回头影响提示,形成闭环。通路越丰富,自指性越强。 但作者也诚实指出两个边界:①这种递归提示若不加约束会发散(derailment)或陷入吸引子(高采样温度有助逃逸);②PB 有一处关键地不自指:它能发明"生成变异的新方式",却不能发明"评估变异的新方式"——始终只用外部指定的 fitness 函数。这一点后来被 [[ref09_meta-harness]]/[[ref17_self-harness]] 用"执行轨迹/verifier"部分回应,但"评估函数自进化"至今仍是开放难题。


4 实验:不动参数就超过手工 SOTA

设置:种群 50、进化 20–30 代。数据集覆盖算术推理(GSM8K、SVAMP、MultiArith、AddSub、AQuA-RAT、SingleEq)、常识推理(CSQA、SQA/StrategyQA)、指令归纳(APE 的 Instruction Induction 任务)、仇恨言论分类(ETHOS)。底座主要是 PaLM 2-L

4.1 主结果(Table 1)

[!NOTE] Table 1|PB vs SOTA 提示策略(PaLM 2-L 底座,节选)

方法 底座 MultiArith* SingleEq* SVAMP* SQA CSQA AQuA-RAT GSM8K
Zero-shot 类
PS+ PaLM 2-L 92.5 94.7 86.3 50.1 73.3 39.4 60.5
APE PaLM 2-L 95.8 82.2 73.0 38.4 67.3 45.7 77.9
OPRO PaLM 2-L 80.2
PB (ours) PaLM 2-L 99.7 96.4 90.2 71.8 85.4 62.2 83.9
Few-shot 类
PB (ours) PaLM 2-L 100.0 98.9 93.7 80.2 85.9 64.6 83.5

逐项讲透:PB 在几乎所有数据集上 zero-shot 就超过最强基线,且 few-shot(把发现的解题过程作为示例)进一步提升。最刺眼的对比:SQA 从 PS+ 的 50.1 → PB 的 71.8(+21.7),AQuA-RAT 从 45.7 → 62.2(+16.5)——这些是提示措辞影响巨大的难任务。GSM8K 上 PB 的 83.9% 超过同期 OPRO 的 80.2%,而用的却是反直觉的 "SOLUTION"

[!IMPORTANT] 最反直觉的发现:最优 GSM8K zero-shot 提示是单词 "SOLUTION" OPRO 精心进化出"Take a deep breath and work on this problem step-by-step"(80.2%),而 PB 进化出的最优 GSM8K zero-shot 提示(Table 6)竟只是 Prompt 1: "SOLUTION"(83.9%)。附录 Table 6 里还有更荒诞的:AddSub 的 Prompt 2: "You know what's cool? A million dollars."、SVAMP 的 "visualise solve number"这强有力地印证了 LLM 对提示的极端敏感、以及"人类直觉根本猜不到什么提示管用、必须自动搜索"——一个语义上近乎无意义的短语,可能恰好激活了模型内部某条有利的计算路径。

4.2 一个典型进化run(Figure 3)

Figure 3: word_in_context 任务的典型进化run

Figure 3 逐元素解读(APE 指令归纳里的 word-in-context 任务): - 横轴 = 评估次数(Evaluations,到 ~2000),纵轴 = fitness(0–100)。 - 蓝点:每次训练集评估的散点——布满整个下方区域,说明种群里始终有大量中低分个体(多样性没坍缩)。 - 红色阶梯线精英(best-so-far)fitness——从 ~0 起步,呈清晰的阶梯式上升,越过 20 → 50 → 65 → 80+,关键是它全程持续爬升、没有停滞——这正是对 APE"三轮后收益递减"的直接反驳。 - 绿色虚线:若干谱系(lineage)轨迹——不同世系的 fitness 随时间的走向,有的上升有的下降,展示了种群里的多世系竞争与分化。 - 红色密集带(中部斜向上):可能是当前种群主体的 fitness 随评估推进的整体上移趋势。

一句话:这张图证明 PB 是一个真正开放式、不饱和的搜索过程。

4.3 ETHOS 仇恨言论分类:复杂领域自适应

PB 在 ETHOS 上进化出两个顺序应用的、相当长的提示(附录 J.1),得分 89%,远超手工提示"Determine whether a text contains hate speech"的 80%。进化出的 Prompt 1 细致列出了"什么算仇恨言论"的四条判据(贬损/去人性化词汇、负面泛化、煽动仇恨/暴力、表达灭绝/驱逐意愿),Prompt 2 则给出结构化流程(识别目标群体 → 识别有害言论 → 评估语境,并提醒"幽默/讽刺可能不算")。这说明 PB 不只是找"魔法短语",也能为复杂任务进化出详尽的、可解释的领域知识型提示

4.4 消融:哪些自指组件重要?(Figure 4)

Figure 4: 逐一消融自指算子的影响(热图)

Figure 4 逐元素解读(这是全文最重要的诊断图,务必看懂符号约定): - 纵轴 = 8 个数据集(ADDSUB、AQUA_DEV、CS_STRATEGY_QA、GSM、MULTIARITH、SINGLEEQ、STRATEGY_QA、SVAMP);横轴 = 4 种消融(Hyper=去掉 mutation-prompt 变异 / Lamarck=去掉"上下文→task-prompt" / SR task-prompt=去掉思维风格引导的初始化 / SR mut-prompt=去掉从列表随机选 mutation-prompt)。 - 颜色/数值约定(关键,容易读反):数值 = "消融版 fitness 高于完整版基线的评估比例"的某种带符号度量接近 −100%(蓝绿色)= 移除该操作后 fitness **变低 = 该操作有益;接近 +100%(橙红色)= 移除后 fitness **变高 = 该操作有害;0% = 无影响。 - 读图结论整张图绝大多数格子是蓝绿色负值(如 SVAMP 的 SR task-prompt −74、STRATEGY_QA 的 SR task-prompt −80、MultiArith 的 Hyper −62)——说明移除任何一个自指算子几乎在所有情况下都有害,四个组件全都在贡献正收益。 - 唯一的例外(橙红色)GSM 行、SR mut-prompt 列 = +41(还有几个接近 0 的:AQUA_DEV SR mut-prompt +1、MULTIARITH SR mut-prompt +9)。这正是正文说的"我们只发现一个算子对一个特定任务有害:初始化时从 mutation-prompt 列表随机抽取,会伤害 GSM8K 性能"。 - 最大正贡献:正文点明 Random Initial Prompts(= 思维风格引导的初始重描述,对应 SR task-prompt 列)在所有数据集上正收益最大——即"初始化时用 LLM 重描述 task-prompt"这一步最关键。

ETHOS 上的算子交互(附录 L):用欠定问题描述 "Solve the Problem"(而非明确的"判断是否含仇恨言论")时,PB 仍达 81.6%。此时移除拉马克"从上下文到提示"变异伤害最大(掉到 64.6%)——因为问题描述本身没用,只能靠"从正确解题过程反推指令"这条拉马克通路来获取领域信息,完美印证了 §3.2 的论断。

[!NOTE] Table 7|自指进化出的最优 mutation-prompt(GSM8K):得分 = 该 mutation-prompt 被应用时产生更优 task-prompt 的概率。 | mutation-prompt | 得分 | |---|:---:| | "Please summarise and improve the following instruction" | 24.13% | | "Simplify this instruction by breaking it up into separate sentences..." | 17.8% | | "As a really good teacher, explain the instruction, as if you are explaining it to a child" | 16.2% | | "100 hints" | 4.3% |

有趣的是最有效的 mutation-prompt 恰是那个 hyper-mutation-prompt "summarise and improve" 本身——即"精炼并改进"这个元指令,是进化出好 task-prompt 最可靠的杠杆。


5 结论与讨论


个人思考

⭐ 在本项目坐标系里:PB 是"harness 自我改进"谱系的祖先节点

Promptbreeder(2023.09)比本项目里的 [[ref09_meta-harness]]、[[ref17_self-harness]] 早了两年多,但它们共享完全相同的母题不改模型权重,只在"LLM 外层的文本/代码产物"空间里做自我改进,并借助"LLM 能当变异算子/提议者"这一能力。把三者放在一条时间线上,能看清这个领域的演化方向:

维度 Promptbreeder (ref18, 2023) Meta-Harness (ref09, 2026) Self-Harness (ref17, 2026)
改进对象 task-prompt + mutation-prompt 完整 harness 代码(检索/记忆/编排) 声明式 harness 面(DeepAgent 配置)
提议者是谁 LLM 自己(当变异算子) 更强的外部编程 Agent(Claude Code+Opus) 被评估模型自己
搜索算法 显式进化算法(二进制锦标赛 + 9 算子) 极简外环 + Agent 自主 grep 全历史 三阶段闭环(挖掘/提案/验证)
"元层"在哪 进化 mutation-prompt(自指核心) Agent 自己决定"看什么历史" 无显式元层,靠证据聚类
反馈信号 标量 fitness(100 题准确率) 原始执行轨迹(不压缩) verifier 结果 + 失败聚类
准入 锦标赛(胜者覆盖败者) Pareto 前沿 保守非回退回归门
载体空间 自然语言 代码 代码/配置

我的判断: 1. PB 的独特贡献是"元层自指"被显式纳入同一进化循环。ref09/ref17 其实弱化甚至去掉了这个元层——ref09 把"如何改进"外包给一个强 Agent 的自主判断,ref17 则用固定的三阶段协议。PB 那种"连变异算子本身都在进化"的纯粹自指结构,反而在后续工作里被工程实用主义替换掉了。这是个耐人寻味的取舍:纯自指优雅但不可控(会发散/陷吸引子),工程化的外环朴素但可靠。 2. PB 早已预言了 ref09/ref17 的关键短板并诚实承认:附录 F 明说 PB"能发明生成变异的新方式,却不能发明评估的新方式,只用外部 fitness"。ref09 用"原始轨迹"、ref17 用"verifier 聚类"部分缓解了"fitness 太粗糙"的问题——它们本质上是在给 PB 那个"不能压缩的反馈"缺口打补丁。可以说 ref09 的核心论点"不要压缩反馈",正是对 PB "只用标量 fitness"的直接批判与超越。 3. 反直觉提示("SOLUTION")是"代码空间可检视"论点的反面教材。ref09 强调"代码空间的过拟合肉眼可查";而 PB 在自然语言空间搜出的 "SOLUTION"/"A million dollars" 恰恰是不可解释的——你无法从提示文本判断它为何管用。这从反面支持了 ref09"用代码而非自由文本作为搜索空间 = 免费正则化 + 可审计"的主张。

方法论启示(可迁移)

  1. "进化变异算子本身"是一个可推广的自指模式。任何"用 LLM 迭代改进某产物"的系统,都可以问:能不能把"如何改进"也变成被改进的对象?PB 证明这在语言层可行且有效(hyper-mutation 有效率 42%,最高)。
  2. 多样性维持是自动优化不坍缩的命门。PB 的三重保险(BERT 相似度过滤、9 个多样算子、thinking-style 组合初始化)值得任何"迭代优化易坍缩"的场景借鉴——尤其"故意谎报排序对治 LLM 近因偏置"这种黑客技巧。
  3. 拉马克变异 = 当"任务描述不可靠"时的救命通路。ETHOS 欠定实验证明:当你说不清任务是什么时,"从成功案例反推指令"(instruction induction)比"改写问题描述"更有效。这对冷启动场景极有价值。

在我的工作中能怎么用

开放问题 / 疑问