auto_prompt:Prompt Engineering a Prompt Engineer
PE2(Prompt engineering a prompt engineer)是什么?
PE2 是一种“让大模型自动做提示词工程(Automatic Prompt Engineering, APE)”的方法,但它强调:要想让模型真的像“提示词工程师”一样工作,元提示词(meta-prompt)必须提供足够的推理脚手架,否则模型只会做浅层改写(换同义词、加一句“请仔细思考”),难以针对错误做诊断与修复。
PE2 的核心贡献:在 meta-prompt 里注入 3 个关键组件,让 LLM 能执行更复杂、更像工程师的改 prompt 流程:
-
详细描述(Detailed descriptions)
把任务目标、评价标准、失败代价、边界条件、输出格式等写得更细。
目的:减少歧义,让模型知道“什么才算更好”。 -
上下文规格(Context specification)
明确提供模型进行 prompt 诊断所需的上下文,例如:- 任务定义/标签定义
- 典型错误与反例
- 训练样例、错误样例(含模型原输出)
- 约束(合规、风格、不能编造)
目的:让模型不是“盲改”,而是“基于证据改”。
-
分步推理模板(Step-by-step reasoning template)
给模型一个“像提示词工程师那样思考”的步骤清单,例如:- 先分析错误模式(错在概念?边界?格式?遗漏?)
- 提出假设(prompt 哪句话导致误解?缺了哪些约束?)
- 设计针对性修改(增加定义/规则/例子/输出格式)
- 预测会改善哪些样例、可能带来哪些副作用
- 产出新 prompt,并用小样例自测
目的:把“复杂推理过程”结构化,提升自动改 prompt 的质量与稳定性。
论文结论(你给的摘要中):PE2 在 MultiArith、GSM8K 等上找到的 prompt 可超过简单的 “let’s think step by step”,还能做非常针对性的 prompt 修复与诱导多步计划。
PE2 在工程里到底长什么样?(角色关系讲清楚)
PE2 的工作对象不是“任务输入”,而是“当前的任务提示词(prompt)”。你可以把它理解为两层:
- 任务层 prompt:用来解题/分类/抽取的提示词
- 元提示词 meta-prompt(PE2):用来“审阅并改写任务层 prompt”的提示词
因此 PE2 属于一种“prompt 生成 prompt”“prompt 优化 prompt”的方法。
适合的应用场景
-
你已经有一个能跑但不稳定的 prompt,需要系统性迭代
- 例如抽取字段偶尔漏、分类边界不稳、推理题经常算错最后一步。
-
你有“错误案例 + 期望输出”
- PE2 依赖上下文与错误来诊断;有失败样例时提升最明显。
-
任务目标能被清晰描述(或有自动评价指标)
- 例如准确率、解析率、格式一致性、事实性约束等。
-
需要“精确编辑”而不是推倒重写
- 比如在合规场景里,你不希望 prompt 风格大改,只想修正某条规则/补一个边界定义。
-
多步骤复杂任务
- 需要“计划—执行—检查”的流程(例如:写方案、审合同、生成测试用例),PE2 的分步模板尤其有用。
不适合的应用场景(或要加额外机制)
-
缺少足够上下文/样例
- 只有一句“帮我优化这个 prompt”,没数据没错误案例,PE2 的优势发挥不出来。
-
评价标准高度主观且你无法提供偏好信号
- 如纯审美写作。除非你提供打分规则、对比偏好(A/B)、或人工反馈闭环。
-
你希望一次生成“最终最优”
- PE2 更像“工程化迭代框架”,通常要多轮:收集错误 → 修 prompt → 再测。
-
极端敏感的安全任务,但你没有防护
- 因为 PE2 会分析失败案例、尝试改写规则,若数据含有敏感内容,需要脱敏、过滤、审计。
PE2 的“元提示词”怎么写?(一个可复用骨架)
下面给一个通用的 PE2 风格 meta-prompt 模板。你把 {...} 替换成你的内容即可:
你是一名资深提示词工程师(Prompt Engineer)。你的目标是优化“任务提示词”,使模型在给定任务上表现更好。
【详细描述】任务定义与目标
- 任务:{任务是什么}
- 成功标准:{准确率/格式/合规/风格等}
- 失败模式(已知):{常见错误}
- 硬约束:{必须/禁止/输出格式}
【上下文规格】可用材料
1)当前任务提示词:
{贴现有 prompt}
2)训练样例(输入→期望输出):
{若干条}
3)失败样例(输入→模型输出→期望输出):
{若干条}【分步推理模板】请按以下步骤工作
Step 1:总结当前 prompt 的意图与潜在歧义点
Step 2:从失败样例中归纳 2-5 个可重复的错误模式
Step 3:为每个错误模式提出“prompt 层面的原因假设”
Step 4:提出修改策略(增加定义/规则/反例/输出约束/自检步骤等)
Step 5:给出“改写后的新 prompt”(保持{必须保持的风格/格式})
Step 6:用你提供的样例进行快速自测(逐条预测输出应如何)并指出仍可能失败的边界【输出要求】
- 输出一:错误模式列表(要引用对应失败样例)
- 输出二:修改点清单(每条修改对应解决哪个错误模式)
- 输出三:最终新 prompt(可直接复制使用)
这就是 PE2 的精髓:不仅让模型改 prompt,还让它“解释为什么这么改、改哪儿、针对哪个错”。
至少 3 个实际例子(中文,展示 PE2 写法)
下面每个例子我都给:(A) 当前 prompt(有缺陷)→ (B) 失败样例 → (C) PE2 meta-prompt(如何让模型去修)→ (D) 可能产出的新 prompt 方向
(D 部分我给一个“合理的修复后 prompt 示例”,帮助你看清落地形态。)
例子1:数学应用题(MultiArith/GSM8K 类)——修正“漏步骤/算错/单位错”
A) 当前任务 prompt(缺陷:过于泛)
请计算下面题目的答案,并给出计算过程。题目:{题目}
B) 失败样例
- 输入:小明买了3盒彩笔,每盒12支,又买了2支散装,一共多少支?
模型输出:答案:36
期望:38(漏加2) - 输入:一根绳子长2.5米,剪去0.8米,还剩多少米?
模型输出:答案:1.7厘米
期望:1.7米(单位错)
C) PE2 meta-prompt(让模型当 prompt 工程师来修)
你是一名资深提示词工程师,擅长提升数学应用题的正确率。
【详细描述】
- 任务:解小学数学应用题并输出最终答案
- 成功标准:答案数值正确;单位正确;不漏加/漏乘;输出格式稳定
- 硬约束:最终一行必须为“答案:{数值}{单位或空}”
【上下文规格】
1)当前任务提示词:
「请计算下面题目的答案,并给出计算过程。题目:{题目}」
2)失败样例:
- 样例1:{题目…} 模型输出:{…} 期望:{…}
- 样例2:{题目…} 模型输出:{…} 期望:{…}
【分步推理模板】
Step1 归纳错误模式(例如漏项、单位错)
Step2 推测 prompt 缺了哪些约束或检查
Step3 给出针对性修改(例如列式、单位一致性检查、代回验证)
Step4 输出一个改写后的任务提示词(可直接用于推理)【输出要求】
依次输出:错误模式列表、修改点、新任务提示词(完整可复制)。
D) 可能产出的新任务 prompt(示例)
你是严谨的数学解题助手。
任务:解决应用题,确保不漏项、单位一致。
解题步骤必须包含:
1)提取已知量与单位;
2)写出算式(明确每一项来源);
3)计算;
4)单位检查:题目单位是什么,答案单位必须一致;
5)代回/合理性检查:用一句话解释为什么结果合理。
输出格式:最后一行固定为“答案:xxx(单位)”。
题目:{题目}
例子2:仇恨言论分类——修正“把辱骂个人当仇恨/引用转述误判”
A) 当前任务 prompt(缺陷:定义粗糙,边界没说)
判断文本是否为仇恨言论,是输出“仇恨”,否输出“非仇恨”。
B) 失败样例
- 输入:你这个人真蠢(针对个人)
模型输出:仇恨
期望:非仇恨(这是人身攻击/辱骂,但不一定是仇恨言论) - 输入:新闻报道:有人在网上辱骂某族群……(转述)
模型输出:仇恨
期望:非仇恨(转述不等于支持)
C) PE2 meta-prompt
你是一名内容安全提示词工程师。请优化“仇恨言论分类”的任务提示词,使其减少误报。
【详细描述】
- 成功标准:区分“攻击个人”与“攻击群体”;正确处理引用/转述/批判仇恨的语境
- 输出必须为严格 JSON:{"标签":"仇恨/非仇恨","指向群体":null或字符串,"证据":null或原文片段}
- 不确定时默认“非仇恨”,证据为 null
【上下文规格】
当前提示词:{贴 A}
失败样例:{贴 B 两条,含模型输出与期望}【分步推理模板】
1)总结误报类型
2)为每类误报添加可执行规则(不是泛泛解释)
3)改写 prompt:加入定义、边界、例外情况与输出约束
4)自测:说明新 prompt 将如何判定失败样例输出:错误模式、修改点、新 prompt。
D) 新任务 prompt(示例)
你是内容安全审核员。判断文本是否为“仇恨言论”。
定义:仇恨言论=针对特定群体(种族/民族/国籍/宗教/性别/性取向等)进行贬损、非人化、威胁、鼓动歧视或伤害。
边界规则:
- 仅辱骂某个具体个人、未指向群体 → 判“非仇恨”
- 引用/转述/新闻报道/批判仇恨言论,且文本立场不支持仇恨 → 判“非仇恨”
- 只有当文本明确“指向群体 + 负面攻击/鼓动”同时成立 → 判“仇恨”
输出严格为 JSON:{"标签":"仇恨/非仇恨","指向群体":..., "证据":...}
不确定时:{"标签":"非仇恨","指向群体":null,"证据":null}
文本:{文本}
例子3:信息抽取(融资新闻→JSON)——修正“编造字段/JSON不合法/字段混淆”
A) 当前任务 prompt(缺陷:缺少格式约束与缺失处理)
从新闻中抽取公司、轮次、金额、投资方、时间,输出JSON。
B) 失败样例
- 输入:某公司完成天使轮融资,由XX基金领投(未提金额)
模型输出:融资金额“数千万人民币”(编造)
期望:融资金额 null - 输入:文本含两个时间:成立时间与融资时间
模型把成立时间填到“时间”字段(字段混淆)
C) PE2 meta-prompt
你是提示词工程师,负责提升“融资新闻信息抽取”的字段准确率与 JSON 可解析率。
【详细描述】
- 目标:字段不编造;缺失填 null;时间字段指“融资发生时间”而非成立时间
- 输出必须是可解析 JSON,禁止 Markdown、禁止解释性文字
【上下文规格】
当前 prompt:{贴 A}
失败样例(含模型输出与期望):{贴 B}【分步推理模板】
1)归纳错误类型(编造、字段混淆、格式错误)
2)提出 prompt 层修复策略(缺失规则、字段定义、优先级)
3)生成改写后的任务 prompt(完整可复制)
4)自检清单:输出前检查 JSON 合法性与字段定义符合度输出:错误模式、修改点、新 prompt。
D) 新任务 prompt(示例)
你是信息抽取引擎。请从文本中抽取“融资事件”信息并输出严格 JSON。
字段定义:
- 公司名:发生融资的主体公司
- 融资轮次:如天使轮/A轮等(原文没有则为 null)
- 融资金额:必须来自原文;原文未给出则为 null(禁止猜测)
- 投资方:仅提取参与本次融资的机构/个人;多个用数组
- 时间:仅填写“本次融资发生/披露时间”;成立时间/产品发布时间不要填入
缺失处理:任何字段缺失→null;投资方缺失→[]
输出要求:
1)只能输出 JSON;不得输出 Markdown、注释或解释
2)输出前自检:JSON 必须可解析;字段名必须完全一致
输出格式:
{"公司名":..., "融资轮次":..., "融资金额":..., "投资方":[...], "时间":...}
文本:{新闻文本}
PE2 与 PROMPTBREEDER 的关系(你可能会关心)
- PROMPTBREEDER:更像“进化搜索”,靠多代迭代 + 适应度评估找最强 prompt;还能进化“变异提示词”。
- PE2:更像“把提示词工程师的思考流程写进 meta-prompt”,让 LLM 一次改得更有针对性,适用于“诊断—修复”的工程场景。
在实践里二者可以结合:
用 PE2 产生更高质量的“变异策略/变异提示词”,再交给 PROMPTBREEDER 做大规模进化搜索。
如果你把你的具体任务(例如:某个分类/抽取/问答)和 5-10 条失败样例贴出来,我可以按 PE2 的格式给你写一份可直接用的 meta-prompt,并给出第一轮“修复后的任务 prompt”。