第 1 课
← 返回系列列表

提示词基础与最佳实践

Prompt Engineering — 提示词工程

编写清晰指令、提供参考文本、分解复杂任务等核心原则。

提示词基础与最佳实践

课程简介

编写清晰指令、提供参考文本、分解复杂任务等核心原则。

🎬 本课程视频:Prompt Engineering — 提示词工程


提示词基础与最佳实践

一、什么是提示工程?

提示工程(Prompt Engineering)是设计和优化输入提示词,以引导大语言模型生成期望输出的技术。它不是简单地「写提示」,而是一套系统的工程方法。

Andrew Ng 在课程中强调:提示词是与大语言模型交互的核心接口。模型能力再强,如果输入提示词质量差,输出质量也高不到哪里去。

1.1 提示工程的演进

从最简单的单轮问答,到包含上下文、示例和约束的复杂提示词,提示工程已经发展出一套成熟的方法论:

第一代:简单指令 → 「翻译这句话」
第二代:带上下文 → 「作为一位专业翻译,翻译这句话:I love you」
第三代:带示例 → 「如下是翻译示例:Hello → 你好。请翻译:I love you」
第四代:结构化提示 → 「角色+任务+格式+约束+示例」的组合

二、核心原则一:清晰明确

2.1 模糊 vs 清晰的指令

模糊的指令是提示词效果差的首要原因。

模糊:「写一段关于机器学习的文字」
清晰:「写一段 200 字的介绍,向没有编程背景的读者解释什么是监督学习。要求:包含一个生活中的例子,避免使用专业术语,适合初中文化程度的读者。」

2.2 清晰指令的要素

  1. 任务动词明确:用「写」「翻译」「总结」「分类」「生成代码」等具体动词
  2. 输出格式明确:指定格式(JSON、Markdown、表格)和长度(字数、段落数)
  3. 目标受众明确:说明回答给谁看(专家、管理者、小白用户)
  4. 约束条件明确:主题范围、禁止使用的术语、必须包含的元素

2.3 实用技巧

多步指令分开写

❌ 「阅读这篇文章,总结要点,然后将其翻译成英文,最后用 JSON 格式输出」

✅ 分三步:

Step 1: 阅读以下文章,列出 3-5 个核心要点。
Step 2: 将上述要点翻译成英文。
Step 3: 将英文要点按以下 JSON 格式输出。

三、核心原则二:提供参考

3.1 为什么提供参考有效?

大语言模型本质上是一个模式匹配和生成的系统。给定示例后,模型能够快速理解期望的输出格式、风格、复杂度和结构,不需要从零开始「猜测」你的需求。

3.2 示例选择

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 少样本

四、核心原则三:分解任务

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 任务分解策略

将复杂任务分解为子任务:

  1. 逐步指导:将任务拆解为多个简单步骤
  2. 先规划后执行:先让 LLM 制定计划,再逐步执行
  3. 链式调用:将不同任务分配给不同的 LLM 调用

八、总结与最佳实践

关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词

六、第二条原则:提供参考文本

6.1 为什么需要参考文本?

LLM 虽然训练数据量巨大,但不可能精确记住所有细节。对于需要精确回答的任务,提供参考文本可以显著提升准确性。参考文本(Reference Text)就像给模型一个“开卷考试”的参考资料。

6.2 参考文本的使用方式

请根据以下参考资料回答问题。如果参考资料中没有相关信息,请明确告知无法回答。

参考资料:
[插入相关文档、文章或数据]

问题:[用户的问题]

这种方式特别适合:
- 公司内部文档问答
- 法律条款查询
- 产品说明书问答
- 学术论文摘要

七、第三条原则:分解复杂任务

7.1 复杂任务的挑战

当任务复杂度超过一定阈值时,LLM 的表现会显著下降。例如:
- 同时完成多个不相关的步骤
- 处理大量输入信息
- 需要多步骤推理

7.2 任务分解策略

将复杂任务分解为子任务:

  1. 逐步指导:将任务拆解为多个简单步骤
  2. 先规划后执行:先让 LLM 制定计划,再逐步执行
  3. 链式调用:将不同任务分配给不同的 LLM 调用

八、总结与最佳实践

关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词

【核心技巧深入】我们来补充一个非常实用的提示词设计框架:Role-Context-Format-Task,简称 RCFT 框架。这个框架帮助你在编写提示词时确保不遗漏任何关键要素:

使用 RCFT 框架的示例:

角色:你是一位专业的代码评审工程师
上下文:我们的项目使用 Python 3.11,遵循 PEP 8 规范,使用 pytest 进行测试
格式:请用 Markdown 表格输出,包含“代码片段”、“问题”、“建议”三列
任务:审查下方的代码,找出所有潜在问题

另一个重要技巧是“否定指令的正向表述”。与其告诉模型“不要做什么”,不如告诉它“要做什么”。例如,不说“不要编造事实”,而是说“如果不知道答案,请明确说不知道”。正向表述比否定指令更有效,因为 LLM 在遵循肯定性指令时表现更好。

六、第二条原则:提供参考文本

6.1 为什么需要参考文本?

LLM 虽然训练数据量巨大,但不可能精确记住所有细节。对于需要精确回答的任务,提供参考文本可以显著提升准确性。参考文本(Reference Text)就像给模型一个“开卷考试”的参考资料。

6.2 参考文本的使用方式

请根据以下参考资料回答问题。如果参考资料中没有相关信息,请明确告知无法回答。

参考资料:
[插入相关文档、文章或数据]

问题:[用户的问题]

这种方式特别适合:
- 公司内部文档问答
- 法律条款查询
- 产品说明书问答
- 学术论文摘要

七、第三条原则:分解复杂任务

7.1 复杂任务的挑战

当任务复杂度超过一定阈值时,LLM 的表现会显著下降。例如:
- 同时完成多个不相关的步骤
- 处理大量输入信息
- 需要多步骤推理

7.2 任务分解策略

将复杂任务分解为子任务:

  1. 逐步指导:将任务拆解为多个简单步骤
  2. 先规划后执行:先让 LLM 制定计划,再逐步执行
  3. 链式调用:将不同任务分配给不同的 LLM 调用

八、总结与最佳实践

关键要点回顾:
- 清晰指令:使用分隔符、结构化输出、示例
- 提供参考:减少幻觉,提升准确性
- 分解任务:降低单次调用的复杂度
- 迭代优化:根据输出持续改进提示词

【核心技巧深入】我们来补充一个非常实用的提示词设计框架:Role-Context-Format-Task,简称 RCFT 框架。这个框架帮助你在编写提示词时确保不遗漏任何关键要素:

使用 RCFT 框架的示例:

角色:你是一位专业的代码评审工程师
上下文:我们的项目使用 Python 3.11,遵循 PEP 8 规范,使用 pytest 进行测试
格式:请用 Markdown 表格输出,包含“代码片段”、“问题”、“建议”三列
任务:审查下方的代码,找出所有潜在问题

另一个重要技巧是“否定指令的正向表述”。与其告诉模型“不要做什么”,不如告诉它“要做什么”。例如,不说“不要编造事实”,而是说“如果不知道答案,请明确说不知道”。正向表述比否定指令更有效,因为 LLM 在遵循肯定性指令时表现更好。

最后补充一个实用场景建议。当你在写 prompt 时,如果发现模型输出不稳定,不妨从三个原则逐一检查:指令是不是有歧义?有没有提供足够的参考信息?任务是不是可以拆得更细?你会发现,大多数 prompt 问题都能通过这三个原则得到解决。这也是为什么 Andrew Ng 把这三条作为提示词工程的核心原则。

延伸阅读

高级提示词技巧 →