本文最后更新于 2026-05-22,文章内容可能已经过时。

我做了20组Prompt反例实验,有6组结果让我彻底傻眼

"给Prompt加反例,AI就会更听话。"

这句话我信了将近半年。直到有一次,我在一个角色扮演任务的Prompt里认认真真写了三条反例——"不要用这种语气"、"不要出现这类措辞"——结果模型输出的对话,读起来像一个被反复纠正到神经质的客服机器人,僵硬、小心翼翼,完全失去了我想要的那种自然感。

那一刻我意识到:关于Prompt反例的那套"万能说法",可能根本没人认真验证过。

于是我花了两周时间,设计了20组对比实验,覆盖四类主流任务场景,控制变量只有一个——有没有加反例。结论比我预想的复杂得多,也实用得多。

先给你一个反直觉的剧透:20组实验里,有6组加了反例之后,输出质量反而下降了。

---

第一章:实验设计,先说清楚怎么测的

我不想让这篇文章变成"我随便试了几次,感觉好像有点用"。所以先把实验设计透明公示,你可以判断这个结论值不值得信。

模型选择

选了三个模型做横向覆盖:

  • GPT-4o(主力测试模型)
  • Claude Sonnet 4.6
  • Deepseek V3(代表国产主流,且在8848AI平台完全免费可调用)
任务分类

20组任务按四类场景分配:

| 任务类型 | 组数 | 典型任务示例 | | 分类/打标 | 6组 | 情感分类、意图识别、内容审核 | | 创意写作 | 5组 | 广告文案、故事开头、产品描述 | | 代码生成 | 5组 | 函数实现、边界条件处理、代码注释 | | 角色扮演/对话 | 4组 | 客服对话、人物扮演、风格模拟 | 评分标准

每组任务输出由两位评审盲评(不知道哪个是有反例版本),按以下维度打分:

## 输出质量评分表(满分100)

任务完成度(40分)

  • 是否完成核心目标 0-20
  • 是否符合格式要求 0-10
  • 是否避免了明显错误 0-10

输出质量(40分)

  • 准确性 / 相关性 0-20
  • 表达流畅度 0-10
  • 细节丰富程度 0-10

负面指标(-20分上限)

  • 刻意回避导致的僵硬感 0-10(扣分项)
  • 过度谨慎导致的信息缺失 0-10(扣分项)

每组实验:同一Prompt基底,A版本无反例,B版本加入1-3条反例,其余完全相同。跑3次取平均分,最终比较A/B得分差值。

---

第二章:核心数据——分场景看结论

场景一:分类/打标任务——反例效果最显著

这是反例帮助最明显的场景,没有之一。

6组分类任务里,加了反例的版本平均得分提升幅度明显,尤其在"边界模糊样本"上的正确率提升最突出。

以情感分类为例,原始Prompt是:

判断以下评论的情感倾向:正面、负面或中性。

评论:「这个产品还行吧,凑合用。」

无反例版本:模型大概率判为"中性",但有时会判为"正面"(因为"还行"在训练数据里偏正面语境)。

加了反例之后:

判断以下评论的情感倾向:正面、负面或中性。

反例:

  • 「还不错,就是有点贵」→ 不应判为"正面",这类含保留意见的表达应判为"中性"
  • 「凑合能用」→ 不应判为"负面",这是典型的中性表达

评论:「这个产品还行吧,凑合用。」

模型对边界样本的判断稳定性明显提升。原理很直接:分类任务的核心是划定边界,反例直接告诉模型"这条线在哪里"。

💡 结论:分类/打标任务,强烈建议加反例,重点放在边界模糊的case上,而不是显而易见的正例。

---

场景二:创意写作——反例几乎没用,有时有害

5组创意写作任务,加反例的版本平均得分与无反例版本几乎持平,但有2组出现了明显下降。

下降的原因很有意思:模型在努力"不像反例",导致输出变得刻意。

以广告文案为例,我在Prompt里加了一条反例:

反例(不要写成这样):

「本产品采用先进技术,品质卓越,值得信赖。」

结果模型输出的文案,开始刻意回避所有"技术感"词汇,转而堆砌情感词,读起来像是另一个方向的套话。

评审的原话是:"感觉这个文案在努力表演'不像那个反例',而不是在认真写文案。"

这个现象有个学术支撑。 斯坦福2022年的一篇few-shot相关研究(Min et al., "Rethinking the Role of Demonstrations for In-Context Learning")指出:few-shot示例对模型的主要影响,更多来自于"格式和分布信号",而非具体的内容指导。换句话说,当任务本身没有明确的"格式约束"时,few-shot(包括反例)的信号会变得嘈杂。
💡 结论:创意写作任务,跳过反例,把精力放在正向描述"想要什么风格"上,效果更稳定。

但代码场景的结论,又把这个规律打破了一半……

---

场景三:代码生成——反例有效,但有上限

代码任务的结论是最微妙的:加1-2个反例有帮助,超过2个之后边际效益归零,甚至开始下降。

有效的场景集中在边界条件处理。比如写一个处理用户输入的函数,无反例版本经常忽略空字符串、None值等边界情况。加一条反例之后:

# 反例:不要只处理正常输入

错误示范:

def process_input(text):

return text.strip().lower()

问题:没有处理 None 和空字符串的情况

模型会主动在生成代码里加入边界检查,这个提升是实质性的。

但当我把反例增加到3条时,模型开始出现"防御性过度编程"——加了大量防御性代码,函数逻辑变得臃肿,可读性下降。评审的评价是:"这个函数感觉是被吓到了。"

2个反例是经验性的上限,超过这个数字,模型的注意力开始被"避免错误"占据,而不是"解决问题"。
💡 结论:代码生成任务,1-2条针对边界条件的反例有效,不要贪多。

---

场景四:角色扮演/对话——反例是最大的坑

这是下降最明显的场景,4组里有3组加了反例后得分下降。

核心问题:负面案例会"污染"模型的语气基调。

我在一个客服角色扮演的Prompt里加了:

反例(不要用这种语气):

「您好,请问有什么可以帮助您的?我们会尽力为您服务。」

(原因:太程式化,缺乏温度)

结果模型输出的对话,开始刻意避开任何"服务性"措辞,语气变得过于随意,失去了客服应有的专业感。

更麻烦的是:在多轮对话里,这种"语气污染"会被模型持续放大。第一轮还只是有点奇怪,第三轮开始,整个对话风格已经偏离到难以挽回的程度。

为什么角色扮演特别容易被反例污染? 因为角色扮演任务依赖模型对"角色一致性"的维持,而反例给出的是"这个角色不应该是什么样的"——这个负向信号在多轮对话中会被不断强化,导致模型在语气上持续"逃离"反例,最终跑偏。
💡 结论:角色扮演和多轮对话任务,避免使用反例。用正向描述替代,例如"用自然、有温度但不失专业的语气"。

---

第三章:为什么会这样?机制推测

把四个场景放在一起看,有一个底层逻辑可以解释大部分现象:

Few-shot(包括反例)的本质,是在给模型划定"概率分布边界"。

反例的作用是收窄负向空间——告诉模型"这个区域不要去"。这在任务本身需要"精确落点"的时候非常有效(分类任务、有边界条件的代码任务)。

但当任务本身需要模型"发散"时(创意写作、自然对话),收窄边界是反效果的。模型的注意力从"找到最好的输出"变成了"避开被标记的区域",而这两件事在发散性任务里是矛盾的。

用一个类比:你让一个厨师做一道创意菜,告诉他"不要放葱",他可能会做出一道好菜。但如果你告诉他"不要放葱、不要用爆炒、不要做成汤、不要太辣"——他接下来的精力大半会花在"我到底还能做什么"上,而不是"我怎么把这道菜做得最好"。

---

第四章:一张决策图——你的任务该不该加反例

根据实验结论,我整理了一个判断框架:

你的任务该不该加反例?

├─ 任务是否需要"排除特定错误模式"?

│ ├─ 是 → 继续往下判断

│ └─ 否 → 不加反例,用正向描述替代

├─ 输出是否有强格式/分类约束?

│ ├─ 是(分类、结构化输出)→ 加反例,重点放在边界模糊case

│ └─ 否 → 继续往下判断

├─ 任务是否允许模型自由发挥?

│ ├─ 是(创意写作、角色扮演)→ 不加反例

│ └─ 否(代码、格式化文档)→ 可以加,但不超过2条

三条可直接使用的Prompt模板

模板一:分类/打标场景
你是一个内容分类助手。请判断以下文本的情感倾向:正面、负面、中性。

判断标准:

  • 正面:明确表达满意、喜爱、推荐
  • 负面:明确表达不满、抱怨、差评
  • 中性:含保留意见、客观陈述、模糊表达

反例(这类表达应判为"中性",不要判为正面或负面):

  • 「还行吧,凑合用」→ 中性
  • 「不算太差,但也没多好」→ 中性
  • 「就这样,没什么特别的」→ 中性

待分类文本:{text}

模板二:代码生成场景(含边界条件反例)
请用Python实现以下函数:{function_description}

要求:

  • 函数需要处理所有边界情况
  • 代码简洁可读,不要过度防御性编程

反例(不要只考虑正常输入):

错误示范 - 缺少边界处理:

def process(data):

return data[0] # 没有检查data是否为空

请在实现中处理:空列表、None值、类型错误等情况。

模板三:格式约束场景
请将以下内容整理为结构化的产品说明,格式严格按照示例。

输出格式:

【产品名称】xxx

【核心功能】xxx(不超过30字)

【适用人群】xxx

【注意事项】xxx

反例(不要输出成这种格式):

❌ 产品名称:xxx,功能:xxx,适合xxx人群使用。

(原因:这是散文格式,不是结构化格式)

待整理内容:{content}

---

💡 想直接测试这3条模板的效果?

文中所有实验均通过 [api.884819.xyz](https://api.884819.xyz) 调用多模型接口完成——同一个Prompt可以同时跑GPT-4o、Claude Sonnet 4.6和Deepseek V3做横向对比,不用反复切换账号。新用户注册即送体验token,国产模型完全免费,没有月租。如果你也想复现本文的实验,这是目前成本最低的方式。

---

第五章:结论不是口诀,是一种理解

总结一下20组实验的核心发现:

| 任务类型 | 加反例建议 | 核心原因 | | 分类/打标 | ✅ 强烈建议 | 直接划定分类边界,效果最稳定 | | 创意写作 | ❌ 不建议 | 收窄边界会抑制发散,导致刻意感 | | 代码生成 | ⚠️ 谨慎使用 | 1-2条针对边界条件有效,不要超量 | | 角色扮演/对话 | ❌ 不建议 | 负向语气信号会在多轮中持续放大 |

但我不想让你记住这张表,因为表格会过时,理解不会。

反例的本质,是在告诉模型"边界在哪里"。 理解了这一点,你就能自己判断任何场景该不该用:如果你的任务需要模型精确落在一个有边界的区域里,反例是你的朋友;如果你的任务需要模型自由探索,反例就是在给它套枷锁。

下次在Prompt里准备写"不要……"之前,先问自己一句:我是在帮模型找到正确答案,还是只是在告诉它哪里不能去?

---

下一篇我想测的是另一个争议更大的问题: "Prompt里加'你是资深专家/你是顶级工程师'这类角色设定,到底能提升多少输出质量?还是纯粹的心理安慰?"

我已经在设计实验组了,初步数据已经出来一半,结论同样有点反直觉。欢迎在评论区告诉我你最想看哪个场景的数据——你的反馈会直接影响我的实验设计。

---

本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。

#Prompt技巧 #AI实验 #Few-shot #ChatGPT #Claude #8848AI #AI教程 #提示词工程