Prompt设计模式大全:从入门到精通的10种核心模式
Prompt工程是构建AI应用的核心技能。掌握设计模式能让你从”试错式”提示编写,进阶到”工程化”的Prompt设计。本文将系统介绍10种经过验证的Prompt设计模式,每种模式都配有实战示例和适用场景分析。
一、为什么需要Prompt设计模式?
1.1 Prompt设计的挑战
在实际开发中,我们经常遇到以下问题:
- 输出不稳定:同样的Prompt,多次运行结果差异很大
- 格式难以控制:模型输出格式不符合预期
- 上下文理解偏差:模型没有准确理解任务意图
- 复杂任务分解困难:难以让模型完成多步骤推理
1.2 设计模式的价值
| 维度 | 无模式 | 使用设计模式 |
|---|---|---|
| 可预测性 | 低,结果随机 | 高,输出稳定 |
| 可维护性 | 差,难以迭代 | 好,结构化清晰 |
| 复用性 | 低,每次重写 | 高,模板化复用 |
| 团队协作 | 困难 | 标准化,易协作 |
二、基础模式(Foundation Patterns)
2.1 零样本提示(Zero-Shot Prompting)
定义:不给示例,直接描述任务要求模型完成。
适用场景:
- 任务定义清晰明确
- 模型对该任务有足够先验知识
- 快速原型验证
代码示例:
# 零样本分类
prompt = """
请将以下文本分类为正面、负面或中性:
文本:这款手机的电池续航太棒了,用了一整天还有电!
分类:
"""
# 零样本翻译
prompt = """
将以下中文翻译成英文:
原文:人工智能正在改变我们的生活方式。
翻译:
"""
最佳实践:
- 使用明确的指令动词(分类、翻译、总结、提取)
- 指定输出格式(JSON、列表、段落)
- 添加约束条件(字数限制、风格要求)
2.2 少样本提示(Few-Shot Prompting)
定义:提供少量示例,让模型学习任务模式。
适用场景:
- 需要特定输出格式
- 任务有隐含规则需要学习
- 零样本效果不佳时
代码示例:
# 少样本情感分析
prompt = """
请根据以下示例,对文本进行情感分类:
示例1:
文本:这部电影太精彩了,强烈推荐!
情感:正面
示例2:
文本:服务态度很差,等了一个小时。
情感:负面
示例3:
文本:产品质量一般,没有惊喜也没有失望。
情感:中性
现在请分类:
文本:这个餐厅的环境很优雅,但价格偏高。
情感:
"""
# 少样本实体提取
prompt = """
从文本中提取人名、地点和组织:
输入:马云在杭州创立了阿里巴巴。
输出:{"人名": ["马云"], "地点": ["杭州"], "组织": ["阿里巴巴"]}
输入:特斯拉CEO马斯克在德州工厂宣布新计划。
输出:{"人名": ["马斯克"], "地点": ["德州"], "组织": ["特斯拉"]}
输入:李彦宏在北京的百度大厦发布文心一言。
输出:
"""
示例数量建议:
| 任务复杂度 | 建议示例数 | 说明 |
|---|---|---|
| 简单任务 | 1-3个 | 如分类、翻译 |
| 中等任务 | 3-5个 | 如格式化提取 |
| 复杂任务 | 5-10个 | 如多步推理 |
三、推理增强模式(Reasoning Patterns)
3.1 思维链(Chain-of-Thought, CoT)
定义:引导模型展示推理过程,而非直接给出答案。
适用场景:
- 数学计算和逻辑推理
- 多步骤决策问题
- 需要解释性的场景
代码示例:
# 基础CoT
prompt = """
问题:一个农场有鸡和兔子共35只,脚共94只。鸡和兔子各有多少只?
请逐步思考并解答:
"""
# 显式CoT(带示例)
prompt = """
请按照以下示例的格式回答问题:
示例问题:
小明有5个苹果,给了小红2个,又买了3个。小明现在有几个苹果?
思考过程:
1. 初始数量:5个苹果
2. 给小红后:5 - 2 = 3个苹果
3. 又买3个后:3 + 3 = 6个苹果
答案:6个
现在请解答:
问题:一个水池有两个进水管,A管单独注满需6小时,B管单独注满需4小时。同时打开两管,几小时注满?
思考过程:
"""
CoT变体对比:
| 变体 | 描述 | 适用场景 |
|---|---|---|
| Zero-Shot CoT | 添加”让我们一步步思考” | 简单推理 |
| Few-Shot CoT | 提供推理示例 | 复杂推理 |
| Self-Consistency | 多次采样取多数 | 需要高置信度 |
| Tree of Thoughts | 探索多条推理路径 | 创造性问题 |
3.2 思维树(Tree of Thoughts, ToT)
定义:将推理过程组织为树状结构,探索多个可能的解决路径。
适用场景:
- 需要创造性思维的问题
- 存在多种解决方案的场景
- 游戏策略和规划任务
代码示例:
prompt = """
问题:用数字3、3、8、8得到24点
请探索不同的计算路径:
路径1:尝试 (8 / (3 - 8/3))
- 8/3 ≈ 2.67
- 3 - 2.67 = 0.33
- 8 / 0.33 ≈ 24 ✓
路径2:尝试 (3 + 3) * (8 - 8)
- 6 * 0 = 0 ✗
路径3:尝试 8 * 3 + 8 - 3
- 24 + 8 - 3 = 29 ✗
最优解:8 / (3 - 8/3) = 24
"""
四、结构化模式(Structural Patterns)
4.1 角色扮演(Role Prompting)
定义:为模型设定特定角色,影响其回答风格和知识调用。
适用场景:
- 需要专业领域知识
- 特定沟通风格要求
- 多角色对话系统
代码示例:
# 单一角色
prompt = """
你是一位资深Python工程师,拥有10年开发经验。
请review以下代码,指出潜在问题和改进建议:
```python
def calculate(items):
result = 0
for i in range(len(items)):
result += items[i]['price'] * items[i]['quantity']
return result
"""
多角色讨论
prompt = """ 请模拟一个技术评审会议,包含以下角色:
产品经理(PM):关注用户需求和业务价值 技术负责人(Tech Lead):关注技术可行性和架构 安全专家(Security):关注安全风险和合规
讨论主题:是否应该在产品中集成第三方AI服务?
请每个角色发表观点,最后给出综合建议。 """
**常用角色设定**:
| 角色 | 适用场景 | 关键特征 |
|------|----------|----------|
| 技术专家 | 代码审查、架构设计 | 严谨、专业术语 |
| 教师 | 知识讲解、教程编写 | 耐心、循序渐进 |
| 编辑 | 内容润色、校对 | 细致、语言规范 |
| 顾问 | 商业分析、策略建议 | 全面、数据驱动 |
### 4.2 分隔符与标记(Delimiters and Markers)
**定义**:使用特殊符号或标记明确区分Prompt的不同部分。
**代码示例**:
```python
# XML标签风格
prompt = """
<instruction>
请总结以下文章的主要观点
</instruction>
<article>
[文章内容...]
</article>
<requirements>
- 字数限制:100字以内
- 语言:中文
- 格式: bullet points
</requirements>
"""
# Markdown风格
prompt = """
## 任务
提取文本中的关键信息
## 输入文本
---
{text}
---
## 输出格式
```json
{
"entities": [],
"sentiment": ""
}
"""
特殊分隔符
prompt = """
指令
将用户问题分类到以下类别之一
类别
- 技术支持
- 账单查询
- 产品咨询
- 投诉建议
用户问题
||||| 我的账户被锁定了,怎么解锁? |||||
分类结果
"""
**分隔符选择指南**:
| 分隔符类型 | 示例 | 适用场景 |
|-----------|------|----------|
| XML标签 | `<tag></tag>` | 复杂结构化数据 |
| Markdown | `## Header` | 文档类任务 |
| 特殊字符 | `###`, `||||` | 简单分隔 |
| JSON | `{"key": "value"}` | 数据交换 |
## 五、输出控制模式(Output Control Patterns)
### 5.1 格式规范(Format Specification)
**定义**:明确指定期望的输出格式。
**代码示例**:
```python
# JSON格式
prompt = """
分析以下产品评论,以JSON格式返回:
评论:这款手机拍照效果很好,但电池续航一般,价格有点贵。
输出格式:
{
"sentiment": "总体情感",
"pros": ["优点列表"],
"cons": ["缺点列表"],
"rating": "1-5分评分",
"keywords": ["关键词列表"]
}
"""
# Markdown表格
prompt = """
比较Python和JavaScript的特性,以Markdown表格输出:
| 特性 | Python | JavaScript |
|------|--------|------------|
| 类型系统 | | |
| 执行方式 | | |
| 主要用途 | | |
| 学习曲线 | | |
"""
# 结构化列表
prompt = """
请列出5个提高代码质量的建议,格式如下:
1. [建议标题]
- 说明:[详细说明]
- 示例:[代码示例]
- 收益:[带来的好处]
2. ...
"""
5.2 约束条件(Constraint Specification)
定义:通过约束限制模型的输出范围。
代码示例:
# 多重约束
prompt = """
请为一家新开的咖啡店写一段宣传文案。
约束条件:
- 字数:50-80字
- 风格:温馨、文艺
- 必须包含:"手冲"、"慢时光"两个词
- 避免:使用"最好"、"第一"等绝对化用语
- 目标受众:25-35岁白领
"""
# 负面约束
prompt = """
请解释什么是机器学习。
要求:
✓ 使用通俗易懂的比喻
✓ 适合高中生理解
✗ 不要使用数学公式
✗ 不要提及具体算法名称
✗ 不要超过200字
"""
六、上下文管理模式(Context Management Patterns)
6.1 上下文压缩(Context Compression)
定义:在有限的上下文窗口中,高效组织和压缩信息。
代码示例:
# 摘要式压缩
prompt = """
基于以下文档摘要回答问题:
文档摘要:
- 主题:云计算安全最佳实践
- 关键要点:1)零信任架构 2)数据加密 3)访问控制 4)审计日志
- 适用对象:企业IT管理员
问题:实施零信任架构的关键步骤是什么?
"""
# 结构化压缩
prompt = """
对话历史(已压缩):
用户:询问产品价格 → 助手:提供价格表 → 用户:询问折扣 → 助手:说明优惠政策
当前问题:批量购买有额外优惠吗?
"""
6.2 检索增强(Retrieval-Augmented Pattern)
定义:结合外部知识库,动态注入相关信息。
代码示例:
# RAG风格Prompt
prompt = """
基于以下参考资料回答问题:
[参考资料]
{retrieved_documents}
[用户问题]
{user_question}
[回答要求]
- 优先基于参考资料回答
- 如果参考资料不足,明确说明
- 不要编造信息
"""
七、高级组合模式(Advanced Composition Patterns)
7.1 多阶段管道(Multi-Stage Pipeline)
定义:将复杂任务分解为多个阶段,每个阶段使用专门的Prompt。
代码示例:
# 阶段1:意图识别
stage1_prompt = """
分析用户输入,判断意图类别:
用户输入:{input}
可选类别:查询、订购、投诉、咨询、其他
输出格式:{"intent": "类别", "confidence": "高/中/低"}
"""
# 阶段2:信息提取
stage2_prompt = """
从用户输入中提取关键信息:
意图:{intent}
用户输入:{input}
需要提取:产品名称、数量、时间要求
输出:JSON格式
"""
# 阶段3:响应生成
stage3_prompt = """
基于以下信息生成回复:
意图:{intent}
提取信息:{extracted_info}
知识库结果:{knowledge_base_result}
生成友好、准确的回复:
"""
7.2 自我修正(Self-Correction)
定义:引导模型检查并修正自己的输出。
代码示例:
prompt = """
请完成以下任务,并进行自我检查:
任务:将以下中文翻译成英文
原文:人工智能的发展日新月异。
步骤1:翻译
[你的翻译]
步骤2:检查
- 准确性:是否准确传达原意?
- 流畅性:是否符合英语表达习惯?
- 完整性:是否遗漏信息?
步骤3:修正(如有需要)
[最终翻译]
"""
八、模式选择决策树
任务分析
├── 是否需要示例?
│ ├── 是 → Few-Shot Prompting
│ └── 否 → Zero-Shot Prompting
├── 是否需要推理过程?
│ ├── 是 → Chain-of-Thought
│ └── 否 → 直接输出
├── 是否需要特定风格/专业知识?
│ ├── 是 → Role Prompting
│ └── 否 → 标准指令
├── 输出格式是否重要?
│ ├── 是 → Format Specification
│ └── 否 → 自由格式
└── 任务是否复杂多步骤?
├── 是 → Multi-Stage Pipeline
└── 否 → 单步处理
九、Prompt设计检查清单
在部署Prompt前,请确认以下事项:
9.1 清晰度检查
- 指令明确,无歧义
- 使用具体的动词和名词
- 避免双重否定
- 关键信息前置
9.2 完整性检查
- 包含必要的背景信息
- 定义了输出格式
- 说明了约束条件
- 提供了示例(如需要)
9.3 鲁棒性检查
- 测试了边界情况
- 验证了异常输入处理
- 检查了输出稳定性
- 评估了安全性风险
十、总结与进阶建议
掌握这10种Prompt设计模式,你已经具备了构建生产级AI应用的基础能力。记住以下核心原则:
- 从简单开始:先用Zero-Shot,效果不佳再升级
- 示例要典型:Few-Shot的示例要覆盖主要场景
- 结构化优先:使用分隔符和格式规范提升可控性
- 迭代优化:基于实际反馈持续改进Prompt
- 组合使用:复杂任务往往需要多种模式组合
推荐阅读:
- 《Prompt Engineering Guide》官方文档
- OpenAI Cookbook中的Prompt示例
- LangChain框架的Prompt模板设计
本文是AIEng Hub Prompt工程系列的第一篇,后续将深入探讨Prompt测试框架和版本管理。欢迎关注我们的技术专栏,获取更多AI工程实践干货。