提示词基础与最佳实践
课程简介
编写清晰指令、提供参考文本、分解复杂任务等核心原则。
🎬 本课程视频:Prompt Engineering — 提示词工程
提示词基础与最佳实践
一、什么是提示工程?
提示工程(Prompt Engineering)是设计和优化输入提示词,以引导大语言模型生成期望输出的技术。它不是简单地「写提示」,而是一套系统的工程方法。
Andrew Ng 在课程中强调:提示词是与大语言模型交互的核心接口。模型能力再强,如果输入提示词质量差,输出质量也高不到哪里去。
1.1 提示工程的演进
从最简单的单轮问答,到包含上下文、示例和约束的复杂提示词,提示工程已经发展出一套成熟的方法论:
第一代:简单指令 → 「翻译这句话」
第二代:带上下文 → 「作为一位专业翻译,翻译这句话:I love you」
第三代:带示例 → 「如下是翻译示例:Hello → 你好。请翻译:I love you」
第四代:结构化提示 → 「角色+任务+格式+约束+示例」的组合
二、核心原则一:清晰明确
2.1 模糊 vs 清晰的指令
模糊的指令是提示词效果差的首要原因。
❌ 模糊:「写一段关于机器学习的文字」
✅ 清晰:「写一段 200 字的介绍,向没有编程背景的读者解释什么是监督学习。要求:包含一个生活中的例子,避免使用专业术语,适合初中文化程度的读者。」
2.2 清晰指令的要素
- 任务动词明确:用「写」「翻译」「总结」「分类」「生成代码」等具体动词
- 输出格式明确:指定格式(JSON、Markdown、表格)和长度(字数、段落数)
- 目标受众明确:说明回答给谁看(专家、管理者、小白用户)
- 约束条件明确:主题范围、禁止使用的术语、必须包含的元素
2.3 实用技巧
多步指令分开写:
❌ 「阅读这篇文章,总结要点,然后将其翻译成英文,最后用 JSON 格式输出」
✅ 分三步:
Step 1: 阅读以下文章,列出 3-5 个核心要点。
Step 2: 将上述要点翻译成英文。
Step 3: 将英文要点按以下 JSON 格式输出。
三、核心原则二:提供参考
3.1 为什么提供参考有效?
大语言模型本质上是一个模式匹配和生成的系统。给定示例后,模型能够快速理解期望的输出格式、风格、复杂度和结构,不需要从零开始「猜测」你的需求。
3.2 示例选择
- 2-3 个覆盖不同场景的示例比 10 个同类型示例更有效
- 示例应该覆盖输入的典型变化(正常场景、边界场景)
- 示例质量要高——模型的输出会模仿示例的质量水平
3.3 示例设计
任务:将中文产品名翻译为英文,并生成英文产品描述。
示例 1:
输入:智能温控水杯 Pro Max
输出:
- English Name: Smart TempControl Mug Pro Max
- Description: A premium insulated mug with intelligent temperature control,
keeping your beverages at the perfect temperature for hours.
示例 2:
输入:超薄无线充电器 Air
输出:
- English Name: UltraSlim Wireless Charger Air
- Description: A sleek, ultra-thin wireless charging pad that delivers
fast charging while complementing your desk setup.
你的输入:便携式空气净化器 Mini
输出:
3.4 零样本 vs 少样本
- 零样本(Zero-shot):直接给出指令,不提供示例。适合模型已经熟悉的任务
- 少样本(Few-shot):提供 2-5 个示例。适合格式特定的输出或复杂任务
- 如果零样本模型表现良好,不需要引入少样本
四、核心原则三:分解任务
4.1 为什么需要分解?
复杂任务往往涉及多个子目标,直接要求模型一次性完成会导致以下问题:
- 输出质量不稳定:模型可能只回答了问题的某一个方面
- 中间过程不可控:无法在关键步骤进行干预和修正
- Token 浪费:大段输出中可能只有一小部分真正有用
4.2 任务分解的策略
策略一:顺序分解
原始任务:分析产品评论,找出改进点,并提出实施方案
分解:
1. 阅读所有评论,列出被提及最多的 5 个问题
2. 对每个问题,分析其根本原因
3. 针对每个根本原因,提出具体改进方案
策略二:并行分解
原始任务:制定一份 Go 语言学习计划
分解(并行):
A. 列举 Go 语言的核心概念和知识点
B. 评估初学者的常见困难
C. 设计按周划分的学习路径
最终:将 A、B、C 的结果整合为一份完整的学习计划
4.3 中间结果检查
分解任务的一个重要优势是可以在每一步检查中间结果。如果某一步的输出质量不达标,可以即时修正,避免错误传导到后续步骤。
五、核心原则四:设定边界
5.1 设定边界的重要性
大语言模型默认会尽力回答任何问题。但在很多场景下,需要明确告诉模型「什么可以做、什么不可以做」。
5.2 常见的边界设定
知识边界:
如果你不知道答案,请直接说「我不知道」,不要编造信息。
请基于提供给你的文档回答,不要使用训练数据中的知识。
行为边界:
你的角色是一个客服助手。不要做以下事情:
- 不要询问用户的私人信息
- 不要提供医疗或法律建议
- 不要执行数学计算(使用计算器工具)
输出边界:
只输出 JSON 格式,不要输出任何其他内容。
回答限制在 3 句话以内。
六、完整的提示词模板
6.1 结构化提示词模板
# 角色
你是一位 [角色定义]
# 任务
请完成以下任务:[任务描述]
# 输出格式
- 格式:[JSON / Markdown / 纯文本]
- 长度:[字数 / 段落数 / 项目数]
- 结构:[结构要求]
# 约束
- [约束 1]
- [约束 2]
- [约束 3]
# 示例
输入:[示例输入]
输出:[示例输出]
# 上下文
[背景信息或额外上下文]
# 我的输入
[输入内容]
七、实践案例
7.1 文档总结提示词
# 角色
你是一位专业的文档分析师,擅长从长文档中提取核心信息。
# 任务
阅读以下文档,输出:
1. 一句话总结(30 字以内)
2. 三个核心要点(每个要点一句话)
3. 一个行动建议(需要做什么)
# 格式
Markdown 格式,每个部分用 ### 标题分隔
# 约束
- 只基于文档内容,不添加外部知识
- 不要使用模糊词汇如「可能」「或许」
- 如果有量化数据,必须保留具体数字
# 文档
[文档内容]
八、总结
提示词工程的四大核心原则——清晰指令、提供参考、分解任务、设定边界——是高效使用大语言模型的基础。每一条原则都针对 LLM 使用中的特定痛点:模糊性、理解偏差、复杂度、过度回答。在实践中坚持使用这四条原则,可以大幅提升与 LLM 交互的效率和质量。
六、第二条原则:提供参考文本
6.1 为什么需要参考文本?
LLM 虽然训练数据量巨大,但不可能精确记住所有细节。对于需要精确回答的任务,提供参考文本可以显著提升准确性。参考文本(Reference Text)就像给模型一个“开卷考试”的参考资料。
6.2 参考文本的使用方式
请根据以下参考资料回答问题。如果参考资料中没有相关信息,请明确告知无法回答。
参考资料:
[插入相关文档、文章或数据]
问题:[用户的问题]
这种方式特别适合:
- 公司内部文档问答
- 法律条款查询
- 产品说明书问答
- 学术论文摘要
七、第三条原则:分解复杂任务
7.1 复杂任务的挑战
当任务复杂度超过一定阈值时,LLM 的表现会显著下降。例如:
- 同时完成多个不相关的步骤
- 处理大量输入信息
- 需要多步骤推理
7.2 任务分解策略
将复杂任务分解为子任务:
- 逐步指导:将任务拆解为多个简单步骤
- 先规划后执行:先让 LLM 制定计划,再逐步执行
- 链式调用:将不同任务分配给不同的 LLM 调用
八、总结与最佳实践
关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词
六、第二条原则:提供参考文本
6.1 为什么需要参考文本?
LLM 虽然训练数据量巨大,但不可能精确记住所有细节。对于需要精确回答的任务,提供参考文本可以显著提升准确性。参考文本(Reference Text)就像给模型一个“开卷考试”的参考资料。
6.2 参考文本的使用方式
请根据以下参考资料回答问题。如果参考资料中没有相关信息,请明确告知无法回答。
参考资料:
[插入相关文档、文章或数据]
问题:[用户的问题]
这种方式特别适合:
- 公司内部文档问答
- 法律条款查询
- 产品说明书问答
- 学术论文摘要
七、第三条原则:分解复杂任务
7.1 复杂任务的挑战
当任务复杂度超过一定阈值时,LLM 的表现会显著下降。例如:
- 同时完成多个不相关的步骤
- 处理大量输入信息
- 需要多步骤推理
7.2 任务分解策略
将复杂任务分解为子任务:
- 逐步指导:将任务拆解为多个简单步骤
- 先规划后执行:先让 LLM 制定计划,再逐步执行
- 链式调用:将不同任务分配给不同的 LLM 调用
八、总结与最佳实践
关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词
【核心技巧深入】我们来补充一个非常实用的提示词设计框架:Role-Context-Format-Task,简称 RCFT 框架。这个框架帮助你在编写提示词时确保不遗漏任何关键要素:
- Role(角色):定义 AI 应该扮演的身份,如“你是一位资深 Python 开发工程师”
- Context(上下文):提供背景信息和约束条件
- Format(格式):指定输出格式,如 JSON、表格、列表
- Task(任务):明确具体要完成的任务
使用 RCFT 框架的示例:
角色:你是一位专业的代码评审工程师
上下文:我们的项目使用 Python 3.11,遵循 PEP 8 规范,使用 pytest 进行测试
格式:请用 Markdown 表格输出,包含“代码片段”、“问题”、“建议”三列
任务:审查下方的代码,找出所有潜在问题
另一个重要技巧是“否定指令的正向表述”。与其告诉模型“不要做什么”,不如告诉它“要做什么”。例如,不说“不要编造事实”,而是说“如果不知道答案,请明确说不知道”。正向表述比否定指令更有效,因为 LLM 在遵循肯定性指令时表现更好。
六、第二条原则:提供参考文本
6.1 为什么需要参考文本?
LLM 虽然训练数据量巨大,但不可能精确记住所有细节。对于需要精确回答的任务,提供参考文本可以显著提升准确性。参考文本(Reference Text)就像给模型一个“开卷考试”的参考资料。
6.2 参考文本的使用方式
请根据以下参考资料回答问题。如果参考资料中没有相关信息,请明确告知无法回答。
参考资料:
[插入相关文档、文章或数据]
问题:[用户的问题]
这种方式特别适合:
- 公司内部文档问答
- 法律条款查询
- 产品说明书问答
- 学术论文摘要
七、第三条原则:分解复杂任务
7.1 复杂任务的挑战
当任务复杂度超过一定阈值时,LLM 的表现会显著下降。例如:
- 同时完成多个不相关的步骤
- 处理大量输入信息
- 需要多步骤推理
7.2 任务分解策略
将复杂任务分解为子任务:
- 逐步指导:将任务拆解为多个简单步骤
- 先规划后执行:先让 LLM 制定计划,再逐步执行
- 链式调用:将不同任务分配给不同的 LLM 调用
八、总结与最佳实践
关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词
【核心技巧深入】我们来补充一个非常实用的提示词设计框架:Role-Context-Format-Task,简称 RCFT 框架。这个框架帮助你在编写提示词时确保不遗漏任何关键要素:
- Role(角色):定义 AI 应该扮演的身份,如“你是一位资深 Python 开发工程师”
- Context(上下文):提供背景信息和约束条件
- Format(格式):指定输出格式,如 JSON、表格、列表
- Task(任务):明确具体要完成的任务
使用 RCFT 框架的示例:
角色:你是一位专业的代码评审工程师
上下文:我们的项目使用 Python 3.11,遵循 PEP 8 规范,使用 pytest 进行测试
格式:请用 Markdown 表格输出,包含“代码片段”、“问题”、“建议”三列
任务:审查下方的代码,找出所有潜在问题
另一个重要技巧是“否定指令的正向表述”。与其告诉模型“不要做什么”,不如告诉它“要做什么”。例如,不说“不要编造事实”,而是说“如果不知道答案,请明确说不知道”。正向表述比否定指令更有效,因为 LLM 在遵循肯定性指令时表现更好。
最后补充一个实用场景建议。当你在写 prompt 时,如果发现模型输出不稳定,不妨从三个原则逐一检查:指令是不是有歧义?有没有提供足够的参考信息?任务是不是可以拆得更细?你会发现,大多数 prompt 问题都能通过这三个原则得到解决。这也是为什么 Andrew Ng 把这三条作为提示词工程的核心原则。
延伸阅读
- 📺 B 站播放列表:Prompt Engineering — 提示词工程
- 📚 更多学习资源,请访问 deeplearning.ai 官网