提示词工程还在,分享我 3 年的 Prompt 经验
回想起2023年ChatGPT刚火起来的时候,提示词是个热门话题。三年过去,用日常聊天的方式说几句,模型往往就能理解需求,于是问题变成:还有必要专门学提示词工程吗?文章从模型生成回答的原理讲起,再谈常用写法。

回想起 2023 年 ChatGPT 刚火起来的时候,提示词可是个热门话题。各种教程、模板在网上满天飞,教你怎么给 AI 设定角色、拆解任务、约束回答格式。为了得到一个满意的答案,往往要先准备一大段提示词。
之前在网络上看到过一段话, 对提示词的一段介绍我觉得挺有意思的:
- 提示词 是 AGI 时代的 编程语言。
- 提示词工程是 AGI 时代的 软件工程。
- 提示词工程师是 AGI 时代的 程序员。
这里简单说下AGI(Artificial General Intelligence,通用人工智能),它通常被理解为一个像人一样通用的 AI,能在广泛、开放、跨领域的认知任务中,无需针对每个新任务专门设计或训练,就能以成人水平进行理解、学习、推理、规划、行动和适应,并能把已有知识迁移到新任务和新环境。
按照这个说法,学会写提示词,算不算提前为当上 未来的程序员 做准备了?
但三年过去了,我们的使用AI的体验已经有了不少变化。以前需要写很长一段提示词做说明,反复强调要求,AI 才能完成的任务,现在我们经常使用日常聊天的方式说几句,AI往往就能理解我们的需求。有时候表达不完整,甚至打错了字,它也能结合上下文猜到你的意思。
于是,一个问题就来了,模型越来越聪明,我们还有必要专门学习提示词工程吗?
这难道就是典型的,学得晚,就不用学了?
提示词的入门门槛很低,会聊天、会打字,就行。但想要用得好,还是值得学一些方法。
下面我们就从模型生成回答的原理讲起,再聊聊写提示词的一些常用方法。这样以后遇到问题,我们就能多一点点判断,知道该怎么去做调整。
一、什么是提示词
提示词(Prompt),这个非常简单,可以直接理解为提供给模型的输入内容。
在聊天场景里,我们最容易感知到的提示词,就是聊天框里写下的那一堆问题。比如,把一段文章发给 AI,再加一句“帮我总结一下,控制在 200 字以内”,这段文章和后面的要求,就一起构成了这次提问的提示词。
到了 Agent Harness 场景,模型收到的内容往往会更多。用户可能只说了一句“帮我查一下这个订单”,系统还会把 Agent 的职责、可用工具的说明,以及相关的历史对话上下文等内容一起交给模型。这些由系统补充的内容,加上用户输入的问题,共同构成了模型这一次收到的提示词。

二、模型的回答是怎样生成的
有些人会认为 AI 是一个巨大的知识库,当我们提出问题,它通过检索整合得到答案,事实上模型的工作原理并不是这样。
模型在训练过程中,从海量的数据里学到了语言规律、文字之间的联系,以及处理问题的方式,这些学习结果变成了模型参数,当我们把提示词输入到模型中,它就会通过这些参数来计算后面可能出现的内容。
我们可以把这个过程粗略地理解为一场“超级文字接龙游戏”。
假设我们让模型续写古诗,并输入“床前明月光”
模型通过参数计算下一个字出现的概率:
下一个字是疑的概率:95.2%,因为在古诗词数据里,床前明月光后面接疑的频率极高
下一个字是暗的概率:2.1%
下一个字是吃的概率:0.01%。
按概率优先,AI 选了疑。
接着,AI 把已生成文本更新为:床前明月光,疑。然后把这段话再次输入到模型,继续计算下一个字:
下一个字是是的概率:98.5%
以此类推,逐token生成,直到拼出疑是地上霜,举头望明月,低头思故乡。整个过程就像一场速度极快、高度精确的概率游戏。

同时这也是流失输出的底层原理,你在聊天界面上 看到文字一个一个的蹦出来,就是模型一个一个生成token的过程。当然传输和界面渲染会影响显示节奏,屏幕上每次出现的几个字,不一定对应模型的一次生成步骤。
模型利用训练中学到的规律,计算当前上下文下各个候选词的概率,如果换一个模型,或换一种提问方式,这些概率就会发生变化。
严格来说,模型一次生成的单位叫 Token,不一定是一个汉字或一个单词。模型得到候选 Token 的概率后,会按生成策略选取下一个,有的策略选择概率最高的,有的则按概率采样,并非每次都选概率最高的。
如果把“续写古诗”换成“翻译成英文”,同样的诗句就会引出译文,换成“赏析”,回答又会转向诗词的意境和表达,生成的内容受到任务要求和上下文的共同影响。
从输入到输出,经过了哪些步骤
把常见的自回归文本生成过程简化一下,大致是下面这样:

文本切分(Tokenization),就是把输入拆成模型使用的 Token,再映射成编号。提示词会按照token来拆分,具体如何拆分取决于训练的分词器,一个token可能代表一个汉字、二个汉字或者三个汉字。
向量表示,是把这些编号转换成模型能计算的一组组数字,并结合位置信息。这些向量还会在后续网络层中结合上下文更新。同一个“苹果”,出现在“吃了一个苹果”和“苹果推出新手机”里,处理后的表示会有所不同。
注意力机制(Attention),让模型在处理当前位置时,结合上下文中其他位置的信息。还是“苹果推出新手机”这个例子,“推出”“新手机”等内容,有助于模型处理这里的“苹果”指什么。注意力是 Transformer 的重要组成部分,实际计算还会经过其他网络层。
概率计算和继续生成,则是根据处理后的表示,给候选 Token 计算概率,再按策略选取一个。选出的 Token 会加入序列,影响下一步,直到遇到结束标记、长度限制等停止条件。
为什么要把需求说清楚
模型会根据提示词计算后续 Token 的概率,再逐步生成回答。我们给出的要求不同,生成的内容也会受到影响。
比如让 AI“写一段防晒霜的小红书推广文案”,防晒效果、使用肤感、价格和包装都可以写,但我们想突出的可能只是肤感。这时,可以把要求补充清楚:
帮我写一段防晒霜的小红书推广文案,重点介绍清爽不油腻的肤感。
这就相当于缩小了内容的可选范围。原来有很多方向可以写的,现在“清爽不油腻”成了重点,模型在输出文案的时候,与肤感相关的表达就会有更高的概率出现。
把需求写清楚,会改变模型后续生成内容的概率,让回答更容易沿着我们想要的方向展开。
为什么 AI 会一本正经地胡说八道
使用AI生成回答的时候,很多人都遇到过这种现象,让它推荐几本某个主题的书,它把书名、作者、出版社写得像模像样,结果上网一搜,这本书根本不存在。
这种现象在人工智能领域叫幻觉,英文是 Hallucination。
为什么会产生幻觉?
看完前面的原理,答案就很明显,AI 不是数据库,也没有事实核查能力。它只负责生成看起来通顺、概率上合理的句子。
当 AI 遇到知识库里没有或不确定的问题时,它的逐词预测,它会根据语法结构和概率规律, 把常见的姓氏、看起来像书名的词语和出版社名称拼在一起,按照书名、作者、出版社的顺序写出来,看上去就成了一条完整的书目信息。
于是,它就用非常自信的语气,写出了一个根本不存在的事实。

怎么减少 AI 胡编?
提供资料源:把参考文章或数据直接粘贴给它,并要求仅根据以下资料回答,资料里没提到的就明确说不知道。
允许拒答:在提示词里加一句,如果不确定或不知道,就直接说我不清楚,不要编造。
这样就能把 AI 从自由发挥,拉回到有依据的回答上。
三、提示词的基本结构:RTF-C
在了解了模型生成回答的原理后,我们再来看看如何把我们的需求写成提示词。
平时使用AI,很多不满意的回答,其实都是我们没有把需求说清楚导致的。比如“帮我分析一下这个产品”,你可能想了解它的竞争优势,模型却花了大半篇幅介绍产品功能。这个不能算是回答错误,只是模型并没有给你关心的内容。
我们在写提示词的时候,可以用 RTF-C 这个框架整理需求,角色(Role)、任务(Task)、格式(Format)和背景(Context)
这个也不是说,每一个提示词 都要遵循这个规则,简单任务一句话就够了,不用这么复杂。

1. 角色
如果你去拆解个目前开源的Agent项目的提示词,你就会发现,这些提示词开头基本上就是一上来就先定义身份角色。
就像我们平时写提示词的时候,都用过这样的开头:“你是一位资深产品经理、你是一位技术专家”。为什么我们要先给 AI 安排一个角色呢?
因为同一个问题,从不同人的角度来看,关心的事情往往不一样。
比如我们让 AI 分析一款产品。站在产品经理的角度,它可能会关注产品解决了什么需求、功能设计是否合理,站在用户的角度,更关心的可能是好不好用、值不值得花钱,如果是开发者,就可能重点考虑实现起来有多复杂、有哪些技术难点。
指定角色,就是给 AI 一个看待问题的角度,让它更容易把回答放在我们关心的地方。
角色并不是每次都要写,如果只是翻译一句话、提取一些字段,直接说明任务就可以了。
2. 任务
角色确定以后,接下来就要告诉 AI,具体需要它做什么。
我们平时经常会说“帮我分析一下、帮我优化一下”,但仔细想想,这些话其实留下了不少需要猜测的地方。
比如“帮我优化这篇文章”,你可能只是觉得有些句子读起来不顺,希望调整一下措辞,AI 却可能认为文章结构有问题,把内容顺序改了,连你原本想保留的例子也一起删掉。
我们在写任务时,可以把“优化”这样的笼统要求,换成具体想要它做的事情。如果暂时说不清楚该怎么改,也可以先把自己发现的问题告诉它:
这一章节读起来有些绕,我不确定是内容重复,还是前后衔接有问题。请帮我检查,先指出具体问题,再给出修改后的正文。保留原有观点和必要的技术细节。
这里把需要检查的问题、处理的顺序,以及修改的范围都交代了,AI 就更容易按照我们的意图完成任务。
任务也不一定要一次写得很完整,自己还没想清楚的时候,可以先让 AI 帮忙分析问题,等确定修改方向以后,再让它动手改。
3. 背景
任务说明了要做什么,背景则是帮助 AI 了解,这件事是在什么情况下去完成。
我们和熟悉的同事交流,很多信息大家都明白,不用重复去说,对方也知道。比如你负责什么项目、技术水平如何、这次工作是给谁看的。但和 AI 开始一段新对话时,这些信息如果没有提供,它通常就只能按比较通用常识来回答。
比如“帮我制定一份 Python 学习计划”,对于完全没有编程经验的人,和已经做了几年 Java 开发的人,合适的学习路线显然不一样。前者需要先理解变量、循环和函数,后者可能更希望尽快熟悉 Python 的写法,然后进入实际项目。
所以,我们可以把影响计划安排的信息补充进去:
我有 Java 后端开发经验,刚开始学习 Python,每周能投入五个小时。我想做出一个支持工具调用的简单 Agent,请围绕这个目标安排学习路线,已经掌握的通用编程知识可以简略带过。
有了这些背景,AI 才更容易判断哪些内容可以少讲,哪些需要重点解释,以及学习任务应该安排。
背景也不并不是越多越好。可以想一想,这条信息会不会影响它的回答?已有的经验、可投入的时间和最终目标会影响学习计划,值得提供,与这次学习无关的经历,就没有必要全部写进去。
4. 格式与限制
有时候,AI 已经理解了任务,回答的内容也基本正确,但我们拿到以后,还是需要花不少时间整理。
比如我们想要一段能直接放进文章的正文,但是 AI 给了我们十几个要点,我们准备做一个简短的口头汇报,它却写了一篇几千字的报告。这种情况下,需要提前说明结果应该以什么形式呈现,以及有哪些要求需要遵守。
格式可以是正文、表格、清单,也可以是固定的内容结构。限制则包括篇幅、表达方式、需要保留的内容,以及不能改动的地方。
比如我们要写一段公众号文章,就可以这样说明:
请写成能直接放进公众号的正文,800 字左右,用完整的段落展开,少用零碎的短句。读者没有技术背景,出现必要的术语时,请顺带解释。保留原文中的技术细节,不要添加没有依据的数据和案例。
5. 提示词的顺序
讲完这几个部分,还有一个问题:它们应该按什么顺序来写?
我们可以先交代角色和任务,再补充背景,最后说明输出要求。比如给一个售后 Agent 写提示词,先说明它负责处理哪些售后问题,再介绍处理流程、可用工具和需要遵守的规则。这样写,内容比较连贯,后面检查和修改也方便。当然,这个顺序只是一个参考,具体还要看任务和材料怎么组织更清楚。
内容的位置会不会影响模型的回答呢?2023 年的《Lost in the Middle》论文研究过这个问题。在它测试的长上下文任务中,回答所需的信息放在开头或结尾时,模型通常表现较好,放在中间时表现较差。这说明,即使提供了相同的信息,位置不同,也可能影响模型利用这些信息的效果。

不过,这项研究反映的是当时所测试模型的表现,现在我们使用的模型是否还有同样的问题,不能只靠这篇论文来判断。可以把它当作一个提醒:如果提供了很长的材料,模型却经常漏掉其中的信息,除了检查内容是否清楚,也可以调整一下位置,看看回答有没有改善。
四、提示词的进阶方法
前面的 RTF-C 框架,主要帮助我们把需求交代清楚。但任务稍微复杂一些,只说清楚目标可能还不够。比如,分类标准不好描述,问题需要经过几步计算,或者有几个可行方向需要比较。这时候,就可以用到一些进阶方法。
1. 提供参考示例:少样本提示(Few-shot)
有些要求,我们解释半天,还不如直接给一个例子。
比如让 AI 整理客户反馈,要求按“功能建议、使用故障、其他”分类。只给出分类名称,模型可能不清楚边界:“希望支持离线使用”算功能建议,但“没网的时候打不开”应该算功能建议,还是使用故障?
这时,可以把分类规则和参考示例一起提供:
请将客户反馈分为“功能建议、使用故障、其他”,只输出类别。
分类规则:提出新增能力的,归为功能建议;描述已有功能无法正常使用的,归为使用故障;信息不足以判断的,归为其他。
示例:
输入:希望增加导出 PDF 的功能。
输出:功能建议
输入:点击导出 PDF 后,页面一直报错。
输出:使用故障
输入:导出功能不太好用。
输出:其他
请分类:每次导出文件,应用都会闪退。
在提示词中提供一个示例,通常叫 One-sho,提供几个示例,就叫 Few-shot,也就是少样本提示。模型可以参考这些例子,在当前任务中使用类似的判断方式和输出格式。
示例主要有两个作用:减少对要求的误解,以及让输出的结构和风格更一致。 比如我们要求“只输出类别”,示例中就不要再附上一大段解释,否则文字要求和示例反而会互相冲突。
选择示例时,可以重点看三个方面:
- 相关性:例子要和实际任务接近。想让模型分类客户反馈,就提供真实或接近真实的反馈。
- 多样性:除了容易判断的情况,也要覆盖容易混淆、信息不足的情况,让模型看到分类边界。
- 清晰性:输入、输出要对应,示例之间的标准要一致。内容较长时,可以用 <examples> 和 <example> 标签分隔,也可以直接编号。
示例的数量不用一味求多,先找几个能说明规则和边界的例子即可。
2. 引导逐步分析:思维链(CoT)
有些问题需要经过几步推算,才能得出答案,如果中间没有考虑清楚,漏掉了一些条件,最后的结果就容易出错。
思维链,英文是 Chain of Thought,简称 CoT。它的基本做法,是引导模型生成中间推理步骤,再得出最终答案。
比如我们可以先给出这样的示例:
问题:仓库有 20 箱饮料,每箱 12 瓶,卖出 35 瓶后还剩多少瓶?
解答:原有饮料为 20 × 12=240 瓶,卖出后剩余 240-35=205 瓶。
请用类似方式回答:仓库有 18 箱饮料,每箱 24 瓶,上午卖出 96 瓶,下午又补进 3 箱,现在有多少瓶?
这里的示例不仅给出了答案,还展示了如何把题目中的条件转成计算步骤。
大家常见的“请一步步思考”,也是引导逐步分析的一种提示。不过在实际任务里,如果我们已经知道哪些条件容易被遗漏,就可以直接把它们写出来。
CoT 还有一个相关的扩展,叫自一致性(Self-consistency),针对同一个问题,生成多条推理路径,再汇总其中一致的答案,它更适合答案能够明确比较的任务。
3. 探索不同解法:思维树(ToT)
逐步分析适合沿着一条路径解决问题。但有些任务,在开始时就有好几个方向,我们并不知道哪一个值得继续。
比如写一篇“企业是否需要自建 Agent”的文章,可以从成本讲起,也可以从业务接入、运行可靠性或者效果评测讲起。选哪个角度,会影响后面的案例和论述。
思维树,英文是 Tree of Thoughts,简称 ToT。它会在解决问题的过程中生成多个候选方向,对这些方向进行评估,再选择其中一部分继续展开。发现走不通时,还可以回退,尝试其他分支。
我们可以借用这个思路来确定文章的切入点:
这篇文章面向准备落地 Agent 的企业技术负责人,想回答“哪些能力需要企业自己建设”。
请先提出三个不同的切入角度,为每个角度写出核心观点,以及需要哪些案例或材料支撑。根据目标读者的关注点和现有材料,选出两个值得继续的方向,各写一份简短提纲。
再比较这两份提纲,检查有没有偏离文章要回答的问题。如果某个方向缺少必要材料,做一个详细的说明,再决定调整角度还是暂时放弃。
它让我们有机会在投入大量写作之前,比较不同方向,而不是写完以后才发现切入点不合适。
不过,让模型一次列出三个方案,还不等于完整的 ToT。原论文中的方法还涉及反复生成候选、评估、选择和搜索,通常需要程序组织多次模型调用。我们这种直接写到提示词中的方法,可以理解为借用了它探索和筛选不同路径的思路。
4. 分阶段完成任务:提示词链(Prompt chaining)
还有一类复杂任务,难点在于要连续完成好几件事,而且后面的工作依赖前面的结果。
比如,我们希望 AI 分析产品与竞品的差异,再提炼卖点,最后写一段营销文案。如果一次全部交给它,拿到的文案不满意时,我们还需要往前找:是分析出了问题,卖点没选好,还是表达不合适?
提示词链的做法,就是把这些工作拆成多次调用,将上一步的输出作为下一步的输入。
第一步,先完成产品对比:
请根据提供的产品资料,从价格、核心功能、使用限制和适用人群四个方面,对比我们的产品与两款竞品。用表格呈现,资料没有的信息标为“未知”。
第二步,使用对比结果提炼卖点:
根据上一步的对比表,为我们的产品提炼三条有资料支持的卖点。每条说明对应的产品特点,以及它能解决用户的什么问题。没有依据的优势不要补充。
第三步,再把卖点交给模型写文案:
根据上一步确定的卖点,为科技爱好者写一段约 150 字的社交媒体文案。语气自然,重点介绍使用价值,不添加未经证实的性能承诺。
这样拆开以后,我们可以在每一步检查结果。如果对比表里的产品价格就错了,可以先修正,再继续提炼卖点,避免错误一路传到最后。
提示词链和思维链虽然名字接近,但关注点不同,思维链主要讨论一个问题如何经过中间推理得到答案,提示词链则是在安排多个任务之间的衔接,每一步都有自己的输入和输出。
这里可能会有人 把这个提示词链和Agent进行比较,都可以一步一步完成任务,但是这个和Agent有很大的不同,Agent是有自主决策权,可以根据任务的复杂程度和要求,选择不同的方法来完成任务。这个提示词链,是根据我们的要求,手动拆分成多个任务,每个任务都有自己的输入和输出,这个更像一个工作流。
5. 根据结果持续改进提示词
前面介绍了几种写提示词的方法,但提示词到底有没有用,最终还是要看实际运行结果。我们很难在第一次就把要求想周全,有些表达是否清楚、哪些条件有所遗漏,往往用过几次才会发现。
这时也可以让 AI 帮我们改写提示词。把原来的提示词、实际输出,以及自己不满意的地方一起交给它,让它分析结果为什么偏离预期,找出指令中含糊、遗漏或者相互矛盾的地方,再提出修改建议。如果我们自己还没想清楚要求,也可以让 AI 先提问,帮助我们把需求梳理清楚,再动手改写。
不过,AI 给出的修改建议也需要我们判断。它未必知道哪些要求最重要,也可能把一次性的偏好写成所有任务都要遵守的规则。我们需要确认,修改后的提示词是否准确表达了自己的意图,有没有增加不必要的限制。持续改进也包括删掉重复、过时或相互冲突的内容,提示词并不是越写越长就越好。
改完以后,再拿之前处理过的输入在尝试一遍,需要看看原来的问题是否得到解决,其他结果有没有受到影响。经过几轮使用、反馈和调整,把反复有效的要求保留下来,提示词才会逐渐适合自己的任务。AI 可以帮助我们分析问题、整理表达,而修改是否有效,仍然要靠实际结果来判断。
五、结语
AI 会越来越聪明,我们也许不再需要琢磨复杂的提示词写法,用平常说话的方式就能让它完成很多事情。但了解这些提示词优化的方法,仍然能够让我们更好地使用它。当模型回答不满意时,我们可以判断是不是缺了背景资料,或者可以给一些示例,任务复杂时可以引导分析、比较不同方向,或者分阶段完成。有了这些方法,我们就多了一些调整的依据。
写提示词的过程,也是在整理自己的想法。AI 可以帮助我们分析和执行,而我们需要逐渐想清楚,要解决什么问题,需要什么才能做好,怎样才算做好。随着 AI 能做的事情越来越多,把自己的想法想清楚、表达清楚,也会变得越来越重要。
本文由人人都是产品经理作者【叶小钗】,微信公众号:【叶小钗】,原创/授权 发布于人人都是产品经理,未经许可,禁止转载。
题图来自Unsplash,基于 CC0 协议。
- 目前还没评论,等你发挥!

起点课堂会员权益



