反向提示:将良好的大语言模型对话转化为可重复使用的提示语
了解如何从成功的多轮大语言模型对话中提取一次性提示词,以及当只有输出结果时如何通过提示词反转来恢复原始提示词。
最终能用的提示语很少是最初设计的那个:它是在多轮修改后逐渐形成的,而当你关闭聊天窗口时又会消失。反向提示则颠覆了常规的工作流程——你先得到自己满意的输出,再让模型重构出能够稳定生成该输出的指令。你将学习如何从对话中提取这些指令,如何仅通过输出结果反推出近似提示语,以及这两种方法在何种情况下不再可靠。
为何有效的提示语常常会丢失
反向提示依赖于当前最先进的模型具备反思自身上下文的能力。它既可以在聊天窗口中手动操作,也可以作为流程步骤被脚本化实现,在需要处理大量且容易遗忘的需求的代码生成和智能体工作流中效果最为显著。
典型的优化循环
想象一下,有位开发者在为 Python 服务添加用户注册接口。其目标是生成符合生产环境标准的 FastAPI 代码:包含输入验证、结构化的错误响应、日志记录以及测试功能。最初的请求相当模糊,仅类似“为用户注册编写一个 FastAPI 接口”,因此得到的初步回答也自然十分简略。于是开发者开始逐步细化需求:
- 要求使用 Pydantic 模型来验证电子邮件地址并确保密码强度。
- 要求实现合适的 HTTP 异常处理机制并加入日志记录功能。
- 要求所有错误都采用统一且结构一致的 JSON 格式。
- 要求提供 pytest 测试用例,覆盖正常流程及验证失败的情况。
几轮迭代之后,代码达到团队的标准,被复制到仓库中,而相关的讨论以及所有影响其形成的约束条件和修改建议都被遗忘了。下一个接口又会从一句模糊的简短描述重新开始。
从对话中提取一次性提示词
基于对话的逆向提示方法通过多发送一条消息来解决这个问题。一旦输出结果正确,就再添加一条元指令,要求模型回顾整个对话过程,并将其压缩成一个独立的提示词。下面的指令详细说明了该提示词应包含的内容:角色设定、累积的上下文信息、所有约定的约束条件、输出格式、质量标准以及示例。注意最后两行,它们要求仅提供提示词本身,不附带任何注释,这样得到的结果就可以直接粘贴到新的会话中。
Now that we have reached this final output, reverse-engineer
the entire conversation. Look at every correction, added constraint,
tone adjustment, format decision, and the result.
Produce one complete, standalone prompt that would generate
this exact output quality in a single shot with no follow-ups.
The prompt must explicitly state:
- Role and expertise level
- All background context and requirements established
- Every constraint and rule settled on
- Output format and structure
- Tone, style, and quality criteria
- Any examples or reference patterns used
Output only the prompt itself, ready to copy into a fresh session.
No explanation.
返回的结果会明确列出对话中所有隐含的内容。使用该结果的新的会话应能在首次尝试时就产生相似的输出;如果仍需进一步处理,说明有内容被遗漏了。
应将此结果视为工程资产:
- 将其与生成的代码一起提交到仓库中,以便对变更进行审核和版本控制。
- 与团队成员共享,确保无论由谁运行都能遵循相同的标准。
- 用参数(实体名称、字段、错误代码)替换与特定任务相关的部分,以便在类似的接口上重复使用。
仅通过输出恢复提示词
对话式方法只有在保留历史记录时才有效。一种更为通用的技术称为提示逆向工程或反向提示工程(RPE),它仅通过生成的文本来重构出接近原始提示的内容。
正式表述为:某个隐藏的提示X产生了输出O。你希望找到一个提示P,使其产生的输出N在语义和功能上与O高度相似。你只能访问黑盒系统,即无法获取逻辑值或训练数据,只能发送提示并读取响应。
采样候选项并对其进行验证
直接的方法分为三个步骤:
- 将输出结果O输入模型,让其推断出背后的提示词。单次猜测容易过拟合或编造根本不存在的约束,因此需使用不同的温度参数和采样设置多次进行测试,从而收集一批候选提示词。
- 将每条候选提示词输入模型,使用ROUGE-1(基于共享单字词的F1分数)等重叠度指标比较其生成结果与O的差异。
- 保留得分最高的候选提示词。
验证步骤正是让这种方法超越单纯猜测的关键:通过实际检测哪条候选提示词能再现目标内容,而非仅依赖模型的判断。
像遗传算法一样优化候选项
你也可以将这些候选提示词视为一群个体并对其进行进化优化。每一代都会:
- 将模型的适应度定义为候选模型生成的输出与原始输出之间的平均相似度。
- 保留表现最佳的模型。
- 对表现较差的模型进行变异处理,方式为向模型提供当前提示以及观察到的差异,让模型重新表述内容、添加或删除约束条件,或是调整结构。
- 重复上述过程,直到模型得分不再提升或预算耗尽为止。
这种方法无需训练。已有研究显示,仅通过五个样本输出就能生成连贯且可重复使用的提示语;而且闭源模型也不构成障碍,因为它只需要一个成本较低的相似度计算函数即可。
需考虑的局限性
重建结果始终是近似值。由于需要体现原本由上下文承载的细微差别,恢复得到的提示语往往比生成原始输出的内容更长、更具体。
还有两个需要注意的事项:
- 通过逆向工程得到的提示词会保留其来源模型的特性。为某个模型优化的提示词可能在用于另一个模型时需要调整,因此更换模型后需重新进行验证。
- ROUGE-1这类词汇度量标准侧重于共享词的数量,而非正确性。对于代码或结构化输出,除了相似度分数外,还应考虑添加对您而言重要的检查项,比如生成的测试是否通过或JSON格式是否有效。
编程智能体所处的位置
像 OpenAI Codex 和 Claude Code 这样的智能编码工具专为正向任务优化,具备强大的上下文处理能力、较长的智能体循环机制以及大量的提示词缓存功能。不过,这两种工具都可以在编写代码之前先向你提出多项选择题以获取更多信息,从而尽早明确需求。与智能体不断迭代直到得到理想结果后,可从该会话中提取一个通用提示词以便一次性重复使用。如需了解整理所提取提示词的补充方法,请参阅我们关于使用七层框架构建可用于实际生产的 LLM 提示词的指南。
核心要点
- 长时间提示词交互的真正价值在于其中积累的各种约束条件;在结束对话前务必将这些约束记录下来。
相关阅读
- 安全更换LLM模型:人工标注、逐步指标与努力度设置 —— 如何在不引发虚假退化问题的情况下,将多步骤的LLM流程迁移到更新版本的模型上:包括人工真实值、逐步指标、过时的提示词以及推理所需努力度。
- Claude Code指令应放在何处:CLAUDE.md、路径规则还是钩子 — 了解为何Claude Code将CLAUDE.md视为上下文,如何对其进行精简,如何按路径限定规则,如何将必执行步骤移至钩子中,以及如何验证实际加载了什么内容。
- LLM应用的评估工具:数据集、评分机制与回归检测 — 了解什么是LLM评估工具,它的四个核心组成部分,以及它如何在内容呈现给用户之前检测提示词导致的性能下降,并公平地比较不同模型。
- 用 Go 实现自托管的视觉 LLM OCR:栅格化、提示词设计、解析 — 讲解如何通过 Go 工作进程,结合 Ollama、pdftoppm、严格的提示词规范、备用解析机制以及 Redis Streams 的消费者组,将医疗 PDF 转换为结构化的 JSON。
- 利用 Claude Artifacts 构建个人提示词优化工具与生成器 — 介绍如何将一次 Claude 对话转化为可重复使用的提示词工具,从而优化效果不佳的提示词,并将初步的想法扩展为基础版、进阶版和专家级版本。