Prompt 基础
没有什么魔法咒语。写 prompt 就是描述任务,四种可复用的结构就能覆盖大部分有效做法。
先动手,再深入阅读
把需求说清楚 · 6 分钟本页目录
Prompt 背着一层它不配有的神秘感。没有魔法咒语,那些「秘密 prompt」清单记录的大多是巧合。
真正有效的做法一点也不酷:把任务描述得足够清楚,清楚到你要的输出就是最自然的续写。
这个说法直接来自机制本身。模型在做的是预测接下来是什么。你的 prompt 负责铺好条件。好的 prompt 让想要的答案成为最可能接下去的东西。
四种结构
几乎所有有效的 prompt 都是这几种的组合。
1 · 说清输出长什么样
回报最高的一个习惯。大多数令人失望的输出,都来自目标描述不清。
弱:总结这篇文章。
更好:用三个要点总结这篇文章,每条不超过 20 字,重点写改了什么,而不是背景。
长度、格式、重点、读者、不要什么。每一个没被说清的维度,模型都会去猜。
2 · 给例子,而不是描述例子
只要输出有特定形状,例子就胜过描述。两个想要输出的例子,比三段说明传达得更多,还能消掉你根本没意识到的歧义。
这是单个技巧里杠杆率最高的一个。见用示例代替描述。
3 · 给推理留出空间
对多步问题,先要步骤再要答案。每个 token 只走一次前向,所以把中间过程写出来是真的多做了一次计算,不是在表演。见让模型一步步思考。
4 · 补上它不可能知道的上下文
模型不知道你的代码库、你公司内部的术语,也不知道上周做了什么决定。如果答案依赖训练数据之外的信息,就把它写进去。
信息太大、没办法整块塞进去时,就检索出相关的那部分——检索增强生成(RAG)就是干这个的。
把 prompt 本身结构化
只要超过一句话,就把各部分分开:
任务:从下面的会议记录里抽出所有行动项。
输出格式:每项一行,「OWNER: action」。
没写负责人时,写「UNASSIGNED」。
会议记录:
---
{notes}
---分隔符的作用比看上去大。它们防止模型把指令和内容搞混——还堵上了一个真实的安全缺口:内容块里的文本本身,就可能包含看起来像指令的东西。
顺序也有讲究,理由很机械:开头放稳定的内容,前缀缓存才有效。固定指令放前面,可变输入放最后。
一直有效的做法
正面表述优于否定表述。「用一个段落回答」比「不要写好几段」更管用。描述目标,比把替代选项围起来更可靠。
明确允许它拒答。 加上「如果笔记里没有这条信息,就直说」,能明显减少编造。不加的话,生成循环会一头扎进作答,把空位填满。
一次只做一件事。 一个 prompt 里塞四个请求,得到的就是四个平庸答案。拆开。
领域不明确时,给个角色。「以安全工程师的身份来审这份东西」能有效地改变强调的重点。这是真实的语境设定,不是性格扮演——而且它不会给模型补上本来没有的专业能力。
没用的做法
客气和催促。 请、谢谢、「这对我职业生涯非常重要」,都是民间传说。就算有效果也微乎其微、时有时无。
堆形容词。「专家级、世界一流、高度详细」增加的是 token,不是能力。
为了长而长。 任务已经说清之后,多出来的文字只会稀释注意力,还费钱。
问题不在 prompt 的时候
写 prompt 解决不了所有问题,而把失败归错因会浪费大量时间。
模型缺信息,你需要检索。模型缺能力,你需要更强的模型。模型要对外部世界动手,你需要工具。输出格式必须被保证、而不只是大概率对,你需要结构化输出约束。
Prompt 不灵了,接下来怎么办?讲的就是怎么把它们区分开。
要点回顾
- 写 prompt 是描述任务,不是念咒——让想要的输出成为最自然的续写。
- 四种结构:说清输出、给例子、留出推理空间、补上缺失的上下文。
- 用分隔符、把稳定内容放前面、优先用正面指令,并明确允许它说「我不知道」。
- 客气、催促、堆形容词,都没用。
- 有些失败是能力、信息或格式问题,不是 prompt 问题。
下一篇: 什么是 system prompt?