auto_prompt:promptbreeder
1. PROMPTBREEDER 是什么(给初学者的直观解释)
PROMPTBREEDER 是一种自动“进化”提示词(prompt)的算法框架。它不依赖人手写“思维链(CoT)”“Plan-and-Solve”等固定策略,而是让大模型自己在一个训练集上反复试错,逐代优化出更适合某个任务/领域的提示词。
它的核心点有两个层次:
- 任务提示词(task-prompts):直接用来做任务的提示词(例如:算数题、常识推理、仇恨言论分类)。
- 变异提示词(mutation-prompts):用来指导模型“如何改写/变异任务提示词”的提示词。
PROMPTBREEDER 的关键创新是:变异提示词也会被进化(self-referential,自指式自我改进)。也就是说,它不仅在找更好的“答案提示词”,还在找更好的“改提示词的方法”。
你可以把它理解为一个“提示词版的遗传算法/进化算法”:
- 初始化一批任务提示词(种群)
- 用“变异提示词”指导 LLM 去改写这些任务提示词,产生新一代
- 在训练集上评估每个提示词的效果(fitness/适应度)
- 选择表现好的提示词保留
- 重复多代;同时也让 LLM 逐步改进“变异提示词”(让变异更有效)
最终得到的是:针对你这个任务定制出来的一套 prompt,往往会超过人手设计的通用策略(论文声称在算术与常识推理、以及仇恨言论分类上优于 CoT、Plan-and-Solve 等)。
2. 它解决了什么问题?为什么比手写策略强?
手写策略的局限
- “CoT/Plan-and-Solve”是通用套路,不一定适配你的数据分布、标签边界、业务规则。
- 人类通常只能尝试少量版本;而 prompt 空间很大,靠直觉搜索容易“局部最优”。
PROMPTBREEDER 的优势
- 自动搜索:系统化探索大量 prompt 变体。
- 有反馈闭环:用训练集打分当作“适应度”,使优化有方向。
- 自我改进变异器:不仅优化提示词,还优化“如何改提示词”的提示词,提升搜索效率与质量。
- 领域自适应:同样框架换任务、换数据即可进化出不同风格的 prompt。
3. 适合与不适合的应用场景
适合的场景(推荐)
- 有明确可评估指标的任务
- 分类/抽取/匹配/判断(准确率、F1)
- 结构化生成(JSON 可解析率 + 字段准确率)
- 数学/逻辑题(正确率)
- 你有一批“代表真实需求”的训练样本
- 哪怕不多(几十到几百),也能做小规模进化
- 现成通用 prompt 效果不稳定
- 例如同样 CoT,有些题很好,有些题反而误导
- 需要针对特定领域、合规、语气、边界条件优化
- 客服拒答策略、医疗合规表达、风控审核等
- 你愿意投入算力/调用次数做离线优化
- PROMPTBREEDER 本质是“用更多调用换更好的 prompt”
不适合的场景(慎用/不划算)
- 没有可量化评价函数
- 比如纯创意写作“好不好”很主观,除非你能定义打分规则或用人评/偏好模型
- 训练集不代表线上分布
- 进化会过拟合训练集,线上反而变差
- 强依赖外部工具或检索的任务
- 这类更适合优化“工具调用策略/函数调用流程”,而不只是文本 prompt
- 成本/延迟极敏感的在线场景
- 进化过程是离线的;如果你想在线实时进化,成本会很高且难控
- 高风险领域且不允许探索性输出
- 进化期可能产生不合规变体;需要严格的安全过滤与沙箱
4. PROMPTBREEDER 的典型工程流程(落地版)
下面是一个“你可以照着实现”的简化版本(不依赖论文细节也能跑):
- 准备训练集:
(输入x, 标准答案y)若是分类则 y 为标签 - 初始化任务提示词种群:10~50 个(人写几个 + LLM生成几个)
- 准备初始变异提示词:例如“请改写为更能提升准确率的指令、加入约束、加入示例…”
- 变异:对每个任务 prompt,用 mutation-prompt 让 LLM 生成若干变体
- 评估适应度:把同一训练集喂给每个 prompt,计算指标(accuracy/F1/解析率/鲁棒性等)
- 选择与保留:保留 top-k,并保留多样性(防止全都长得一样)
- 进化 mutation-prompts:同样评估“这个 mutation-prompt 产生的后代平均有多好”,保留更强的 mutation-prompts
- 重复多代:直到指标收敛或达到预算上限
- 验证集/线上 A/B:防止过拟合
5. 至少 3 个实际例子:提示词怎么写(中文)
下面我给出 3组“任务提示词 + 变异提示词” 的写法示例。你可以把它们直接用于搭建自己的 Promptbreeder。
说明:PROMPTBREEDER 不要求你一次写出“最强 prompt”,而是要写出“可进化的起点”,并通过评估迭代找到更强版本。
例子1:算术/逻辑推理(有标准答案,适合进化)
**任务:**两位数加减乘除应用题(训练集有题目与答案)
A) 初始任务提示词(task-prompt v0)
你是一名严谨的数学解题助手。
请根据题目计算最终答案。
要求:
1)先列出关键已知条件;
2)写出计算过程;
3)最后只输出“答案:xxx”。
题目:{题目文本}
B) 初始变异提示词(mutation-prompt v0)
你是“提示词改写器”。目标是让上面的数学解题提示词在训练集上的正确率更高。
请在不改变任务含义的前提下,改写该提示词,允许:
- 增加更明确的步骤约束
- 增加自检步骤(例如代回验证、单位检查)
- 限制输出格式以减少跑题
输出:仅输出改写后的完整提示词,不要解释。
C) 可能进化出来的后代方向(你评估后选择)
- 增加“先估算再精算、用第二种方法复核”
- 明确“遇到多解/信息不足时输出‘信息不足’并说明缺失条件”
- 限制中间推导的格式,减少胡乱扩展
例子2:仇恨言论分类(论文提到的典型任务)
**任务:**输入一段文本,输出标签:仇恨/非仇恨,并可要求给出证据片段(训练集为人工标注)
A) 初始任务提示词(task-prompt v0)
你是内容安全审核员。请判断下面文本是否属于“仇恨言论”。
定义:仇恨言论指针对特定群体(如种族、民族、国籍、宗教、性别、性取向等)的贬损、侮辱、威胁、鼓动伤害或歧视。
输出要求:
- 只输出一个标签:仇恨 / 非仇恨
文本:{用户文本}
B) 更适合进化的版本(加入可评估结构)
为了让评估更稳定,你可以要求输出结构化字段(便于自动打分/分析):
你是内容安全审核员。
任务:判断文本是否为仇恨言论。
输出严格为 JSON:
{"标签":"仇恨/非仇恨","指向群体": "...或null", "证据片段": "...或null"}
规则:
1)只有当文本明确针对某类群体并进行贬损/威胁/歧视时才判“仇恨”;
2)讨论、引用、反讽、新闻转述若不表达支持仇恨立场,倾向“非仇恨”;
3)不确定时输出“非仇恨”,并将证据片段置为 null。
文本:{用户文本}
C) 变异提示词(mutation-prompt,用于提升分类边界)
你是提示词进化系统中的“变异器”。请改写上面的仇恨言论分类提示词,使其:
1)更好地区分“辱骂个人”与“攻击群体”;
2)更好处理引用/转述/反讽;
3)输出 JSON 字段不变;
4)避免引入新标签。
只输出改写后的提示词全文,不要解释。
为什么这个例子适合 PROMPTBREEDER:
- 有明确标签可算 accuracy/F1
- 边界案例多,人写规则容易漏,进化能探索更稳的判别指令
例子3:信息抽取(结构化输出 + 可自动评分)
**任务:**从融资新闻中抽取字段(公司名、轮次、金额、投资方、时间),训练集有标注 JSON
A) 初始任务提示词(task-prompt v0)
你是信息抽取引擎。请从文本中抽取融资信息。
只输出合法 JSON,字段如下:
{ "公司名": "", "融资轮次": "", "融资金额": "", "投资方": [], "时间": "" }
约束:
1)文本中没有的信息填 null;
2)不要推测、不要补全;
3)投资方若有多个请列全。
文本:{新闻文本}
B) 变异提示词(mutation-prompt,专门提升“可解析率+准确率”)
你是“抽取提示词”的改写器。目标:让抽取结果更稳定、JSON 更少出错、字段更准确。
改写策略可以包括:
- 明确金额保留原文(不换算)
- 强制禁止输出 Markdown
- 增加对常见歧义的规则(如“领投/跟投”的投资方提取)
- 增加自检:输出前检查是否为严格 JSON
输出:仅输出改写后的提示词全文。
C) 你可以加入 fitness(适应度)指标
- JSON 解析成功率
- 字段级准确率(exact match 或 token-level F1)
- 对缺失字段是否正确填 null(减少“编造”)
6. 初学者实现 PROMPTBREEDER 时最关键的 5 个要点
- 适应度函数要靠谱:别只看“看起来更好”,要能自动算分(准确率/F1/解析率/一致性)
- 必须留验证集:否则很容易“进化到过拟合训练集”
- 控制多样性:只选 top-k 可能导致提示词趋同,搜索陷入局部最优(可加入多样性惩罚或随机保留)
- 变异要可控:让 mutation-prompt 约束“不改变输出字段/不改变标签集合”,否则评估混乱
- 安全沙箱:尤其是仇恨/成人/暴力等任务,变异过程中可能生成不合规措辞,需要过滤与审计
如果你愿意,我可以再补两块你落地会最需要的内容:
1)一个更具体的“伪代码/模块设计”(种群、评估器、选择器、变异器、缓存、并发)
2)如何设计 mutation-prompt 的“家族”(不同类型变异:加规则、加示例、加自检、改格式、压缩长度)来提升进化效率。