Prompt(提示词)是一门同
LLM(大语言模型)进行沟通的语言,通过它才能让 LLM
知道应该去做什么以及怎么去做。
LLM 擅长处理以下任务:
- 逻辑推理与分析
- 信息提取与总结
- 多语言翻译
- 内容生成
- ...
LLM 的局限性:
- 幻觉问题(Hallucinations):模型可能生成看似合理但实际错误的信息
- 上下文长度限制(Size
Limitation):输入和输出都有长度限制
- 时效性问题:训练数据有一定的时间截断,无法获取最新信息
- 逻辑推理边界:复杂的多步推理会导致误差累积,最后可能出现错误结果
Prompt 编写的核心原则
原则一:做什么,编写清晰的指令
为特定目标编写清晰的指令,具体技巧包括:
使用分隔符
使用清晰的分隔符来区分不同的内容部分。
1 2 3 4
| """ 将下面的文本总结为要点: [待总结的文本] """
|
常用的分隔符:
排版以及输出
标准化的排版能让 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。 请帮我设计一个组件的状态管理方案。
|
由于 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 的主要目的是什么?...)
|
要开启多轮对话,一般会在 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. 询问我倾向于使用哪种方法
|
其他模式
提供快捷命令列表,识别用户意图并执行。
核心 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}}
|
参考资源