一、Prompt 到底是什么?

从技术视角看,大模型是一个 条件概率模型:

它根据「前面看到的一串 token(词元)」来预测「下一个 token」。

这整串输入 token 就是模型的上下文(context),而我们人为、有意设计的那一部分,就是 Prompt。

可以这么理解:

Prompt = 你有意识写出来,用来引导模型行为的那部分输入文本。

它本质上是:

一段「自然语言程序」

通过控制输入的内容和结构,来 “编程”模型的行为

在对话式模型中,一般会分三类提示:

系统提示(System Prompt)

由开发者/平台预先设定

设定:模型的「人设」、价值观、行为边界、语气风格等

作用时间:贯穿整个会话,全局生效

例:

你是一个专业、谨慎的医疗助手,只能给出一般性健康建议,不能替代医生诊断,遇到危险症状必须提醒用户就医。

开发者/应用提示(Developer Prompt)

在很多 API 中,用来写「业务逻辑」和「规则」

比如:输出 JSON、调用工具、遵守某个业务流程

用户提示(User Prompt)

就是你在对话框里实际输入的内容:问题、要求、文本、数据等

决定本轮具体要做什么

整段「系统 + 开发者 + 用户」合在一起,是模型真正看到的 Prompt。

二、Prompt 在模型内部是怎么“起作用”的?

从「黑盒」往里多看一步,可以更理解为什么写法差一点,结果会天差地别。

文本被切成 Token

例如一句话「请用通俗语言解释机器学习」

会被分解成若干个 token(字、词或词片段)

模型只认 token,不认「字」或「词」这种自然语言概念

所有 token 一起进入注意力机制(Transformer)

模型会对整段 Prompt + 历史对话做「自注意力」计算

哪个 token 重要、跟哪些 token 强相关,都是在这里算出来的

Prompt 决定了“问题空间”和“风格空间”

你写的是“以搞笑口吻写一个程序员脱单段子”,它就去「搞笑 + 情感 + 互联网文化」这个区域找概率最高的续写

你写的是“请以审计报告格式分析以下财报风险”,它就朝「财务、审计、报告体」这个区域靠

上下文窗口限制 Prompt 长度

每个模型有固定的「最大上下文长度」(比如 8K、32K token)

超过就会被截断,最前面的内容可能直接被“忘掉”

这也是为什么要学会 精简 Prompt、用结构化方式组织信息

三、一个“高级” Prompt 通常长什么样?

可以把 Prompt 想象成一个小型需求文档。一般会包含:

角色设定(Role) – 先说「你是谁」

任务说明(Task / Instruction) – 再说「要干什么」

输入内容 / 背景(Context/Input) – 提供材料 & 情境

示例(Examples,optional) – 告诉它「像这样做」

输出要求 / 约束(Constraints / Output Format) – 最后规定「怎么写、写成什么样」

模板化示例(可直接复用)

你现在是一个【角色】,具备【专业背景或能力边界】。

任务:

【清晰地描述你要它完成的事情,而不是一句话带过】

输入背景:

【把相关信息、原始文本、数据、场景,用分隔符清晰贴在这里】

===

【原文 / 数据 / 场景描述】

===

注意事项 / 约束:

1. 【字数 / 篇幅要求】

2. 【结构要求:是否要分点、用表格、先结论后分析等】

3. 【风格要求:口语 / 正式 / 严谨 / 幽默 / 带例子等】

4. 【安全边界:不能编造数据、无法确认的地方要说不知道等】

如果你发现任务描述不清楚,请先向我提出 2~3 个澄清问题,再开始正式回答。

四、常见 Prompt 技术和「进阶玩法」

这一块是很多人觉得“太抽象”的地方,我用尽量白话的方式讲。

4.1 Zero‑shot / Few‑shot / One‑shot

Zero‑shot(零样本)

不给任何示例,直接发指令

例:

请把下面中文翻译成法语:你好,你好吗?

One‑shot(单样本)

给 1 个示例,让模型知道你想要的样子

适合简单但格式特殊的任务

Few‑shot(少样本)

给多个「输入-输出」示例

让模型在 Prompt 里「类比学习」

特别适合:自定义分类、特定风格模仿、复杂格式输出

例子(Few‑shot 分类):

你是一名情感分析助手,请判断句子情感,输出“正面 / 负面 / 中性”三选一。

示例:

文本:这个产品太好用了,我会一直回购。

情感:正面

文本:这次服务体验让我很失望。

情感:负面

文本:天气一般般,还行吧。

情感:中性

现在请判断以下文本:

文本:我觉得这次假期还可以。

情感:

4.2 思维链(Chain‑of‑Thought, CoT)

思想:让模型不要直接给答案,而是「一步步把推理过程写出来」。

做法有两种:

示例式 CoT(Few‑shot CoT)

在 Prompt 里给出「题目 + 推理过程 + 答案」的示例

模型会模仿你“先分析再作答”的模式

零样本思维链(Zero‑shot CoT)

在提问末尾加一句类似:

请一步一步地分析再给出结论。

模型就会先列出推理步骤,再给最终答案

什么时候用?

数学、逻辑推理、法律推理、复杂代码改造、系统设计题等

任何「直接猜结果容易错,需要分析过程」的地方,都值得用 CoT

4.3 自一致(Self‑Consistency)

多次让模型回答同一个问题(可稍微改写 Prompt、调高 temperature)

对多个答案投票 / 综合,选出最合理的一个

特别适合:关键决策、推理正确性很重要的任务

你可以让模型自己做第一轮筛选,例如:

上面是你对同一问题生成的 5 个答案。

现在请你作为一个“评审模型”,从正确性、一致性和逻辑性三方面,选出最优答案,并说明理由。

4.4 Prompt 链(Prompt Chaining)

把复杂任务拆成几步,每一步一个 Prompt:

Prompt A:从原始材料中抽取关键信息

Prompt B:基于这些信息生成结构化大纲

Prompt C:根据大纲扩写成文章

Prompt D:最后再做风格润色或控制字数

好处:

可控性强:每一步都能检查 & 修改

适合自动化:可以在代码里串起来做流水线

4.5 RAG:检索增强生成(Retrieval‑Augmented Generation)

当你发现:

模型经常「胡编」

或者你希望它严格基于某些文档、知识库回答

就需要:

先用检索系统从文档库中找出最相关的几段内容

把这些内容放进 Prompt 的「上下文」部分

再让模型基于这些内容作答,并要求「引用原文」

简单 Prompt 例子:

下面是与用户问题相关的文档片段,请你只依据这些内容回答问题,不要添加外部知识。

文档片段:

===

【片段 1】

【片段 2】

===

问题:……

回答要求:

1. 优先引用文档中的说法;

2. 如果文档中没有信息,请明确说明“文档未提及”,不要猜。

五、如何系统性地写出“好用”的 Prompt?

给你一套可以自己照着练习的「实战流程」。

步骤 1:先写出“糙版 Prompt”

不用一上来就很完美,先把需求一句话说出来:

帮我写一个关于 AI 在教育领域应用的公众号文章,1000 字左右。

这就是你的「V0 版本」。

步骤 2:加上角色 & 目标读者

你是一位长期写教育科技专栏的公众号作者,读者主要是中小学一线老师。

请写一篇关于「AI 在教育领域的实际应用」的文章。

这样模型知道 写给谁、从什么视角写。

步骤 3:补充结构和风格约束

文章结构:

开头用一个具体课堂场景引出话题(100~150 字);

中间分 3 部分:

AI 如何帮助老师备课

AI 如何辅助个性化作业与辅导

AI 带来的风险与误用案例

结尾给出 2~3 条对老师可执行的建议。

风格:口语化、具体、有画面感,避免空洞口号。

步骤 4:让模型先生成提纲,再写正文(分步)

Prompt 1:

先只生成文章详细提纲,每一部分写出要点和示例,不要写正文。

检查没问题后,再 Prompt 2:

按照上面的提纲,完整写出文章正文,注意:……

通过「拆步」+「约束」,你会发现输出质量会明显上一个台阶。

六、不同场景下的 Prompt 模板示例(可直接套用)

下面给你几个场景的「可落地」模板。

6.1 写代码 & 查 Bug

你是一名有 10 年经验的【语言/技术栈】工程师。

任务:

1. 阅读下面这段代码;

2. 找出可能的 bug、性能问题和不规范之处;

3. 给出修改后的代码和详细解释。

代码:

```语言

【代码粘贴在这里】

输出要求:

先用项目符号列出每个问题;

然后给出修改后的完整代码;

最后用分点的方式解释每处修改的原因。

6.2 文本改写(公文、报告、邮件)

你是一名【领域】专业写作助手,擅长【公文 / 商务邮件 / 学术论文】写作。

任务:

将下面这段文字改写为【目标文体】,要求:

1. 保留原意,不添加新信息;

2. 语气【正式 / 客观 / 委婉】;

3. 字数与原文大致相当。

原文:

===

【原文粘贴这里】

===

输出要求:

- 只输出改写后的文本,不要解释。

6.3 从长文中抽取结构化信息

你是一名数据标注助手,任务是从文本中提取结构化信息。

请从下面的文本中提取所有【公司名、联系人、电话、邮件】,以 JSON 数组形式输出。

如果某个字段缺失,用 null 填充。

文本:

===

【合同 / 邮件 / 招标文件内容】

===

输出格式(示例):

[

  {

    "公司名": "...",

    "联系人": "...",

    "电话": "...",

    "邮件": "..."

  },

  ...

]

七、把 Prompt 当“代码”来管理

当你开始在多个项目中频繁用 Prompt,就会遇到:

同一个任务,有很多版本的 Prompt,不知道哪个最好

改了一处,别的地方跟着乱了

同事之间没法共享、复用

建议你:

把 Prompt 抽象成“模板 + 参数”

比如 LandingPageSpec(产品描述, 目标用户, 卖点…)

这样只换变量就能生成不同落地页提示词

为重要 Prompt 做版本号

V1、V2、V3,每版记录改动和效果

避免“今天改一个词,明天又忘了为什么改”

把「输出不好」当作测试失败,而不是模型变蠢

保存那条糟糕输出

标注:哪里没做到预期(忽略约束?乱编事实?结构错?)

针对性补一句 Prompt,例如:

如果你需要编造输入中没有的数据,请先提示我确认,而不是直接写。

八、总结一下(真正可执行的“Prompt 心法”)

Prompt 不是一句“帮我写点啥”,而是一份结构化的「任务说明书」:包括角色、任务、上下文、示例、约束。

想要“高级效果”,就要用“高级写法”:

善用 Few‑shot、Chain‑of‑Thought、Prompt 链、RAG 等技巧

复杂任务要拆步骤:先提纲再正文,先抽取再生成,先推理再总结。

把 Prompt 当代码一样版本化、抽象化和复用:写出“模板级”提示,而不是一条条零散的句子。

更多推荐