目录

Prompt Engineering 的几个反模式

Prompt engineering 这两年火得一塌糊涂,各种"技巧"满天飞。什么"few-shot"、“chain-of-thought”、“角色扮演”,一套一套的。

有些确实有用。但更多时候,我看到的是技巧堆砌让输出变得更差。这篇文章聊几个我认为的反模式。

反模式一:角色扮演等于没说

最常见的模板:

你是一个资深后端工程师,有10年经验...

这句话等于废话。

模型训练数据里已经有足够多的"资深工程师写的代码"。你告诉它"你是工程师",它就按通用的工程师风格输出,跟你的具体场景没任何关系。

更有效的做法:

你是一个 Go 后端工程师,负责维护一套高并发 API 服务。
我们的技术栈:Gin + GORM + Redis。
约束:必须兼容 Go 1.21,禁止使用 any 类型...

具体的技术栈、约束、上下文,比"10年经验"值钱太多。

反模式二:Few-shot 滥用

Few-shot 是给你示例让模型学习格式。但很多人把它用成了"例子堆砌"。

问题在于:例子越多,模型越容易过度拟合例子里的表层模式,而不是真正理解任务

我见过最夸张的 prompt,扔了 20 个 Q&A 对话作为 few-shot examples。结果模型开始模仿对话的语气、措辞、甚至表情包,完全偏离了任务本身。

什么情况下 few-shot 有用:

  • 输出格式必须严格遵循某种结构(比如 JSON schema)
  • 任务边界模糊,需要例子来定义"什么叫对"

什么情况下 few-shot 是负担:

  • 任务定义已经很清楚
  • 需要模型做推理而不是模仿

反模式三:Chain-of-Thought 乱用

CoT 是让模型"一步步思考"。但它解决的是推理链长、容易跳步的问题,不是所有任务都需要。

比如:

2 + 2 = ?

不需要 CoT,模型直接答 4。强制让它"思考"只会降低效率。

CoT 真正有效的是:

  • 数学推导
  • 逻辑推理
  • 多条件判断

不需要 CoT 的是:

  • 事实查询
  • 格式转换
  • 简单分类

反模式四:长度约束"不少于 XXX 字"

“请写出不少于 800 字的文章”。

这种约束是给模型加锁,而不是给质量加码。

模型为了凑字数,会往废话里注水。“综上所述”、“从以上分析可以看出"这类填充句就出现了。

质量不是字数堆出来的。 如果你的内容需要凑字数才能"显得完整”,问题在结构,不在字数。

反模式五:让模型"思考过程"透明

有些 prompt 要求模型"先给出思考过程,再给结论"。

这在某些场景下合理(比如调试),但日常使用往往是负担。

模型输出的"思考过程",本质上是在模拟一个"思考的人类",不是它真正在推理。这些"思考"经常是圆场的废话,浪费 token。

更高效的用法:

  • 简单任务:直接给结论
  • 复杂任务:先让它出一个 plan,你批准后再执行
  • 调试场景:让它解释假设和推导

反模式六:用"你是一个 AI"开头

你是一个 AI 语言模型...

这句话的唯一作用是提醒模型"你只是个程序,别当真"。没有任何工程价值。

如果你的 prompt 以这句话开头,通常意味着你对自己的任务定义还没想清楚。

有效的 prompt 共性

我观察下来,真正有效的 prompt 有几个共同特征:

  1. 任务边界清晰 — 不是"帮我写代码",而是"在 GIN 框架下写一个带 JWT 认证的 /user/:id 接口"
  2. 约束具体 — 不是"代码要健壮",而是"错误要返回特定 HTTP status code 和 JSON 格式"
  3. 验收标准明确 — 不是"写得好一点",而是"跑通 test case A/B/C"
  4. 给原材料,不给二手总结 — 直接给文档/代码片段,而不是"根据你知道的 XXX"

最后

Prompt engineering 不是魔法,模型的能力有上限。好的 prompt 不是在突破这个上限,而是在让模型的上限稳定发挥。

与其研究技巧,不如把任务定义清楚。模糊的任务 + 花哨的技巧 = 垃圾。