上一章我们把一次调用的旋钮讲清楚了。但旋钮之外,还有一个更大的东西:提示词本身。网上流传的提示词技巧——「你是世界顶级专家」「深呼吸,一步步来」「答对了给你二十美元小费」——让这个领域看起来像巫术。这一章要破除的就是这个印象:提示词不是咒语,它是一份接口契约。
咒语的失效方式
咒语式提示词有三个共同的死法。
第一,只对某个版本有效。「你是顶级专家」在 GPT-4 某一代上可能让输出略微认真一点,换个模型版本就毫无作用甚至起反作用——因为它的机制是碰巧拨动了训练数据里的某种统计关联,而这种关联每次训练都会重洗。
第二,不可回归。你改了第五行的措辞,回答变好了还是变坏了?不知道。没有评估,改提示词就是在黑暗里拧旋钮(第六章会专门解决这个)。
第三,不可维护。一个塞了八百行「不要这样、不要那样」的提示词,每条禁令都是某次线上事故留下的创可贴,没人敢删,也没人知道哪条还在起作用。
大白话:靠撞大运写出来的提示词,就像靠试出来的偏方——可能有效,但你不知道对什么有效、为什么有效、什么时候失效。
契约式写法:角色、输入、输出、边界
把提示词当成一份你和模型之间的接口契约来写,结构就清楚了。一份能进生产环境的提示词通常有四块:
- 角色与任务:一句话说清要干什么。「你是客服系统的回复生成器,负责根据工单内容起草回复。」不是吹捧,是限定职责范围。
- 输入的字段约定:明确告诉模型会收到什么。用分隔符或 XML 风格的标签把变量包起来,如
<ticket>...</ticket>,模型对结构化分隔的遵循度远高于裸文本拼接。 - 输出的格式约定:能走结构化输出就走结构化输出(第二章),走不了就给出精确的格式示例。一个具体的例子,胜过三段形容词。
- 边界与兜底:明确「不知道时怎么办」。比如「工单信息不足以回答时,输出 escalate=true,不要编造政策细节」。这一条省掉的是幻觉造成的真金白银。
契约思维和咒语思维的分水岭在于:契约的每一条款都回答「这条违约了会怎样」。如果删掉某一句不会让任何输出变差,那它就是噪音,删掉它——长提示词不仅贵,还会稀释模型对关键指令的注意力。
例子:少样本提示是契约里的附件
少样本提示(few-shot prompting)是在提示词里放几个「输入 → 正确输出」的样例。它的机制不是「教模型学会新技能」,而是把输出的分布钉在你展示的那个格式和风格上——模型极其擅长模仿模式,样例就是最明确的模式。
所以样例的选择标准是覆盖面,不是数量:三个覆盖不同情况的样例,好过十个雷同的。边缘情况(输入为空、输入自相矛盾、用户骂人的情况)尤其值得各给一个样例,因为这些正是模型自由发挥时最容易翻车的地方。
提示词也要过代码评审
契约的最后一个属性是可管理:提示词应该进版本库、有变更记录、过评审、配套评估用例。改一行提示词和改一行代码同级对待——因为它们对系统行为的影响是同级的。
大白话:提示词是这个系统里唯一用自然语言写的代码。是代码,就要有代码的纪律。
到这里,「问什么、怎么问」讲完了。但很快你会发现一个更扎心的事实:模型答得不好,常常不是问得不对,而是它手里根本没有那份资料。下一章进入上下文工程——窗口里塞什么,比怎么问更重要。