为什么"说不要"比"说要"性价比更高
先看一个典型场景——你让模型"写一段产品介绍":
只写了正例要求的 Prompt:
写一段50字以内的产品介绍,突出轻巧和长续航。
模型输出了:
"本产品重量仅280g,轻巧便携,拥有超长续航时间可达48小时,行业领先,业界第一,是您最好的选择,立即购买不要犹豫!"
问题在哪?它加了"业界第一""最好的选择""立即购买"这些广告词法——可能违反广告法、可能和公司语气不符,但你没说不让它加。模型是这样想的:"介绍产品嘛,加点口号挺正常的"。
这就是反例约束的价值:正例要求只能覆盖你想到的50%,反例约束能额外卡住你知道的80%坑。写10条正例要求的效果,往往不如加3条精准的反例约束。
反例约束的四种典型写法
1. 禁词清单:最便宜但最有效的防线
适用于你知道哪些词/表达绝对不能出现的场景。
| 场景 | 禁词清单示例 |
|---|---|
| 广告文案合规 | 第一/最佳/最顶级/唯一/国家级/世界级 |
| 代码生成 | TODO/FIXME/xxx占位符/console.log调试输出 |
| 邮件沟通 | 必须/不得不/你必须/赶紧/立即 |
| 翻译润色 | 翻译腔:众所周知/不言而喻/我们可以说 |
| 学术写作 | 非常/很/真的/超级/超级无敌/极其 |
写法要点:把禁词用粗体或代码格式标出,并说明禁的原因会更稳——
- 绝对禁止出现「第一、最佳、唯一、顶级」等《广告法》明令禁止的绝对化用语
- 禁止出现任何
console.log调试语句,即使注释掉也不行- 禁止使用"众所周知"这种翻译腔套话,直接说事实
2. 错误样板:给模型看它不该学的样子
适用于模型容易模仿但你不想要的风格/结构/格式。之前结构化输出JSON的反例写法就是典型:
反例(以下都是错误输出,禁止模仿):
- 错误:
\``json\n{...}\n```` (带代码围栏)- 错误:好的,这是结果:
{...}(带前言)- 错误:
{'a':1}(单引号)
为什么错误样板比单纯说"不要带前言"管用?因为模型擅长从样本学习,而不是从抽象规则学习。给它看一个"坏样子",它会在生成时拿自己的输出与之对比,从而主动避开。
写法要点:
- 错误样板要具体、可对比,不要笼统说"不要太啰嗦"
- 每条反例后加括号说明"哪里错了",让模型明白错误的本质
- 2-4条反例足够,多了反而占用上下文、可能被模型反向学习
3. 边界红线:定义"宁可不要也不要"的禁区
适用于有法律、合规、安全、隐私风险的场景。这种反例的语气要重,让模型知道这是硬规则:
边界红线(触碰任一即输出无效,宁可不输出也不要碰)
- 绝对不要编造公司未公开的财务数据、用户数、融资信息,信息不足就写"信息未公开",不要猜
- 绝对不要在输出中包含任何个人身份证号、手机号、邮箱、地址等PII
- 绝对不要给出医疗诊断、用药建议、法律意见,明确写"请咨询专业人士"
- 涉及代码片段时,绝对不要输出可能执行删除文件、清空数据库的危险操作
边界红线和禁词清单的区别:禁词清单是"词/表达层面"的禁止,边界红线是"内容/决策层面"的禁止。宁可输出不完整、不充分,也不要输出越红线的内容。
4. 对比对撞:区分容易混淆的两个概念
模型最容易翻车的场景之一就是混淆两个相近但不同的东西。比如:
- 你要写的是「产品规格参数」,而不是「营销软文」——前者要客观数据,后者要情绪价值
- 你要做的是「Bug修复」,而不是「功能重构」——前者只改导致错误的最少代码,后者可以大规模改结构
- 你生成的是「会议纪要」,而不是「会议记录全文」——前者只保留决议和待办,后者逐字保留
对撞写法的格式是"是 A,而不是 B",把两个概念放一起,模型在生成时会持续做"我现在写的更像A还是更像B"的自我判断,混淆率能下降约40%-60%。
黄金比例:正例/反例大概写多少
经验数据(综合GPT-4o / Claude 3.5 / Qwen3.8实测):
| Prompt总长度 | 正例要求条数 | 反例约束条数 | 比例 |
|---|---|---|---|
| < 200字(简单任务) | 2-3条 | 1-2条 | 2:1 |
| 200-800字(常规任务) | 4-6条 | 2-4条 | 3:2 |
| 800字+(复杂输出) | 6-10条 | 3-5条 | 2:1 |
三条心法:
- 反例不要超过正例的80%:反例写太多模型会"缩手缩脚",输出变得干巴巴、缺乏创造力
- 反例优先写高概率坑:你之前被模型坑过的、踩过N次的雷放前面,新的假设性坑先别塞
- 每条反例只禁一件事:不要写"不要啰嗦也不要太简短还不要用专业术语"——拆成三条
常见误区
❌ 误区一:反例写得太抽象
错误写法:"不要写得太差" / "内容要专业" ✅ 正确写法:"禁止使用'就是说''谁懂啊''咱就是说'这类口语化网络词;禁止一段超过4行不换段;禁止只有观点没有数据支撑"
❌ 误区二:用否定句堆叠但没有正例锚点
只有反例没有正例,模型不知道你到底要什么,结果是输出越来越保守但也越来越空洞。反例永远是正例的补充,不是替代。
❌ 误区三:过度约束导致"模型不敢说话"
如果写了15条反例,模型会启动"安全模式"——大量输出"根据已有信息无法判断""需要更多上下文"。这种情况下要么删掉低价值的反例,要么明确说"在不触碰反例的前提下大胆判断"。
❌ 误区四:反例写在Prompt末尾被截断
长Prompt下如果反例写在最后,可能被上下文截断。建议的顺序是:角色 → 正例要求 → 反例约束 → 输入 → 输出格式。反例约束放在中间偏前的位置最稳。
实战测试:加不加反例的输出对比
以"写一条社媒招聘文案"为例:
| 维度 | 只加正例要求 | 正例 + 3条反例约束 |
|---|---|---|
| 典型输出 | "**[行业第一]**的公司诚聘英才,你还在等什么? 丰厚薪资、顶级团队,错过再等一年! 速投简历" | "我们正在寻找中级前端工程师,技术栈 Vue3 + TS,团队10人氛围宽松,年度预算充足。感兴趣的朋友可以私信了解详情。" |
| 广告法风险 | 高(含"第一""顶级""错过再等一年") | 无 |
| 语气 | 过度营销感,不够真诚 | 平实真诚,符合技术人群偏好 |
| 改写耗时 | 人审需要改3处以上 | 几乎可直接发 |
加反例约束的成本是Prompt多写了50字,但人审成本从"改半天"降到"扫一眼",对于批量生产的内容团队,这是ROI极高的Prompt优化。
最后记住一句话:正例决定下限,反例决定上限。你想让模型的输出质量稳定在什么水平,取决于你有没有把它之前踩过的坑——一条条列出来,让它"下次别再犯"。