从模糊到精准:通过三步精心修改完善一个提示词
观看一条简单的LLM提示如何演变成结构化的任务说明,了解为何上下文能决定内容的真实性,而角色设定、格式要求与约束条件则决定了最终结果的质量。
来源: I Rewrote the Same Prompt Three Times. Here’s What Changed Each Time.
大多数低质量的LLM输出并非源于模型本身性能不佳,而是由于提示词让模型无从判断。最快速的验证方法就是选取一个请求并逐步优化,观察每次修改如何减少模型的猜测成分。下面展示了一项日常任务的三种不同版本,通过对比即可掌握将常用提示词转化为几乎无需或完全不需要修改就能得到理想输出的模式。
整个任务的内容是:撰写一篇用于宣布产品更新的LinkedIn帖子。
第一关:人们通常输入的原始请求
第一个版本就是几乎所有人都会发送的那种形式。
Write a LinkedIn post about our new feature launch.
这里没有错误,但几乎也没有任何具体说明。既没有模型需要扮演的角色,也没有功能描述、目标受众、语气或格式要求。唯一的提示是“领英帖子”和“功能发布”,因此模型会用最安全、最通用的默认值填补所有空白。最终得到的不过是些经过润色的企业宣传文案,完全可以用来介绍任何产品。
第二步:提供事实信息
第二个版本会告诉模型实际发生了什么。
Write a LinkedIn post about our new feature launch. We just added dark mode to our app, and users have been asking for it for months. Keep it casual.
这确实是一个进步。模型现在明白该功能是深色模式,而且用户早已期待这一功能;同时“保持轻松风格”的要求也使内容不再像新闻稿。不过仍缺少明确的发言者、格式限制,以及除“撰写文章”之外的明确目标。因此模型仍需决定内容的长度、是否添加行动呼吁,以及应以何种语气来撰写。
第三步:添加角色、目标、格式与限制条件
最终版本将请求拆分为两部分。首先是用于确定语气的角色设定:
Act as a founder writing a personal, low-key LinkedIn update, not a marketing announcement.
接着是一份结构化的简述,涵盖了背景、目标、格式以及明确禁止的内容。它被标记为纯文本而非 YAML;将每个标签单独占一行,便于解析各个部分。
Context: We just shipped dark mode after users requested it for months. This is a small update, not a major launch, so it shouldn't be hyped up.Objective: Announce the update in a way that feels like a genuine update from a builder, not corporate copy, and invite people to try it and share feedback.Format: Under 100 words. No emojis. End with a direct, casual question rather than a call to action button.Constraints: Do not use the words "excited," "thrilled," or "game-changer." Do not use hashtags.
其好处并不仅仅是提示词变长了而已。第二轮中遗留的所有歧义现在都得到了解决:模型清楚谁在发言、应避免何种语气、字数限制、如何结束内容,以及哪些词语和标签是禁止使用的。当可猜测的内容越来越少时,出错的可能性也会随之降低。
尤其要注意那些负面约束。列出诸如“excited”或“game-changer”之类的禁用词,往往是消除那些会让生成内容显得千篇一律的陈词滥调的最有效方法,因为这直接针对了模型最可能的默认行为。
为何第二次跳跃比第一次更重要
从第一轮到第二轮的过渡增加了背景信息;而从第二轮到第三轮的过渡则增添了结构:明确了角色、具体格式以及需要避免的内容。第二步往往会产生比人们预期更大的影响,因为这两者承担着不同的功能——背景信息告诉模型什么才是正确的,而结构则告知模型优质结果应具备怎样的特征。
这种差异也会影响你的努力方向。使用二次提示时,你通常需要在输出结果生成后再调整其形式:裁剪长度、去除冗余内容、重写结尾。而使用三次提示时,你可以提前明确输出的形式,这样几乎无需再进行编辑。如需更完善的用于生产系统的模板,请参阅我们的七层LLM提示框架。
需要记住的一点是:并非每个提示都值得如此精细的处理。对于临时性的问题,二次提示就足够了。而对于那些会重复使用、需要与团队共享或用于公开文本的提示,结构化版本则更为有效。
将此模式应用到你自己的提示中
挑选一个你经常使用的提示,那种几乎可以凭记忆输入的提示,然后重复上述练习:
- 首先提供背景信息:模型无法自行知晓的事实。
- 指定角色,以明确语音或视角。
- 确定格式:长度、结构以及输出应如何结束。
- 明确列出一到两项需要排除的内容:要避免使用的词语、风格或元素。
通常前两个版本仍需修改,而第三个版本已接近完成。
核心要点
- 简单的请求会迫使模型用通用默认值填补空白。
- 背景信息能提高准确性,但并不能定义何为“完成得很好”。
- 角色、目标、格式和约束条件能将请求转化为明确的规范。
- 负面约束是消除陈词滥调的廉价有效方法。
- 对于会重复使用的提示语,要注重结构设计;临时提出的问题则应保持简洁。