1. Prompt 不是“提示”,是一种“促发”
1.1 光看中文译名,容易把 Prompt 用窄了
Prompt 这个词在英文里有名词和动词两种用法。作名词是“提示、线索”,作动词是“促使、推动”。很多教程把它翻译成“提示词”,这个译法方便是方便,但也埋了一个坑:大家真把它当成“随便提示一下”的东西了。
于是常见的画面就是:
“帮我写个方案。” “帮我总结一下这篇文章。” “写个脚本。”
这种一句话指令扔给大模型,模型当然也会回应,但回应质量完全靠运气。因为它不知道你要什么方案、给谁看、有没有什么背景、格式要求是什么。它只能按照概率去“猜”你最可能想要的答案。用一个不精确的词说,这叫“平均化输出”——看起来没错,但放到你的场景里,基本没法直接用。
我在实际使用中越来越觉得,Prompt 更像是你在向一个外包同事下达需求。你把需求讲清楚了,对方才能交付可用的东西。讲不清楚,对方只能按自己的理解乱来,最后互相折磨。带着这个心态去写,比背一百个“技巧”管用。
1.2 一句话 Prompt 和四要素 Prompt 差在哪里
先看两段对比。
第一段,是很多人习惯的写法:
“帮我写一个社区活动方案。”
第二段,是稍微组织了结构的写法:
“请给我一份社区活动方案草稿。活动主题是亲子市集,时间是本周六下午,地点在社区广场,目标人群是带孩子的家庭,预算 5000 元。方案里请包含签到流程、摊位安排、应急处理三个部分,用表格输出,每个部分不超过 100 字,结尾注明需要额外准备的物料。”
后者就是把 Prompt 拆成了四个部分:任务、对象、依据、交付。
任务是什么?要做一份活动方案草稿。对象是谁?给活动现场的筹备人员看,而不是给物业公司或赞助商看。依据有哪些?活动主题、时间、地点、人群、预算。交付格式是什么?表格、每项不超 100 字、附物料清单。
四个部分一旦齐全,模型的输出质量会立刻上一个大台阶。这本质上不是玄学,而是信息量变大了,模型可以猜测的空间变小了,它只能照着你的约束走。
所以这篇文章想讲透一件事:与其满世界搜各种复杂模板,不如先把这四个要素练熟。我用这个框架写了快两年 Prompt,到现在给新同事讲的时候,还是拿它当底子。
2. 把任务、对象、依据、交付拆开说
2.1 先说“任务”:动词不清晰,AI 就开始瞎猜
任务要素是四要素里的地基。它要回答的问题是:你到底想让 AI 做什么动作,产出什么结果。
很多人写任务的时候只扔一个动词,比如“分析一下”“介绍一下”“生成一个”。问题是,这种动词太宽泛,模型不知道“分析”需要分析到哪个深度、“介绍”是介绍给谁听、“生成”要生成什么格式。结果自然就是模板化的“您好,以下是……”。
我自己的习惯是,任务里必须包含“动作 + 产出物 + 完成标准”。
举个直观对比。弱版本是:“帮我分析一下这几个月的销售数据。”强版本是:“请根据附件中 1 到 3 月的销售明细,找出销售额连续下降的产品线,列出前三条,并说明下降的可能原因,按影响程度排序。”后者的“动作”是找出来、列出、说明、排序,“产出物”是前三名列表,“完成标准”是按影响程度排序。
另外,如果任务里其实包含了好几个步骤,不要用一句话糊弄过去。可以用编号把它拆开:
- 提取 1 到 3 月各产品线销售额;
- 计算环比变化;
- 找出连续三个月下滑的线;
- 按下滑幅度排序并给出原因。
把步骤一条条列出来之后,模型在执行时就不容易漏环节。我试过很多次,任务步骤越结构化,输出就越接近“可以直接检查的草稿”,而不是“又要我重新组织一遍的素材”。
2.2 “对象”:别让 AI 猜它该扮演谁、面对谁
对象要素往往被忽略,但它决定了整个输出的语气、深度甚至术语体系。
对象其实有两层。
第一层是“AI 该以什么角色来做这件事”。你在 Prompt 里明确写“你是一位有十年经验的儿科医生”“你是资深财务分析师”“你是给新人做培训的运营老手”,模型输出的立场和用词会明显不一样。为什么?因为大模型在训练时看过大量不同身份的人写的文本,你给一个人设,它就会去匹配对应的表达分布。
第二层是“内容要给谁看”。同样讲咖啡店,面对顾客和面对供应商,写出来的东西完全不是一回事。面对顾客你会写风味、环境、适合什么场景;面对供应商你会写订货量、包装规格、结算周期。所以写 Prompt 时,把“读者/使用对象”也顺手写进去,比如:“这段话是给完全没有编程基础的同事看的,请避免术语,用大白话解释。”
有时候这个要素甚至比任务还关键。我遇到过很多次,任务写得很明确,但忘了写受众,模型自动默认成“面向通用大众”的口吻,出来的内容放在工作群里立刻显得不搭。如果一开始就写清楚受众,这个问题可以完全避免。
2.3 “依据”:喂给 AI 的材料,比让它“发明”靠谱
依据要素,是四要素里最容易被新手跳过的一环。具体说,它包含三类东西:背景资料、约束条件、参考案例。
背景资料是你手头已有的信息,比如文档内容、数据、对话记录。大模型的知识截止日期是固定的,它不可能“知道”你公司内部的情况,也不可能知道你这周刚发生的事。所以凡是事实、数据、内部信息,都应该直接贴进 Prompt,别指望它自己查。
这里有个判断标准:如果你问的问题,换个完全没背景的人也能凭常识回答,那不贴材料也行;但只要涉及具体数据或专有事件,务必把材料贴进去。否则模型就会现场编一段看起来合理但无法验证的东西,你还得花时间核对,得不偿失。
约束条件也很好理解。预算、时间、篇幅、禁用事项都属于这类。比如“不使用营销黑话”“不包含未经确认的数据”“输出段落不要超过五段”。写约束条件的价值在于,它能把模型的发挥空间框在你可接受的范围里。
参考案例则相当于“按这个风格来”。你想让它模仿某类写法,直接给它一小段样例,它复刻起来比任何形容词都精准。我自己写文案类 Prompt 时,一定会附上一段以前觉得满意的文案作为风格锚点。
实际操作中,依据要素的信息密度是四要素里最大的,也是最值得花时间准备的部分。准备得越充分,模型的输出越“靠谱”,而且越不容易胡编。
2.4 “交付”:格式即体验,细节决定输出可用性
很多人的 Prompt 写得差不多了,就差最后一句“交付要求”,然后模型就给他一段不分段的长文。你还要自己重新排版、按条理拆分、寻找重点,这等于把本该模型干的活揽回自己身上。
交付要素管的是:输出长什么样、多长、什么结构。
常见的交付要求包括:
- 格式:表格、列表、代码块、JSON、纯文本;
- 长度:字数上限、条目数、段落数;
- 语气:正式、口语化、热情、克制;
- 结构:先结论后展开,还是按时间顺序展开;
- 附加说明:结尾是否需要标注待确认事项,是否需要给出来源。
我通常还会加一条“如果信息不足,请明确指出,不要强行编造”。这一条特别有用,它能引导模型摆出未知项,而不是圆一个逻辑闭合但内容错误的答案。
另外,交付不一定非要在最后才写。遇到特别复杂的任务,我会把交付分成两轮:第一轮先让模型写大纲,我确认结构没问题之后,第二轮再让它按大纲展开。这样比一口气生成几千字再回头改要省事得多。这个习惯也推荐你试试,尤其是处理长文写作或者多模块方案时,体验差异非常明显。
表:四要素的关键问题
| 要素 | 要回答的问题 | 没写清楚的后果 |
|---|---|---|
| 任务 | 要让 AI 做什么动作、产出什么 | 输出平均化,不贴合需求 |
| 对象 | 谁来产出的视角、内容给谁看 | 语气和深浅完全飘移 |
| 依据 | 有哪些材料、约束、参考 | 模型靠猜,容易出现编造 |
| 交付 | 输出格式、长度、语气、结构 | 拿到的内容需要大量二次加工 |
3. 热搜词背后的三个真实问题:拦截、闪退、模板迷信
3.1 invalid prompt:你的输入被系统拦住了,为什么
经常能看到有人报错“invalid prompt”,或者类似“your prompt was flagged as potentially violating our usage policy”的提示。这个报错在中文圈里常被当作一个没有感情的“系统拒绝”,但只要拆开看,原因并没有那么神秘。
主流大模型服务在输入和输出两侧都会放一层安全过滤机制,目的是防止内容出界。这一层机制是概率模型做的,它会把文本拆开,判断有没有触发某些特征。触发它不一定是你的文本真正出了界,有时候只是某个词和历史数据里的负面样本撞了车,或者一段话整体语义让它觉得危险。
实操中,我遇到过的触发点大概分三种。一是文本里包含攻击性、自我伤害或违法相关的内容。二是文本包含大量负向词,比如很多人在 Prompt 里写“不要写暴力内容、不要提违法信息”,这种写法反而会把负向词喂给过滤器。三是格式异常,比如超长乱码、一堆特殊符号连排、意料之外的 URL 混入,也会让过滤器误判。
对应的处理方式很直接:
- 把负向要求改成正向要求。与其说“不要写成广告腔”,不如直接说“用平实的叙述语气写”;
- 检查有没有冗余的 URL、链接、奇怪符号,清理掉再发送;
- 如果整段都在被拦,把它拆成两三段逐段试,定位到具体是哪一句触发;
- 换一个句式重新表述,很多情况只是表述本身引起了误判,不代表这个需求有问题。
碰到这类报错先别慌,绝大多数都不是你的需求有问题,而是措辞撞上了过滤器。调整一下描述方式,基本都能解决。
3.2 prompt 闪退:多半不是模型变笨了,而是上下文爆了
另一个高频热词是“prompt 闪退”。这里的“闪退”其实不一定指软件程序崩溃,更多时候指的是:发完 Prompt 之后,应用转圈半天然后报错,或者整个会话无法继续。
真正的原因,绝大多数和“上下文窗口被撑满”有关。
大模型的输入和输出都以 token 为单位计数。一个 token 不是“一个字”,一段中文文本里,一个汉字大约占 1 到 2 个 token,英文一个单词约 1 个 token。对话窗口是有限的,一旦你的历史消息加当前 Prompt 加即将生成的回复累加超过上限,就会触发超限报错。
很多人遇到闪退的第一反应是“模型服务不稳定”,但转头看一下自己的对话,可能已经来回聊了几十轮,每轮还都带着一大段长文。上下文早就在临界边缘了。尤其是开了联网搜索或长文档摘要功能,中间对象塞进去的临时内容也会占用大量空间。
要在正常使用中尽量避免这个问题,我的习惯是三条:
- 开启新对话。新话题不要硬续在老会话里,老会话的每一条历史消息都会占 token;
- 长文档不要整篇粘贴。可以先让模型读摘要或分段喂入,不然一上来就超出上下文;
- 需要长期参考的资料,优先放进可检索的知识库或外挂存储,而不是每次复制粘贴进 Prompt。
另外,如果你发现某次 Prompt 一发送就报错,而之前的对话都能正常响应,可以优先怀疑是上下文过长,而不是模型本身出了问题。换一个新对话窗口,把同样的 Prompt 直接发一次,往往就好了。
3.3 复杂模板不是万能咒语
伴随 Prompt 概念的普及,市面上出现了大量“prompt optimizer”工具和几百行的高级模板。这些工具确实能帮忙整理措辞,但一个容易被忽略的事实是:模板的目的是帮你想清楚,而不是帮你绕开思考。
有些模板动辄几十条角色设定,看完整个 Prompt 我仍然不知道它想让模型具体干什么。这种模板属于装饰性模板,它看起来很专业,但并没有把任务、对象、依据、交付说清楚。我自己拆过几个流行的“万能提示词”,发现核心可用信息其实就那么两三行,剩下的都是绕来绕去的身份修饰。
判断一个模板适不适合你,有个很简单的检查法:把模板里的每一行拿出来,问一句“删掉它,输出会不会变差”。如果不会变差,那它就是噪音。真正好用的模板一定是有取舍的,也就是我前面说的四要素都在里面,并且没有一句空话。
你完全可以拿现成模板当起点,但一定要把它改成自己的版本。改的过程中,你才会慢慢理解每一句话的作用是什么,哪些是场景相关的,哪些是必须保留的。工具只是帮你少走弯路,但那条路你得自己走过去。
4. 再说两个底层机制:KV Cache 与 Lost in Middle
4.1 为什么模型总记不住中间的内容
如果你经常让模型处理长文本,可能会发现一个规律:它对你开头说的信息和结尾说的信息记得比较清楚,对夹在中间的内容经常“选择性失忆”。这其实不是错觉,业内管这个现象叫 Lost in Middle(中间丢失)。
之所以会出现这个现象,和 Transformer 模型的注意力机制有关。模型在处理文本时,并不是全程均匀地关注每一个字符。相对而言,它会对开头位置投入更多注意力,因为开头是“背景设定的起点”;也会对结尾投入更多注意力,因为结尾是“最近看到的信息”。而中间夹的内容,注意力会被明显稀释,就像你读一封很长的邮件,通常对开头的问候和结尾的要求记得最清,中间夹的那五段正文反而模糊。
这给写 Prompt 带来的启发非常直接:重要信息要放在开头和结尾两个位置。核心任务、角色设定这些东西放到 Prompt 开头;交付格式、禁忌事项放到 Prompt 结尾。中间的段落用来放参考材料、约束条件等相对次要的内容,就算模型理解得弱一点,也不至于影响最终结果。
如果有一条约束条件特别重要,不能漏,我的做法是开头提一遍,结尾再强调一遍。比如开头写“严格遵守预算 5000 元以内”,结尾再写“请再检查一次:所有方案支出是否控制在 5000 元预算内”。用两次出现换取注意力覆盖,实测对稳定有奇效。
还有一个衍生建议是:长 Prompt 本身也是长文本,也存在 Lost in Middle。也就是说,你写给模型的指令如果太长,模型自己对你的要求也会“中间丢失”。所以不要一股脑写两千字的超长 Prompt,而是把信息按重要性排好序,把最能决定成败的信息放在最关键的位置上。
4.2 KV Cache 是什么,为什么 Prompt 也有缓存
再聊一个更进阶的话题:KV Cache。
先说结论,KV Cache 是一种加速手段。模型在生成文本时,每生成一个新的 token,都要参考历史所有 token 的注意力信息。如果不做缓存,每生成一个字都得把所有历史内容重新算一遍,成本高得离谱。KV Cache 把已经计算过的历史 token 的 Key 和 Value 保留下来,后续生成时直接复用,从而大幅节省计算时间。
和 Prompt 相关的是,现在很多推理服务对前缀相同的 Prompt 会做缓存命中。也就是说,如果你连续多次请求都带着同一段开头,服务端可以直接复用这段开头的计算结果,不必从头再算。
理解这个机制之后,有两个实操建议。
一是把不变的公共前缀放在 Prompt 最前面。比如你的一套固定开头是“你是一名资深数据分析师,请基于以下背景回答我的问题,回答时要先给结论再展开”,那这段内容每次都原样保留,不要改动标点或词序,改动多了,缓存就命中不了了。
二是把变化的参数放在 Prompt 的后面。比如每次调整的问题是“请计算 A 和 B 的相关性”,每次只改这个片段就好,前面的固定部分会继续命中缓存。反复调试时,这种写法既省时间,也能让你对比结果时更容易定位差异。
不过有一点要分清:KV Cache 和“Prompt 作为输入文本的上下文记忆”是两回事。前者是推理引擎的加速机制,用户不需要手动控制;后者是模型对话时携带的全部历史信息,真正影响你每次交互的内容范围。平时讨论“Prompt 太长了”“上下文不够用”,指的一般是后者。
了解这些底层机制,不是为了让你去调模型源码,而在于更理解模型的行为边界。知道模型会怎么读你的 Prompt,知道系统在背后怎么处理你的输入,你写 Prompt 的时候就会有一种“顺着模型的脾气来”的直觉,而不是每次出问题都靠猜。
5. 可以直接抄走的 Prompt 模板与自查清单
5.1 一套四要素填空模板
下面我放一个自己一直在用的通用模板,结构很简单,去掉所有花哨的角色堆叠,直接对着填空就可以:
你是【角色】。 任务:请【动词】并产出【产出物】。 背景依据:【必要的材料、数据、约束条件,最多列 5 条】。 对象/读者:【内容给谁看,或者模拟什么场景】。 交付要求: - 格式:【表格/列表/段落/JSON/代码块】 - 长度控制在:【字数或条数】 - 语气:【正式/轻松/口语化】 - 先给结论再展开,不要遗漏任务中列出的步骤。 - 如果信息不足,请明确说明,不要编造。这个模板最核心的两点,一是键值对清晰,稍微有一点点阅读代码经验的人都能看懂;二是把所有信息分成了模型最容易理解的几个字段,不会揉成一堆绕弯子的话。
用同样的逻辑填一遍前面亲子市集的例子,你会得到:
你是社区活动策划。 任务:产出一份亲子市集活动方案草稿。 背景依据: 1. 时间:本周六下午 2. 地点:社区广场 3. 目标人群:带孩子的社区家庭 4. 预算:5000 元 对象/读者:活动筹备组同事,需要照着清单执行。 交付要求: - 格式:表格 - 三个部分:签到流程、摊位安排、应急处理 - 每个部分不超过 100 字 - 结尾列出额外需要考虑的物料 - 信息不足时请直接指出我自己给不同团队做 Prompt 分享时,给这个模板取的代号是“填空式 Prompt”。名字不重要,重点是它确实能覆盖大多数日常需求。
5.2 三种常见场景的速查变体
通用模板能覆盖日常,但不同场景下的侧重还是略有不同。这里列三种我实际用得最多的场景,你可以对照调整。
表:三种场景的 Prompt 侧重
| 场景 | 重点要素 | 典型写法 |
|---|---|---|
| 学习/理解类 | 依据 + 交付 | 用大白话解释,给一个生活案例,最后让我用自己的话复述并检查 |
| 写文案/做内容 | 对象 + 交付 | 明确读者是谁,给出语气参考和长度限制,提供一段风格样例 |
| 写代码/排查 bug | 任务 + 依据 | 给出技术栈、运行环境、错误信息、输入输出示例,明确边界情况 |
学习类的场景,核心诉求往往是“别绕术语”。所以我会在交付里额外加一句“如果我要向朋友转述,请用我能直接复述的口吻写”。写文案的时候,“对象”要素的权重最大,我会在背景里直接写“读者是 35 岁左右的宝妈,她们最关心的是安全性和性价比,不关心原料工艺的学术细节”。而写代码相关的 Prompt,我会把错误信息和运行环境原样贴进去,而不是转述一遍,减少信息损耗。
三种场景的共性依然是四要素,只是权重不同。把这个权重关系想明白了,比背下来十个具体模板管用得多。
5.3 发送前两分钟,用五个问题自查
写好的 Prompt 不要着急发,先花两分钟过一遍这五个问题。这是我用了一个很笨但有效的方法:把四要素变成五个确认项,每次写完照着查。
- 任务动词是否明确?能不能再具体一点?比如从“分析”改成“找出前三名并解释原因”。
- 对象是否清楚?AI 现在知道自己是站在什么身份、内容给谁看了吗?
- 依据是否充分?材料、数据、约束条件,还缺不缺关键信息?如果模型现在手上只有我们给的这些内容,够不够完成这个任务?
- 交付格式说了吗?表格、列表、代码块、字数限制、语气,哪一个还没有写?
- 有没有把最重要的要求放在开头和结尾?如果任务很复杂,会不会存在中间信息被模型忽略的风险?
最后五分钟的经验是:写完 Prompt 之后,自己默读一遍,然后问自己“如果我是一个完全没上下文的人,能不能只靠这句话就知道该输出什么”。如果答案是“可能不行”,那就继续改,直到这句话自己也能看懂为止。
我自己也经历过一个阶段,看到一个好模板就收藏,收藏了一堆,真到用时一个都想不起来。后来扔掉所有花架子,只留下这个填空结构和五问自查,写 Prompt 的速度和输出质量反而都上来了。
把每次写 Prompt 当成写一份需求文档,把 AI 想象成一个外包同事,把你自己想象成那个要解释需求的人——你心里越清楚要什么,对方的输出就越接近你要的东西。这个道理说起来简单,但做到位的人不多。少一点玄学,多一点把话说清楚的基本功,Prompt 这件事也就这么回事了。