我做了个小实验:同一个需求,同一个模型,七次不同的写法。七份输出,长得像七个产品经理写的。
结论让我有点想把过去两年的 Prompt 都删了重写——大多数人不是不会写 Prompt,而是把「写需求」和「许愿」搞混了。
你给模型的往往是鼓励、身份和形容词:「你是一位资深的、严谨的、注重代码质量的资深工程师,请尽可能输出优雅、可维护、考虑周全的实现。」模型听完很感动,然后给你一份它自己很满意、你完全用不上的代码。
问题出在哪?出在——你没告诉它,做砸了算谁的。
一、先看实测:同一件事,三种写法,三种命运
需求很简单:写一个带指数退避的 HTTP 重试函数,要求不引入第三方依赖。
写法 A:身份 + 鼓励 + 一堆形容词
你是一位资深且严谨的后端工程师,请用优雅、可维护、考虑周全的方式,
尽可能全面地实现一个 HTTP 重试函数,要处理好各种边界情况……
输出:180 行。带了一个完整的重试策略类、六个配置项、四个日志钩子,还贴心地补了 Prometheus 指标。你只想删个网络抖动,它给你造了一整套中间件。
典型的「把上下文当成许愿池」。你说「考虑周全」,它就理解成「越多越好」。
写法 B:极简
写一个 HTTP 重试函数,指数退避。
输出:22 行,干净,能跑。但超时没设、退避上限没设、非幂等请求没区分——你拿去用,大概率在生产上挨骂。
极简不是缺点,问题是它省掉的部分,全是你后面要还的债。
写法 C:契约式
【任务】写一个 HTTP 重试函数(Node.js,无第三方依赖)。
【输入】fetch(url, opts) ;opts 可含 timeoutMs。
【输出】单个函数 export async function retry(fn, { retries=3, baseMs=200 })。
【验收清单】
1. 退避为 base * 2^n,带 ±20% 抖动
2. 只重试网络错误与 5xx,4xx 直接抛
3. 单次超时默认 5s,可配置
4. 总耗时上限 30s,超限抛出可识别错误
5. 幂等性由调用方通过 opts.idempotent 声明,为 false 时不自动重试
【边界】不要引入任何三方库;不要加日志、指标、类设计;
【失败处理】若需求自相矛盾,先列出矛盾点并给出取舍方案,再写代码。
输出:58 行,五个验收点逐条对得上,没有一行多余代码。它甚至贴心地把「幂等性」这个你没提的点列了出来,因为它属于验收清单要求的推理链。
差别不在模型,在你给的是「描述」还是「契约」。
二、Prompt 心法:真正有用的只有四件事
1. 给验收标准,不要给鼓励
「要优雅」对模型来说是一句没有信息量的话。「每个函数不超过 30 行,注释只解释 why 不解释 what」才是信息量。
判断标准很简单:如果一句话无法被验证,它对模型就是废话。「要有性能意识」是废话;「列表接口不允许返回超过 50 条」是标准。
2. 先要结构,再要内容
我最爱的一招:先让它列方案、列风险、列需要你确认的分歧点,你挑一个,它再动手。这一步花掉三十秒,能省掉三轮返工。
因为模型最擅长的是「补全」,而不是「判断」。你让它直接写,它会默认沿用它见过最多的那种写法。你先框定选项,它只需要在框里填空。
3. 把「不许做什么」写清楚
正面的要求模型会听,负面的要求模型经常忘。「不要加日志、不要加指标、不要设计类、只用标准库」,比「请保持代码简洁」有效十倍。
简洁是个形容词,「只用一个函数、一个文件、零依赖」是尺子。
4. 让它先怀疑自己
结尾加一句:「先列出这个方案可能的三个坑和对应的规避方式。」
这一句的价值不在于它真能自我批评(它顶多真的列三个),而在于它会把「隐含前提」逼到台面上——比如「默认接口幂等」「默认重试全部 GET」这种你其实从没确认过的东西。
三、可直接抄的模板
【角色】你是什么身份、关心什么(只写影响判断的部分)
【任务】一句话说清要什么,不要塞形容词
【输入】我给你的原始材料长什么样(数据格式、字段、示例)
【输出】交付形态:函数签名 / JSON schema / 表格列 / 字数与结构
【验收清单】3-6 条可验证的硬标准
【禁止项】明确不许做的事
【失败处理】信息不足时怎么办:先提问,还是标注假设并继续?
【不确定时】要求它先列分歧点
注意「验收清单」这一栏——它是你整套 Prompt 里最值钱的部分,也是 90% 的人省略的部分。
因为验收清单本质上是你脑子里那把尺子。你从来没拿出来给人看过,还指望别人猜。
四、三个最常见的自伤姿势
其一,一次塞十个需求。模型会给你一份「平均用力」的巨型方案,每条都做了,每条都不深。要么拆开问,要么明确说「本轮只解决 X」。
其二,用空词堆上下文。「专业」「深入」「有洞察」「高质量」「面向中高级读者」——这些词对模型的输出几乎没有影响,却让 Prompt 变长、变贵、变自信。你以为它在努力,它只是在读你的形容词。
其三,不给样例。这是最冤的一种。模型不知道你想要什么排版、什么粒度、什么语气时,最省力的做法就是输出平均值。你贴一段你真正满意的东西过去,它抄格式的能力远超你想象。
五、人话版总结
把模型当实习生用,而不是当神谕用。
神谕不需要你写验收标准,你问它它就答。实习生需要——你得说清楚背景、边界、交付物、验收方式,以及做错了怎么办。你不写,它就按自己理解的最常见版本做,然后你嫌它「不够好」。
最扎心的一句在这儿:你抱怨模型输出平庸,常常不是因为模型笨,而是因为你从来没告诉过它什么叫好。
下次写 Prompt 前,先问自己一句:这段话里,有几句话是我真的验收时会看的?如果答案是「没有几句,那几句才是重点」,那就只留那几句。
少写字,多给尺子。模型最不缺你的鼓励,最缺的是你的标准。