Prompt 实践指南

Prompt(提示词)是一门同 LLM(大语言模型)进行沟通的语言,通过它才能让 LLM 知道应该去做什么以及怎么去做

LLM 擅长处理以下任务:

  • 逻辑推理与分析
  • 信息提取与总结
  • 多语言翻译
  • 内容生成
  • ...

LLM 的局限性:

  • 幻觉问题(Hallucinations):模型可能生成看似合理但实际错误的信息
  • 上下文长度限制(Size Limitation):输入和输出都有长度限制
  • 时效性问题:训练数据有一定的时间截断,无法获取最新信息
  • 逻辑推理边界:复杂的多步推理会导致误差累积,最后可能出现错误结果

Prompt 编写的核心原则

原则一:做什么,编写清晰的指令

为特定目标编写清晰的指令,具体技巧包括:

使用分隔符

使用清晰的分隔符来区分不同的内容部分。

1
2
3
4
"""
将下面的文本总结为要点:
[待总结的文本]
"""

常用的分隔符:

  • """
  • < >
  • <tag></tag>
  • :

排版以及输出

标准化的排版能让 LLM 更好的理解 Prompt, 而标准化的输出有利于外部系统进行结果分析

  • 比较常用的排版格式:Markdown
  • 比较常用的输出格式:JSON,YAML等
1
2
3
4
5
请以 JSON 格式输出结果,包含以下字段:

- title: 标题
- summary: 摘要
- tags: 标签数组

检查条件

在完成任务前,要求模型检查结果是否满足条件,以及不同条件下的处理方式。

1
2
如果提供的文本中不包含日期信息,请输出"未找到日期",
否则提取并格式化日期。

Few-shot

提供更多的示例帮助模型训练,来更好的理解任务:

1
2
3
4
5
将下列形容词转换为比较级:

快乐 → 更快乐
高 → 更高
好 → ______

原则二:怎么做,给模型"思考"的时间

通过推理,来规划步骤,来提高模型输出的准确性。

明确给出必要的执行步骤

明确指定完成任务所需的步骤:

1
2
3
4
5
6
7
请按以下步骤完成任务:

1. 阅读并理解用户需求
2. 分析问题的关键点
3. 列出可能的解决方案
4. 评估每种方案的优劣
5. 给出最终建议

借助模型来规划执行步骤

由于模型擅长分析和推理,可以让模型先分析问题,然后规划出一套执行步骤,最终得出答案。

1
2
3
4
5
6
7
在给出最终答案前,请先:

1. 分析题目要求
2. 列出你的推理过程
3. 验证你的答案

然后再输出最终结论。

多轮对话(Conversation)

通过记忆多轮迭代对话的内容,收集足够多的上下文信息,将上下文提交给 LLM 来获得特定任务的最终答案。

常用 Prompt 模式

角色模式(Persona Pattern)

指定 AI 的角色,然后执行特定的任务。这样可以让模型基于角色的专业领域来回答问题,使答案更加准确。

核心 Prompt 模板:

1
2
你是一位 [角色名称],具备该领域的专业知识和经验。
请基于你的角色背景,帮我完成以下任务:[任务描述]

示例:

1
2
你是一位资深的前端工程师,擅长 React 和 TypeScript。
请帮我设计一个组件的状态管理方案。

信息补充模式(Give more information)

由于 LLM 的训练数据有时效性限制,提供与任务相关的更新更多信息可以帮助 LLM 更好地理解和处理任务。

  • 被动提供,一开始就在 Prompt 中就提供相关的信息,包括示例,关联数据,论文等
  • 主动收集,通过多轮对话的形式,让 AI 来主动收集信息

Few-shot Pattern

提供更多的示例帮助模型训练,来更好的理解任务。

示例应当:

  • 清晰明确
  • 细节足够
  • (可选)包含中间步骤

示例:

1
2
3
4
5
6
7
8
9
请仿照以下格式,描述"猫"这个动物:

动物:狗
特征:忠诚、友好、体型多样
寿命:10-15年

动物:猫
特征:___
寿命:___

认知验证模式(Cognitive Verifier Pattern)

用于生成一些相关问题来收集更多信息,然后生成更准确的最终答案。

核心 Prompt 模板:

1
2
3
4
5
当我向你提问时,请按照以下步骤回答:

1. 首先生成 3-5 个有助于更准确回答问题的补充问题
2. 等我回答这些补充问题后
3. 结合所有答案生成完整的最终答案

翻转交互模式(Flipped Interaction Pattern)

让 AI 逐步询问与任务相关的问题来收集信息,然后结合答案生成最终答案。

核心 Prompt 模板:

1
2
3
4
5
6
我希望你向我提问,以帮助我实现 [目标]。

请按以下方式进行:
1. 逐步向我提问,每次提 [数量] 个问题
2. 持续提问直到 [条件满足] 或达到目标
3. 最后结合所有答案给出最终结论

示例:

1
2
3
4
5
6
7
8
我希望你向我提问,帮助我制定一个学习 Python 的计划。

请按以下方式进行:
1. 逐步向我提问,每次提 2-3 个问题
2. 持续提问直到你充分了解我的背景和目标
3. 最后结合所有答案给出一个详细的学习计划

(AI 会开始提问:你目前有编程基础吗?你每天能投入多少时间学习?你学习 Python 的主要目的是什么?...)

尾部请求模式(Ask for input Pattern)

要开启多轮对话,一般会在 Prompt 结尾处,让 LLM 主动发起下一轮对话。

核心 Prompt 模板:

1
2
3
4
5
在完成上述任务后,请执行以下操作:

1. 总结你刚刚提供的内容 [重复关键要点 Y]
2. 向我提出相关问题 [询问 X],以便继续深入或转向下一个话题
3. 等待我的进一步指示

推理

推理通过对复杂任务进行分析,分解为一个个更小粒度的子任务,并对这些子任务进行合理的规划, 从而得到更严谨更准确的最终答案。

思维链(CoT,Chain of Thought)

所以让 LLM 使用推理将任务分解为步骤,这有助于 LLM 生成更加准确的答案。

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
请按照以下步骤逐步推理并得出结论:

1. 理解问题:[任务的具体要求]
2. 分析条件:[列出已知信息和限制条件]
3. 推理过程:[基于已知条件进行逻辑推理]
4. 验证结果:[检查推理过程是否合理]
5. 得出结论:[给出最终答案]

在给出最终答案前,请完整展示你的推理过程。

可以结合 Few-shot,提供完整的推理示例供模型学习。

大纲扩展模式(Outline Expansion Pattern)

帮助将任务分解为更详细的步骤。

核心 Prompt 模板:

1
2
3
4
5
6
7
请作为大纲扩展器帮我工作,工作流程如下:

1. 根据我提供的 [主题/内容],生成一个要点大纲
2. 询问我想要扩展哪个要点
3. 为我选择的要点创建详细的子大纲
4. 完成后询问我要扩展下一个要点,还是开始其他内容
5. 重复上述过程,直到我表示完成

示例:

1
2
3
4
5
6
7
8
9
10
11
请作为大纲扩展器帮我工作,工作流程如下:

1. 根据我提供的主题:如何学习编程,生成一个要点大纲
2. 询问我想要扩展哪个要点
3. 为我选择的要点创建详细的子大纲
4. 完成后询问我要扩展下一个要点,还是开始其他内容
5. 重复上述过程,直到我表示完成

(AI 会生成:选择编程语言 → 学习基础语法 → 练习编程项目 → 深入学习 → 参与开源社区)
(用户选择:学习基础语法)
(AI 会展开:变量与数据类型 → 控制流 → 函数 → 数据结构 → 面向对象...)

模板模式(Template Pattern)

标准化的排版能让 LLM 更好的理解 Prompt, 而标准化的输出有利于外部系统进行结果分析

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
10
11
12
请严格按照以下模板格式输出你的答案,其中 `<PLACEHOLDER>` 是需要填充内容的占位符:

---

模板开始
-------
<PLACEHOLDER_1>: [在此填充内容]
<PLACEHOLDER_2>: [在此填充内容]
-------
模板结束

注意:请保持模板的整体格式和结构不变,只需填充占位符部分。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
请严格按照以下模板格式输出你的答案,其中 `<PLACEHOLDER>` 是需要填充内容的占位符:

---

模板开始
-------

## 问题分析
<ANALYSIS>

## 解决方案
<SOLUTION>

## 注意事项
<NOTES>

-------
模板结束

注意:请保持模板的整体格式和结构不变,只需填充占位符部分。

优化(Refinement)

借鉴项目管理中的SMART原则,一个好的提示词也应该遵循这些原则。

SMART

好的提示词不是一次就得到的,而是根据场景不断迭代后得到的,从简单到复杂。

不断迭代优化

下面这些模式可以帮助我们完善步骤,并提高用户体验。

使用者的角色模式(Audience Persona Pattern)

限定目标背景,声明使用者是谁,根据使用者的角色来定制化回答。

核心 Prompt 模板:

1
2
3
4
5
6
请向我解释以下内容:[主题/概念]

在解释时请注意:
- 我目前的角色/背景是:[角色描述]
- 请使用适合该背景的语言和示例
- 避免使用过于专业的术语,或对术语进行通俗解释

示例:

1
2
3
4
5
6
7
请向我解释以下内容:什么是"递归"

在解释时请注意:
- 我目前的角色/背景是:完全没有编程经验的小学生
- 请使用适合该背景的语言和示例,比如用"俄罗斯套娃"或"照镜子"来类比
- 避免使用堆栈、调用栈等专业术语,或用简单的语言解释这些术语
- 多举日常生活中的例子帮助理解

问题优化模式(Question Refinement Pattern)

基于上下文以更专业的方式来描述用户输入的问题。

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
10
11
每当我向你提问时,请先执行以下操作:

1. 分析我的问题,理解我的真实意图
2. 建议一个更精确、更专业的问题版本
3. 说明为什么建议的版本更好
4. 询问我是否使用优化后的问题来回答

例如:
我的问题:怎么让网站更快?
你建议:如何优化网站的前端加载性能?
原因:...

食谱模式(Recipe Pattern)

通过填充缺失的步骤来完成任务的所有步骤。

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
10
11
12
我想实现以下目标:[目标描述]

我已经知道需要执行的部分步骤:
1. [步骤 A]
2. [步骤 B]
3. [步骤 C]

请帮我:
1. 补充完整的步骤序列
2. 填充我遗漏的必要步骤
3. 识别并移除不必要的步骤
4. 按正确顺序排列所有步骤

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
我想实现以下目标:在本地搭建一个个人博客网站

我已经知道需要执行的部分步骤:
1. 购买域名
2. 写文章

请帮我:
1. 补充完整的步骤序列
2. 填充我遗漏的必要步骤
3. 识别并移除不必要的步骤
4. 按正确顺序排列所有步骤

(AI 会补充:选择博客框架 → 配置本地开发环境 → 安装主题 → 编写测试文章 → 部署到服务器 → 配置域名解析 → 设置 HTTPS 等)

替代方案模式(Alternative Approaches Pattern)

核心 Prompt 模板:

1
2
3
4
5
6
7
8
针对以下任务 [任务描述],请提供多种解决方案:

1. 列出 3-5 种可行的替代方法
2. 对比每种方法的优缺点
3. 说明各自的适用场景
4. (如果需要)包含我原本提出的方法
5. 给出你的推荐并说明理由
6. 询问我倾向于使用哪种方法

其他模式

菜单操作模式(Menu Actions Pattern)

提供快捷命令列表,识别用户意图并执行。

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
我将使用快捷命令与你交互,请按以下规则响应:

命令列表:
- 当我输入 [命令 X] 时,执行:[操作 Y]
- 当我输入 [命令 Z] 时,执行:[操作 Q]
- 当我输入 [命令 R] 时,执行:[操作 S]

执行完操作后,请询问我下一个指令是什么。
如果输入不在命令列表中,请提示我使用有效的命令。

示例:

1
2
3
4
5
6
7
8
9
10
11
我将使用快捷命令与你交互,请按以下规则响应:

命令列表:
- 当我输入 /s 时,执行:用 3 个要点总结当前对话的核心内容
- 当我输入 /c 时,执行:确认是否清空对话历史
- 当我输入 /h 时,执行:列出所有可用的快捷命令
- 当我输入 /e 时,执行:用更专业的语言重新表述上一个回答
- 当我输入 /x 时,执行:给出上一个回答的具体代码示例

执行完操作后,请询问我下一个指令是什么。
如果输入不在命令列表中,请提示我使用 /h 查看可用命令。

事实清单模式(Fact Check List Pattern)

根据事实清单,对答案进行最后的校验,减小模型的幻觉,提高回答的准确性和可靠性,会在答案后面附上相关的事实来源。

核心 Prompt 模板:

1
2
3
4
5
6
7
8
9
10
11
在提供答案时,请执行事实检查:

1. 列出支撑你答案的所有关键事实
2. 将这些事实插入到输出的 [指定位置,如文末或文首]
3. 这些事实应该是:如果其中任何一项错误,会导致整个答案不成立的基本事实
4. 格式如下:

关键事实:
- 事实 1:[描述]
- 事实 2:[描述]
- 事实 3:[描述]

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
在提供答案时,请执行事实检查:

1. 列出支撑你答案的所有关键事实
2. 将这些事实插入到输出的文末
3. 这些事实应该是:如果其中任何一项错误,会导致整个答案不成立的基本事实
4. 格式如下:

关键事实:
- 事实 1:React 18 于 2022 年 3 月发布
- 事实 2:React 18 引入了并发渲染机制
- 事实 3:useTransition 是 React 18 新增的 Hook
- 事实 4:Concurrent Mode 需要显式启用

(AI 在回答完关于 React 18 的问题后,会在文末列出并验证这些事实)

组合使用模式

实际应用中,可以将多个模式组合使用以获得更好的效果。

示例:结合角色 + 模板 + 思维链

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
你是一位资深的产品经理(角色模式)

请按以下步骤分析这个产品需求(思维链):
1. 理解用户需求
2. 分析技术可行性
3. 评估商业价值
4. 给出建议

并按以下格式输出结果(模板模式):

## 需求分析
<ANALYSIS>

## 可行性评估
<FEASIBILITY>

## 建议
<RECOMMENDATION>

ReAct 模式

ReAct 的核心在于思维链与行动的交替循环

核心思想:

  • Thought(思考):分析当前情况
  • Action(行动):执行具体操作
  • Observation(观察):观察结果
  • 重复:直到任务完成

一个好的 ReAct Prompt 必须具备三个要素:

  • 清晰的工具定义(模型知道有什么工具)。
  • 严格的格式约束(方便代码正则解析 Thought、Action、Action Input)。
  • Few-Shot 示例(这是质量的关键,教模型如何拆解问题)。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Role (角色)
你是一个能力极强的 AI 助手,能够进行分步推理并使用外部工具来回答复杂的问题。

# Tools (工具)
你可以使用以下工具:

1. **[Search]**: 用于搜索互联网上的最新信息、事实或时事。
- Input: 一个具体的搜索查询词。
2. **[Calculator]**: 用于执行数学计算。
- Input: 一个有效的数学表达式(例如:"200 * 7 / 3")。
3. **[KnowledgeRetrieval]**: 用于查找特定文档或内部数据库信息。
- Input: 关键词或语义查询。

# Format Instructions (格式说明)
为了解决用户的问题,你必须严格遵守以下格式。请按顺序执行:

**Question**: 你需要回答的输入问题。
**Thought**: 你应该总是思考下一步该做什么。分析上一步的观察结果或初始问题。
**Action**: 需采取的行动,必须是 [[Search], [Calculator], [KnowledgeRetrieval]] 之一。
**Action Input**: 行动的具体输入内容。
**Observation**: 行动的结果。(**注意:** 这一步不要由你生成!系统会在你输出 Action Input 后提供给你。)
... (Thought/Action/Action Input/Observation 这个循环可以重复 N 次)
**Thought**: 我现在知道最终答案了。
**Final Answer**: 针对原始问题的最终答案。

# Constraints & Rules (约束与规则)
1. **严禁编造 Observation(观察结果)。** 在输出 "Action Input" 后,输出一个换行符并**停止生成**。等待系统为你提供 "Observation"。
2. 你的 "Action" 必须完全匹配提供的工具名称。
3. 你的 "Thought"(思考过程)应该简短、逻辑清晰,并直接推导出下一步行动。
4. 所有的 "Thought" 和 "Final Answer" 必须使用**中文**。
5. 如果你有足够的信息,请直接给出 "Final Answer"。

# Examples (示例)

**Question**: Twitter (X) 现任 CEO 是谁?她的年龄的 0.5 次方是多少?
**Thought**: 我需要先找出 Twitter/X 的现任 CEO 是谁,然后找到她的年龄,最后进行数学计算。
**Action**: [Search]
**Action Input**: Twitter X 现任 CEO
**Observation**: 自 2023 年 6 月起,Linda Yaccarino 担任 X Corp 的 CEO。
**Thought**: 现在我需要找到 Linda Yaccarino 的年龄。
**Action**: [Search]
**Action Input**: Linda Yaccarino 年龄
**Observation**: Linda Yaccarino 出生于 1963 年。截至 2024 年,她大约 61 岁。
**Thought**: 我知道了年龄(61岁)。现在我需要计算 61 的 0.5 次方(即平方根)。
**Action**: [Calculator]
**Action Input**: 61 ** 0.5
**Observation**: 7.81024967591
**Thought**: 我已经完成了计算,现在可以提供最终答案了。
**Final Answer**: Twitter (X) 的现任 CEO 是 Linda Yaccarino。她的年龄(61岁)的 0.5 次方大约是 7.81。

# Current Task (当前任务)
**Question**: {{user_question}}

参考资源