爱可可-爱生活 26-01-12 08:41
微博认证:AI博主 2025微博新锐新知博主

【告诉AI“不要做什么”比“要做什么”更有效:一个反直觉的提示词发现】

最近看到一个有意思的实验:用一种叫“Code Field”的提示词技术做了18组测试,核心只有4行,全是否定句——不告诉模型该做什么,只说不该做什么。

结果相当惊人:

代码生成任务中,主动陈述假设的比例从0%飙升到100%。基线测试里没有一个回复会先列出假设,用了这个提示词后每个回复都会。

代码审查任务中,bug检出率从39%提升到89%。基线测试把SQL注入漏洞轻描淡写成“加个错误处理”,而Code Field直接指出这是安全漏洞。严重性识别更是从0%到100%——基线漏掉了所有关键bug,Code Field全部捕获。

核心发现:抑制性指令比正向指令更能稳定地塑造LLM行为。

精简版提示词长这样:

```
Do not write code before stating assumptions.
Do not claim correctness you haven't verified.
Do not handle only the happy path.
Under what conditions does this work?
```

完整版则更像一段“代码冥想”——提醒模型注意那个急于产出的冲动,那个看到问题就想模式匹配的惯性,那个“能跑就行”的满足感。在动手之前先问:你对输入做了什么假设?对环境呢?什么会让它崩溃?恶意调用者会怎么做?凌晨三点debug的人会误解什么?

有人评论说这和他的直觉吻合:可以把LLM想象成在状态空间里搜索,训练约束了语法有效性,提示词进一步约束到子集,而否定式指令是在这之上再叠加约束——状态空间越小,产出好结果的概率越高。

这个发现其实挺反直觉的。一年前的主流观点还是“LLM总会做你告诉它不要做的事”。但现在看来,至少在代码场景下,明确的边界比模糊的方向更管用。

想想也合理:人类专家的能力很大程度上体现在知道什么不该做。新手写代码急于实现功能,老手先想边界条件和失败模式。这个提示词本质上是在模拟专家的思维习惯——不是教模型怎么写代码,而是教它怎么像专家一样思考代码。

“你没写的测试就是你会发布的bug,你没陈述的假设就是你需要的文档,你没命名的边界情况就是你要调试的事故。”

这句话值得贴在每个程序员的显示器上。

x.com/BLUECOW00status/2010221837389570364

发布于 北京