首页 / 文章 / 反向提示:将良好的大语言模型对话转化为可重复使用的提示语

反向提示:将良好的大语言模型对话转化为可重复使用的提示语

了解如何从成功的多轮大语言模型对话中提取一次性提示词,以及当只有输出结果时如何通过提示词反转来恢复原始提示词。

1367 词

最终能用的提示语很少是最初设计的那个:它是在多轮修改后逐渐形成的,而当你关闭聊天窗口时又会消失。反向提示则颠覆了常规的工作流程——你先得到自己满意的输出,再让模型重构出能够稳定生成该输出的指令。你将学习如何从对话中提取这些指令,如何仅通过输出结果反推出近似提示语,以及这两种方法在何种情况下不再可靠。

为何有效的提示语常常会丢失

反向提示依赖于当前最先进的模型具备反思自身上下文的能力。它既可以在聊天窗口中手动操作,也可以作为流程步骤被脚本化实现,在需要处理大量且容易遗忘的需求的代码生成和智能体工作流中效果最为显著。

典型的优化循环

想象一下,有位开发者在为 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 提示词的指南。

核心要点

  • 长时间提示词交互的真正价值在于其中积累的各种约束条件;在结束对话前务必将这些约束记录下来。
  • 在一次成功的对话结束时添加一条元指令,即可将其转化为独立的、可版本控制的提示词。
  • 当仅有输出结果时,应生成多个候选提示词,由相似度指标而非模型的置信度来决定最佳方案。
  • 恢复得到的提示词只是与特定模型相关的近似值,因此需在新的会话中对其进行验证,并在模型发生变更时再次验证。
  • 相关阅读