提示工程(Prompt Engineering)
提示工程是与大模型"对话"的艺术和科学——通过精心设计输入文本(prompt),引导模型产生更准确、更有用的输出。这是使用大模型最直接、最频繁的技术能力。本章系统讲解从基础到高级的提示工程方法。
提示工程是与大模型"对话"的艺术和科学——通过精心设计输入文本(prompt),引导模型产生更准确、更有用的输出。这是使用大模型最直接、最频繁的技术能力。本章系统讲解从基础到高级的提示工程方法。
建议完成第 02 章
提示词的基本结构、零样本与少样本学习、思维链(Chain-of-Thought, CoT)
能力扩展 · 大模型关键能力
文章导航
- 引言
- 1. 提示词的基本结构
- 1.1 提示词的组成
- 1.2 好的提示词 vs 差的提示词
- 2. 零样本与少样本学习
- 2.1 零样本(Zero-shot)
- 2.2 少样本(Few-shot)
- 3. 思维链(Chain-of-Thought, CoT)
- 3.1 基本思想
- 3.2 CoT 的变体
- 3.3 Self-Consistency(自洽性)
- 4. 高级提示技术
- 4.1 Tree-of-Thought(ToT)
- 4.2 ReAct(Reasoning + Acting)
- 4.3 结构化提示模板
- 5. 结构化输出
- 5.1 JSON Mode
- 5.2 结构化生成(Structured Generation)
- 5.3 XML / Markdown 标记
- 6. 提示工程最佳实践
- 6.1 核心原则
- 6.2 常见问题与解决
- 6.3 提示词管理
- 7. 本章小结
- 相关章节
- 延伸阅读
点击图中节点可定位到对应正文。
引言
提示工程是与大模型"对话"的艺术和科学——通过精心设计输入文本(prompt),引导模型产生更准确、更有用的输出。这是使用大模型最直接、最频繁的技术能力。本章系统讲解从基础到高级的提示工程方法。
1. 提示词的基本结构
1.1 提示词的组成
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
┌─ System Prompt(系统提示)──────────────────────┐
│ 定义模型的角色、行为准则和输出格式 │
└─────────────────────────────────────────────────┘
↓
┌─ Context(上下文)──────────────────────────────┐
│ 提供背景信息、参考文档、历史对话等 │
└─────────────────────────────────────────────────┘
↓
┌─ Instruction(指令)────────────────────────────┐
│ 明确告诉模型要做什么 │
└─────────────────────────────────────────────────┘
↓
┌─ Examples(示例)───────────────────────────────┐
│ 提供输入-输出示例,帮助模型理解任务格式 │
└─────────────────────────────────────────────────┘
↓
┌─ Output Format(输出格式)──────────────────────┐
│ 指定模型输出的格式要求 │
└─────────────────────────────────────────────────┘1.2 好的提示词 vs 差的提示词
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
差的提示词:
"写一篇关于AI的文章"
→ 模型不知道写多长、面向谁、什么角度、什么风格根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
好的提示词:
"你是一位科技专栏作家。请为企业管理者写一篇关于AI在客户服务中应用的
文章。要求:
- 1500字左右
- 包含3个实际案例
- 语言专业但不晦涩
- 以'总结与建议'结尾
- 使用 Markdown 格式"
→ 模型有明确的角色、受众、主题、格式和约束2. 零样本与少样本学习
2.1 零样本(Zero-shot)
仅凭指令描述任务,不提供任何示例:
提示词:
"将以下句子分类为正面、负面或中性情感:
'这家餐厅的食物很棒,但服务太慢了'"
模型输出:
"中性(包含正面和负面情感)"2.2 少样本(Few-shot)
在提示词中提供几个输入-输出示例:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
评论:'产品质量很好,物超所值' → 正面
评论:'完全不能用,浪费钱' → 负面
评论:'还行吧,一般般' → 中性根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
现在判断:
评论:'客服态度非常差,再也不买了' →"少样本的技巧:
- 3-5 个示例通常足够
- 示例要覆盖不同情况和边界条件
- 示例的顺序影响结果(把最相关的放在最后)
- 示例的格式要与期望输出一致
3. 思维链(Chain-of-Thought, CoT)
3.1 基本思想
让模型在给出答案之前先展示推理过程:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
不使用 CoT:
"小明有 5 个苹果,给了小红 2 个,又买了 3 个。他现在有几个苹果?"
→ "6 个"(可能出错)根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
使用 CoT(Zero-shot CoT):
"小明有 5 个苹果,给了小红 2 个,又买了 3 个。他现在有几个苹果?
请一步步思考。"
→ "让我一步步计算:
1. 小明初始有 5 个苹果
2. 给了小红 2 个:5 - 2 = 3 个
3. 又买了 3 个:3 + 3 = 6 个
答案:小明现在有 6 个苹果。"3.2 CoT 的变体
| 方法 | 核心思想 | 适用场景 |
|---|---|---|
| Zero-shot CoT | 加"请一步步思考" | 通用数学和逻辑推理 |
| Few-shot CoT | 提供带推理步骤的示例 | 需要特定推理格式 |
| Self-Consistency | 多次采样取多数投票 | 提高推理准确性 |
| Least-to-Most | 从最简子问题开始 | 复杂多步骤推理 |
3.3 Self-Consistency(自洽性)
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
推理路径 1:→ 答案 A
推理路径 2:→ 答案 A
推理路径 3:→ 答案 B
推理路径 4:→ 答案 A
推理路径 5:→ 答案 C根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
投票:A 出现 3 次 → 最终答案为 A
→ 比单次推理更可靠4. 高级提示技术
4.1 Tree-of-Thought(ToT)
让模型探索多条推理路径,评估并选择最优:
问题:用 4 个数字通过加减乘除得到 24
Step 1: 生成多个初始思路
思路 A: 先尝试乘法组合
思路 B: 先尝试加法组合
思路 C: 先尝试混合运算
Step 2: 评估每个思路的可行性
思路 A: 有前景 (7/10)
思路 B: 一般 (4/10)
思路 C: 有前景 (6/10)
Step 3: 沿最有前景的思路继续探索
...4.2 ReAct(Reasoning + Acting)
Thought: 我需要查找最新的 GDP 数据
Action: 搜索 "2024年全球GDP排名"
Observation: 搜索结果显示美国第一,中国第二...
Thought: 现在我有了数据,可以回答问题了
Action: 生成最终回答4.3 结构化提示模板
# 角色
你是一位资深数据分析师。
# 任务
分析以下销售数据并给出洞察报告。
# 输入数据
{data}
# 分析要求
1. 识别趋势:月度增长/下降趋势
2. 异常检测:显著偏离正常范围的数据点
3. 对比分析:同比/环比变化
4. 预测建议:基于趋势的下一步行动
# 输出格式
## 趋势分析
...
## 异常发现
...
## 对比分析
...
## 行动建议
1. ...
2. ...5. 结构化输出
5.1 JSON Mode
让模型以 JSON 格式输出:
提示词:
"分析以下文本的情感和关键词,以 JSON 格式输出:
文本:'新款手机性能强大,但电池续航一般'
要求输出格式:
{
'sentiment': 'positive/negative/mixed',
'keywords': [...],
'summary': '...'
}"5.2 结构化生成(Structured Generation)
使用约束解码强制模型输出符合特定 schema:
# 使用 Outlines 或 Guidance 库
from pydantic import BaseModel
class Analysis(BaseModel):
sentiment: str
keywords: list[str]
confidence: float
# 模型输出保证符合 Analysis schema
# 不需要重试或后处理5.3 XML / Markdown 标记
使用标记来组织和解析提示词:
<document>
这是需要分析的文档内容...
</document>
<question>
请总结文档的三个主要观点。
</question>
<output_format>
请用以下格式输出:
- 观点1: ...
- 观点2: ...
- 观点3: ...
</output_format>6. 提示工程最佳实践
6.1 核心原则
| 原则 | 说明 |
|---|---|
| 明确具体 | 避免模糊的描述,给出具体的要求和约束 |
| 分步骤 | 复杂任务拆分为明确的步骤 |
| 提供示例 | 用 few-shot 示例说明期望的输出格式 |
| 设定角色 | 给模型一个专业角色,影响输出风格 |
| 限制范围 | 明确告诉模型不要做什么 |
| 迭代优化 | 基于输出结果不断调整提示词 |
6.2 常见问题与解决
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 输出太长 | 未限制长度 | 加"用 200 字以内回答" |
| 输出太短 | 要求不明确 | 加"请详细解释"或给结构 |
| 格式不对 | 格式要求不清晰 | 提供明确的格式模板和示例 |
| 内容不准确 | 模型幻觉 | 加"基于以下信息回答"(配合 RAG) |
| 风格不对 | 角色设定缺失 | 加"你是一位XX专家" |
| 重复内容 | temperature 太低 | 提高 temperature 或改 prompt |
6.3 提示词管理
在生产环境中,提示词需要版本管理和 A/B 测试:
提示词管理最佳实践:
1. 版本控制:每次修改记录变更原因和效果
2. A/B 测试:新提示词与旧提示词对比
3. 模板化:使用变量和模板引擎管理提示词
4. 监控:跟踪不同提示词的模型表现
5. 文档化:记录每个提示词的设计意图和已知问题7. 本章小结
| 技术 | 核心方法 | 效果 |
|---|---|---|
| Zero-shot | 直接描述任务 | 简单任务足够 |
| Few-shot | 提供示例 | 显著提升格式和质量 |
| CoT | 让模型展示推理过程 | 数学和推理提升 30-50% |
| ToT | 探索多条推理路径 | 复杂问题更准确 |
| 结构化输出 | JSON/XML/Schema | 输出可程序化解析 |
相关章节
- 检索增强生成(RAG) — 提示与外部检索结合,缓解幻觉
- 规划与推理 — CoT 思想在 Agent 规划中的延伸
- 提示工程在Agent中的应用 — Agent 场景下的进阶提示技巧
延伸阅读
- Wei, J. et al. (2022). "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models". NeurIPS
- Kojima, T. et al. (2022). "Large Language Models are Zero-Shot Reasoners". NeurIPS
- Yao, S. et al. (2023). "Tree of Thoughts: Deliberate Problem Solving with Large Language Models". NeurIPS
- Wang, X. et al. (2023). "Self-Consistency Improves Chain of Thought Reasoning". ICLR