提示工程完整教程¶
巩固基础 · 进阶提升 · 实战应用
目录¶
1. 提示工程概述¶
1.1 什么是提示工程¶
提示工程(Prompt Engineering) 是开发和优化用于与大语言模型(LLM)交互的提示(Prompt)的学科。它是一门相对较新的学科,涉及理解大语言模型的能力和局限性,并通过精心设计的提示来优化模型输出。
1.2 为什么提示工程很重要¶
| 方面 | 说明 |
|---|---|
| 质量提升 | 好的提示可以显著提高输出的准确性、相关性和质量 |
| 成本效益 | 相比微调模型,优化提示是一种成本更低的方法 |
| 灵活性 | 通过提示可以在不改变模型的情况下适应不同任务 |
| 可控性 | 提示可以帮助模型遵循特定的行为准则和格式 |
1.3 提示工程的演进¶
2022年末 → ChatGPT发布,提示工程开始流行
2023年 → Chain-of-Thought提示被发现,推理能力大幅提升
2023年末 → ReAct、Tree of Thoughts等高级框架出现
2024-2025 → 提示工程成为AI应用的核心技能
1.4 本教程的目标受众¶
- 已有基础:你已经对提示工程有初步了解
- 学习目标:巩固基础知识,掌握进阶技术
- 实践导向:强调实际应用和动手练习
2. 基础篇:核心概念与基本技术¶
2.1 提示的核心要素¶
一个完整的提示通常包含以下要素:
┌─────────────────────────────────────────────────────────────┐
│ 提示结构要素 │
├─────────────────────────────────────────────────────────────┤
│ 指令(Instruction) → 告诉模型做什么 │
│ 上下文(Context) → 提供背景信息 │
│ 输入数据(Input Data) → 需要处理的内容 │
│ 输出格式(Output Format)→ 期望的输出形式 │
│ 示例(Examples) → 参考案例(可选) │
└─────────────────────────────────────────────────────────────┘
示例:
## 提示示例
**指令**:分析以下文章的主要观点
**上下文**:这是一篇关于人工智能发展趋势的技术文章
**输入数据**:
[文章内容...]
**输出格式**:
- 列出3个主要观点
- 每个观点用一句话总结
- 提供一个具体的应用案例
2.2 基础提示技术¶
2.2.1 零样本提示(Zero-shot Prompting)¶
定义:不提供任何示例,直接让模型完成任务。
# 零样本提示示例
prompt = """
请将以下英文句子翻译成中文:
"The quick brown fox jumps over the lazy dog."
"""
# 另一个示例
prompt = """
请总结以下文章的主要要点:
[文章内容]
"""
适用场景: - 简单、明确的任务 - 模型已经很强的领域 - 快速原型验证
注意事项: - 对于复杂任务,零样本提示可能效果不佳 - 模型的输出质量取决于任务描述的清晰度
2.2.2 少样本提示(Few-shot Prompting)¶
定义:提供1-5个示例来引导模型理解任务。
# 少样本提示示例
prompt = """
请将以下情感分类为正面、负面或中性:
示例1: "这部电影太棒了!" → 正面
示例2: "服务态度很差" → 负面
示例3: "产品质量一般" → 中性
现在请分类:
"这本书写得非常精彩"
"""
# 更复杂的少样本示例
prompt = """
请将以下单词转换为复数形式:
Example 1: cat → cats
Example 2: dog → dogs
Example 3: child → children
Example 4: mouse → mice
请转换:
"address"
"""
少样本提示的最佳实践:
| 原则 | 说明 |
|---|---|
| 多样性 | 示例应覆盖不同情况和边缘案例 |
| 一致性 | 保持示例格式一致 |
| 相关性 | 选择与目标任务相似的示例 |
| 适量 | 通常3-5个示例效果最佳 |
2.2.3 思维链提示(Chain-of-Thought, CoT)¶
定义:引导模型逐步推理,而不是直接给出答案。
# 思维链提示示例
prompt = """
请逐步推理并回答以下问题:
问题:如果一个篮子里有15个苹果,Tom拿走了5个,又放回了3个,
然后又拿走了7个,最后还剩几个苹果?
让我们一步步思考:
1. 初始:15个苹果
2. Tom拿走了5个:15 - 5 = 10个
3. 放回了3个:10 + 3 = 13个
4. 又拿走了7个:13 - 7 = 6个
答案是:6个苹果
"""
# 数学问题中的CoT示例
prompt = """
小明有10支铅笔,给了小红3支,又从妈妈那里得到5支,
然后丢了2支,最后剩多少支铅笔?
步骤:
1. 初始铅笔数:10支
2. 给小红3支:10 - 3 = 7支
3. 得到5支:7 + 5 = 12支
4. 丢了2支:12 - 2 = 10支
最终答案:10支
"""
CoT提示的关键要素:
- 明确的推理步骤:用"步骤1"、"然后"、"接着"等词语
- 中间结果展示:显示每个推理步骤的结果
- 清晰的结论:最后给出明确的答案
2.3 提示设计的核心原则¶
2.3.1 清晰度原则¶
# ❌ 不清晰的提示
prompt = "告诉我关于AI的事情"
# ✅ 清晰的提示
prompt = """
请用3-5段文字介绍生成式AI的基本原理,
包括其主要应用领域和当前的技术限制。
语言风格:面向非技术背景读者的通俗解释。
"""
2.3.2 具体性原则¶
# ❌ 模糊的提示
prompt = "写一些关于环保的内容"
# ✅ 具体的提示
prompt = """
请写一篇300字的短文,主题是"城市居民如何减少塑料使用",
包含:
- 至少3个具体的行动建议
- 每个建议配一个实际例子
- 呼吁行动的结尾
"""
2.3.3 结构化原则¶
# 使用明确的结构化格式
prompt = """
请按照以下结构分析一家公司的SWOT:
## 1. 优势 (Strengths)
- [列出3个主要优势]
## 2. 劣势 (Weaknesses)
- [列出3个主要劣势]
## 3. 机会 (Opportunities)
- [列出3个潜在机会]
## 4. 威胁 (Threats)
- [列出3个主要威胁]
"""
2.3.4 上下文提供原则¶
# 提供充分的上下文信息
prompt = """
背景信息:
- 用户:25岁的软件工程师
- 场景:正在准备技术面试
- 目标:学习系统设计基础知识
任务:
请用通俗易懂的语言解释微服务架构的基本概念,
并提供一个简单的实际应用案例。
"""
2.4 提示优化的基本策略¶
2.4.1 迭代优化法¶
示例流程:
# 第1版:初始提示
prompt_v1 = "写一首关于春天的诗"
# 第2版:添加更多细节
prompt_v2 = """
写一首4行的现代诗,关于春天的到来。
每行不超过10个字,要求押韵。
"""
# 第3版:进一步明确要求
prompt_v3 = """
创作一首关于春天景象的现代诗:
- 4行
- 每行8-10个字
- 使用拟人手法
- 描写具体的春天元素(花、春雨、燕子)
"""
2.4.2 提示分割法¶
# ❌ 复杂的单一提示
prompt_complex = """
分析这篇文章的主题、写作风格、目标读者,
并评估其论证的逻辑性,最后提出改进建议。
"""
# ✅ 分割后的提示
prompt_1 = "这篇文章的主要主题是什么?用一句话总结。"
prompt_2 = "这篇文章的写作风格是什么样的?列出3个特征。"
prompt_3 = "这篇文章的目标读者是谁?说明理由。"
prompt_4 = "评估这篇文章的论证逻辑,有哪些优点和不足?"
prompt_5 = "针对以上分析,提出3条具体的改进建议。"
3. 进阶篇:高级技术与框架¶
3.1 自一致性(Self-Consistency)¶
概念:通过生成多个推理路径并选择最一致的答案来提高准确性。
# 自一致性示例
prompt = """
问题:一个水池有进水管和出水管。进水管5小时注满水池,
出水管8小时排空水池。如果两个管子同时开,几小时注满?
请用不同的方法推理3次:
方法1:最小公倍数法
方法2:效率计算法
方法3:方程求解法
最后比较三个方法的结果,如果一致则给出最终答案。
"""
# 更复杂的自一致性实现
def self_consistency_prompt(question, num_reasoning=3):
"""生成自一致性提示"""
prompt = f"""
{question}
请用{num_reasoning}种不同的方法来解答这个问题,
确保每种方法的推理过程都是独立的。
方法1:[推理过程和答案]
方法2:[推理过程和答案]
方法3:[推理过程和答案]
最终答案(基于一致性原则):[最一致的答案]
"""
return prompt
自一致性的工作流程:
3.2 ReAct(Reason + Act)¶
概念:结合推理(Reasoning)和行动(Acting),使模型能够与外部工具交互。
# ReAct模式示例
react_prompt = """
你是一个研究助手,可以搜索信息来回答问题。
问题:2024年奥运会奖牌榜前三名是哪些国家?
请按照以下格式回答:
思考1:为了回答这个问题,我需要先搜索2024年奥运会的信息。
行动1:search[2024年奥运会奖牌榜]
观察1:[搜索结果信息]
思考2:根据搜索结果,我获得了前几名的信息,但需要更详细的数据。
行动2:search[2024年奥运会金牌数排名]
观察2:[更详细的搜索结果]
思考3:现在我有了足够的信息来回答这个问题。
最终答案:[汇总信息]
"""
ReAct的核心循环:
┌─────────────────────────────────────┐
│ ReAct 循环 │
├─────────────────────────────────────┤
│ 思考 (Thought) → 决定下一步行动 │
│ 行动 (Action) → 执行工具调用 │
│ 观察 (Observation) → 获取工具结果 │
│ 思考 (Thought) → 分析结果,继续循环 │
└─────────────────────────────────────┘
实际应用示例:
# 天气查询的ReAct提示
weather_react_prompt = """
你是天气助手。用户询问天气时,使用搜索工具获取信息。
当用户问"北京今天天气怎么样?"时:
思考1:用户想知道北京的天气,我需要搜索北京的天气信息。
行动1:search[北京今天天气]
观察1:北京今天晴转多云,最高温度25℃,最低温度15℃。
思考2:我已经获得了天气信息,可以回答用户的问题。
最终答案:北京今天天气晴转多云,温度15-25℃。
"""
3.3 思维树(Tree of Thoughts, ToT)¶
概念:允许模型在多个推理分支上探索,适用于需要搜索和规划的任务。
# 思维树示例:解决数学问题
tot_prompt = """
问题:如何使用4个数字4和基本运算(+、-、×、÷)得到24?
请探索多种可能的解法路径:
## 分支1:尝试 (4 + 4) × (4 - 4/4)
- 4/4 = 1
- 4 - 1 = 3
- 4 + 4 = 8
- 8 × 3 = 24 ✅ 成功!
## 分支2:尝试 (4 × 4 + 4) × 4
- 4 × 4 = 16
- 16 + 4 = 20
- 20 × 4 = 80 ❌ 失败
## 分支3:尝试 4 × (4 + 4/4)
- 4/4 = 1
- 4 + 1 = 5
- 4 × 5 = 20 ❌ 失败
## 分支4:尝试 (4 × 4) + (4 × 4)
- 16 + 16 = 32 ❌ 失败
最终答案:解法是 (4 + 4) × (4 - 4/4) = 24
"""
ToT的结构:
问题
│
┌────────────┼────────────┐
↓ ↓ ↓
分支1 分支2 分支3
│ │ │
子分支1.1 子分支2.1 子分支3.1
│ │ │
[评估] [评估] [评估]
│ │ │
继续/回溯 继续/回溯 继续/回溯
3.4 Reflexion¶
概念:通过语言强化学习,让模型对自己的输出进行反思和改进。
# Reflexion示例
reflexion_prompt = """
任务:写一段产品描述
## 第1次尝试
输出:我公司生产的智能手表功能强大,品质优良,是您最佳选择。
自我反思1:
- ❌ 语言过于笼统,缺乏具体信息
- ❌ 没有提到独特卖点
- ❌ "最佳选择"过于绝对
改进策略1:
- 添加具体功能描述
- 突出与传统手表的区别
- 使用更客观的描述
## 第2次尝试(改进后)
输出:这款智能手表配备1.4英寸AMOLED屏幕,
支持心率监测和GPS定位,电池续航达7天。
采用轻量化钛合金表圈,重量仅32克。
自我反思2:
- ✅ 添加了具体规格
- ✅ 突出了轻量化特点
- ✅ 使用了客观数据
最终版本:[第2次输出]
"""
3.5 图思维(Graph of Thoughts, GoT)¶
概念:将推理过程建模为图结构,支持更复杂的推理模式。
# Graph of Thoughts示例:复杂决策问题
got_prompt = """
问题:我应该选择哪份工作?
## 输入数据
- 工作A:薪资高,但通勤时间长
- 工作B:薪资中等,通勤短,成长空间大
- 工作C:薪资一般,团队氛围好,但公司规模小
## 推理图结构
┌─────────────────────────────────────────────────────┐
│ 决策节点 │
├─────────────────────────────────────────────────────┤
│ 根节点:选择最佳工作 │
│ │ │
│ ┌────┴────┬────────────┬─────────────┐ │
│ ↓ ↓ ↓ ↓ │
│ 薪资 工作生活 职业发展 公司前景 │
│ 平衡 平衡 潜力 评估 │
│ │ │ │ │ │
│ └────────┴────────────┴─────────────┘ │
│ │ │
│ ↓ │
│ 综合评估 │
│ │ │
│ ↓ │
│ 决策建议 │
└─────────────────────────────────────────────────────┘
## 节点评估
- 工作A:薪资高(+2),通勤长(-1),发展一般(0),前景好(+1) = +2
- 工作B:薪资中(0),通勤短(+1),发展好(+1),前景中(0) = +2
- 工作C:薪资一般(-1),氛围好(+1),潜力大(+1),规模小(-1) = 0
## 最终决策
建议选择工作B,因为在工作生活平衡和职业发展方面表现更优。
"""
3.6 提示链(Prompt Chaining)¶
概念:将复杂任务分解为多个提示,每个提示处理一个子任务。
# 提示链示例:文章分析流水线
chain = {
"step1_extract": """
从以下文章中提取关键信息和统计数据:
[文章内容]
输出格式:
- 核心主题:一句话描述
- 关键数据:[列出所有数字和统计]
- 重要观点:[列出3-5个]
""",
"step2_analyze": """
基于以下提取的信息,分析文章的可信度:
提取的信息:
[步骤1的输出]
分析维度:
1. 数据来源是否明确?
2. 论证逻辑是否严密?
3. 是否存在偏见或遗漏?
输出:可信度评分(1-10)及理由
""",
"step3_summarize": """
基于以下分析结果,生成最终摘要:
关键信息:[步骤1的输出]
可靠度评估:[步骤2的输出]
生成:
- 200字摘要
- 3个要点
- 1个注意事项
""",
"step4_format": """
将以下内容格式化为适合展示的格式:
摘要内容:[步骤3的输出]
格式要求:
- 使用Markdown
- 包含标题层级
- 适当的列表和强调
"""
}
# 执行提示链
def execute_chain(chain, content):
results = []
for step_name, prompt_template in chain.items():
prompt = prompt_template.replace("[文章内容]", content)
if "[步骤1的输出]" in prompt:
prompt = prompt.replace("[步骤1的输出]", results[0])
if "[步骤2的输出]" in prompt:
prompt = prompt.replace("[步骤2的输出]", results[1])
if "[步骤3的输出]" in prompt:
prompt = prompt.replace("[步骤3的输出]", results[2])
result = call_llm(prompt)
results.append(result)
return results
3.7 系统提示工程¶
定义:设计系统级提示来定义AI助手的行为、能力和限制。
# 系统提示示例
system_prompt = """
# 系统提示:专业技术写作助手
## 角色定义
你是一位经验丰富的技术作家,拥有10年以上技术文档撰写经验。
你擅长将复杂的技术概念转化为清晰易懂的说明。
## 能力
- 能够撰写技术博客、API文档、用户手册
- 擅长使用类比解释复杂概念
- 熟悉多种编程语言和技术栈
## 行为准则
1. 始终使用简洁、准确的技术语言
2. 在解释概念时提供具体的代码示例
3. 如果技术细节不确定,明确说明而不是猜测
4. 主动建议更好的表达方式或补充信息
## 限制
- 不讨论政治、宗教或其他敏感话题
- 不生成虚假或误导性信息
- 不进行代码安全审计或安全建议
## 输出风格
- 使用Markdown格式
- 包含适当的标题层级和目录
- 代码块必须包含语言标识
- 重要信息使用粗体强调
## 用户交互
- 遇到不明确的需求时,先提问澄清
- 提供多种方案时,说明各自的优缺点
- 完成后询问用户是否需要调整
"""
# 实际使用时
user_prompt = "请解释什么是RESTful API"
final_prompt = f"{system_prompt}\n\n## 用户请求\n{user_prompt}"
4. 实战篇:不同场景的提示策略¶
4.1 代码生成场景¶
# 基础代码生成
code_prompt = """
请用Python实现一个栈(Stack)数据结构,包含以下功能:
- push(element):入栈
- pop():出栈
- peek():查看栈顶元素
- is_empty():判断是否为空
- size():获取栈的大小
要求:
1. 使用类实现
2. 包含类型注解
3. 添加详细的注释
4. 提供使用示例
"""
# 进阶代码生成(带测试)
advanced_code_prompt = """
请实现一个LRU缓存(Least Recently Used Cache)
要求:
1. 使用Python的@functools.lru_cache装饰器实现
2. 或者手动实现双向链表+哈希表的方案
3. 包含单元测试
4. 性能分析:时间复杂度O(1)
提示:可以使用collections.OrderedDict或自定义双向链表
"""
# 代码审查提示
code_review_prompt = """
请审查以下Python代码,指出潜在问题:
```python
def process_data(data):
try:
result = []
for item in data:
if item > 10:
result.append(item * 2)
except Exception as e:
print(e)
return result
请从以下方面分析: 1. 代码逻辑问题 2. 潜在的bug 3. 性能问题 4. 代码风格问题 5. 改进建议 """
### 4.2 数据分析场景
```python
# 数据分析提示
analysis_prompt = """
你是一位数据分析师。请分析以下销售数据:
## 数据
| 月份 | 销售额 | 客户数 |
|------|--------|--------|
| 1月 | 100000 | 500 |
| 2月 | 120000 | 550 |
| 3月 | 110000 | 520 |
| 4月 | 130000 | 600 |
## 分析要求
1. 计算月度增长率
2. 识别趋势和模式
3. 发现异常值
4. 提供业务建议
## 输出格式
- 使用Markdown表格展示计算结果
- 包含数据可视化建议(使用Python代码)
- 提供3-5条具体的业务建议
"""
# 复杂数据分析
complex_analysis_prompt = """
请分析以下用户行为数据,找出用户流失的关键因素。
## 数据集概述
- 用户总数:100,000
- 流失用户:20,000(20%)
- 时间范围:2024年Q1-Q2
## 可用特征
- 活跃天数
- 平均会话时长
- 功能使用数量
- 客服工单数
- 投诉次数
- 登录频率
## 分析目标
1. 建立用户流失预测模型
2. 找出TOP 5最重要的流失因素
3. 提供用户保留策略
4. 评估模型效果
## 输出要求
1. 分析方法说明
2. 关键发现
3. 建议采取的行动
4. 预期效果
"""
4.3 内容创作场景¶
# 博客文章创作
blog_prompt = """
请写一篇关于"Prompt Engineering最佳实践"的博客文章。
## 要求
- 字数:1500-2000字
- 目标读者:有AI应用开发经验的程序员
- 结构:包含引言、5个主要实践、结论
- 每个实践需要有代码示例
- 语气:专业但易于理解
## 5个最佳实践
1. 使用明确的指令
2. 提供上下文和示例
3. 使用结构化输出
4. 迭代优化提示
5. 处理边缘情况
## 额外要求
- 包含一个"常见错误"小节
- 提供进一步阅读的资源链接
"""
4.4 文档生成场景¶
# API文档生成
api_doc_prompt = """
请为以下REST API生成API文档:
## API端点
### GET /api/users
获取用户列表
### POST /api/users
创建新用户
请求体:{name: string, email: string, role: string}
### GET /api/users/{id}
获取特定用户信息
### PUT /api/users/{id}
更新用户信息
请求体:{name?: string, email?: string, role?: string}
### DELETE /api/users/{id}
删除用户
## 文档要求
1. 为每个端点生成:
- 功能描述
- 请求参数说明
- 请求/响应示例(JSON格式)
- 可能的错误码
- 认证要求
2. 使用OpenAPI 3.0格式
3. 包含一个完整的cURL示例
"""
# README生成
readme_prompt = """
请为一个Python项目生成README.md文件。
## 项目信息
- 项目名称:DataProcessor
- 功能:数据处理和转换工具库
- Python版本:3.8+
- 依赖:pandas, numpy
## 主要功能
- CSV/Excel文件读取
- 数据清洗和预处理
- 数据格式转换
- 统计信息生成
## 目录结构
4.5 对话和客服场景¶
# 智能客服提示
customer_service_prompt = """
你是一家电商公司的智能客服。请按照以下规范回复:
## 回复原则
1. 礼貌、专业
2. 快速定位问题
3. 提供具体解决方案
4. 必要时引导人工客服
## 常见问题处理
### 物流查询
"请提供您的订单号,我帮您查询物流信息。"
"您的订单已发货,预计3-5个工作日内送达。"
### 退换货
"请问您是想退货还是换货?"
"退货原因:_______"
"我们会在收到退货后5个工作日内处理退款。"
### 产品咨询
"这款产品的详细信息如下:"
[产品参数]
### 投诉处理
"非常抱歉给您带来不好的体验。"
"我会立即将您的问题反馈给相关部门,"
"预计在24小时内给您回复。"
## 回复格式
1. 问候语
2. 问题确认
3. 解决方案
4. 后续行动
5. 结束语
"""
5. 最佳实践与常见陷阱¶
5.1 提示工程最佳实践¶
5.1.1 提示结构化¶
# ✅ 良好的提示结构
good_prompt = """
# 任务:代码审查
## 上下文
这是支付系统的核心模块代码,用于处理用户付款。
## 代码
```python
def process_payment(amount, user_id):
if amount > 0:
if verify_user(user_id):
if charge_card(user_id, amount):
return True
return False
要求¶
- 识别安全问题
- 评估代码质量
- 提出改进建议
输出格式¶
- 安全风险:列出所有发现
- 代码评分:1-10分
- 改进建议:编号列表
"""
#### 5.1.2 使用分隔符 ```python # 使用XML标签分隔 delimiter_prompt = """ 请分析以下用户反馈并分类: <feedback> 这个产品的用户体验真的很棒,界面简洁,操作流畅。 唯一不足的是加载速度有时候会比较慢。 </feedback> 请按照以下类别分类: - 正面反馈:[列出正面评价] - 负面反馈:[列出负面评价] - 改进建议:[列出建议] """ # 使用Markdown代码块 code_delimiter_prompt = """ 请解释以下代码的作用: ```python def fibonacci(n): if n <= 1: return n return fibonacci(n-1) + fibonacci(n-2)
解释要求: 1. 说明算法原理 2. 分析时间复杂度 3. 提供优化建议 """
#### 5.1.3 明确输出格式
```python
# 使用JSON格式输出
json_prompt = """
从以下文本中提取实体,并按JSON格式输出:
文本:张三在北京的清华大学读书,李四在上海的复旦大学工作。
输出JSON格式:
```json
{
"persons": [
{"name": "张三", "university": "清华大学", "city": "北京"}
],
"organizations": ["清华大学", "复旦大学"],
"locations": ["北京", "上海"]
}
使用表格格式¶
table_prompt = """ 请比较以下三种数据库的特点:
| 特性 | MySQL | PostgreSQL | MongoDB |
|---|---|---|---|
| 类型 | |||
| 优势 | |||
| 劣势 | |||
| 适用场景 | |||
| """ | |||
5.2.2 上下文长度限制¶
问题:提示过长可能超出模型限制
# 解决方案1:总结长上下文
def summarize_context(long_text, max_length=1000):
summary_prompt = f"""
请用{max_length}字总结以下内容:
{long_text}
"""
return call_llm(summary_prompt)
# 解决方案2:分块处理
def process_large_document(doc):
chunks = chunk_document(doc, max_tokens=4000)
results = []
for i, chunk in enumerate(chunks):
prompt = f"""
这是文档的第{i+1}/{len(chunks)}部分。
请提取并总结关键信息。
"""
results.append(call_llm(prompt))
return aggregate_results(results)
5.2.3 模型偏见¶
问题:模型可能产生偏见或有害输出
# 使用偏见检测提示
bias_check_prompt = """
请检查以下文本是否存在性别、种族或其他偏见:
{text_to_check}
检查维度:
1. 性别偏见
2. 年龄偏见
3. 地域偏见
4. 职业偏见
5. 其他偏见
如果存在偏见,请指出具体内容并建议改进。
"""
5.3 提示优化检查清单¶
┌──────────────────────────────────────────────────────────────┐
│ 提示优化检查清单 │
├──────────────────────────────────────────────────────────────┤
│ □ 任务是否清晰明确? │
│ □ 上下文信息是否充分? │
│ □ 输出格式是否指定? │
│ □ 是否提供了示例(如果需要)? │
│ □ 是否使用了适当的分隔符? │
│ □ 是否有防止提示注入的措施? │
│ □ 提示长度是否合适? │
│ □ 是否考虑了边缘情况? │
└──────────────────────────────────────────────────────────────┘
6. 练习与挑战¶
6.1 基础练习¶
练习1:提示改写¶
任务:将以下模糊提示改写为清晰、具体的提示。
练习2:少样本提示设计¶
任务:设计一个少样本提示,用于情感分析。
任务:判断新闻标题的情感(正面/负面/中性)
提示设计:
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
练习3:CoT提示应用¶
任务:为以下问题设计思维链提示。
问题:小明有5个苹果,给了小红3个,又从爸爸那里得到7个,最后有几个苹果?
CoT提示:
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
6.2 进阶练习¶
练习4:ReAct模式设计¶
任务:设计一个ReAct提示,用于回答"中国人口最多的城市是哪个?"
ReAct提示:
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
练习5:提示链设计¶
任务:设计一个提示链,用于: 1. 从长文章中提取关键信息 2. 总结核心观点 3. 生成3个问题
步骤1(提取):
______________________________________________________________________
步骤2(总结):
______________________________________________________________________
步骤3(生成问题):
______________________________________________________________________
6.3 实战挑战¶
挑战1:构建个人AI助手¶
任务:设计一个系统提示,创建一个专注于特定领域的AI助手。
助手名称:_________________
角色定义:
______________________________________________________________________
核心能力:
1. _________________
2. _________________
3. _________________
行为准则:
______________________________________________________________________
输出风格:
______________________________________________________________________
挑战2:优化现有提示¶
任务:分析并优化以下低效提示。
原提示:"帮我写一个Python程序计算平均值"
问题分析:
- _____________________________________________________________________
- _____________________________________________________________________
优化后的提示:
______________________________________________________________________
______________________________________________________________________
6.4 练习答案参考¶
练习1答案¶
改写1:
"请用300字介绍人工智能的三个主要应用领域:
1. 自然语言处理
2. 计算机视觉
3. 推荐系统
使用通俗易懂的语言,面向高中生读者。"
改写2:
"写一篇600字的议论文,主题是'个人如何为环保做贡献',
论点明确,包含3个论据,有引言和结论。"
练习2答案¶
提示设计:
请判断以下新闻标题的情感倾向(正面/负面/中性):
示例1: "科学家发现治疗癌症新方法" → 正面
示例2: "暴雨导致城市交通瘫痪" → 负面
示例3: "统计局发布第三季度经济数据" → 中性
判断以下标题:
1. "公司宣布大规模裁员计划"
2. "新公园即将对市民开放"
3. "今日油价维持不变"
练习3答案¶
CoT提示:
问题:小明有5个苹果,给了小红3个,又从爸爸那里得到7个,最后有几个苹果?
让我们一步步思考:
1. 初始苹果数:5个
2. 给小红3个:5 - 3 = 2个
3. 从爸爸那里得到7个:2 + 7 = 9个
答案:最后有9个苹果
7. 扩展资源与参考文献¶
7.1 推荐学习资源¶
在线教程和指南¶
| 资源名称 | 链接 | 特点 |
|---|---|---|
| Prompt Engineering Guide | https://www.promptingguide.ai/ | 最全面的提示工程指南 |
| Learn Prompting | https://learnprompting.org/ | 结构化课程,从入门到高级 |
| DAIR.AI Prompt Engineering Guide | https://github.com/dair-ai/Prompt-Engineering-Guide | GitHub 70K+星,丰富的资源集合 |
官方文档¶
| 资源名称 | 链接 | 适用场景 |
|---|---|---|
| OpenAI Prompt Engineering | https://platform.openai.com/docs/guides/prompt-engineering | ChatGPT和API用户 |
| Anthropic Prompt Engineering | https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering | Claude用户 |
| Google Cloud Prompt Engineering | https://cloud.google.com/discover/what-is-prompt-engineering | 入门学习 |
在线课程¶
| 课程名称 | 平台 | 难度 |
|---|---|---|
| ChatGPT for Everyone | learnprompting.org | 入门 |
| Introduction to Prompt Engineering | learnprompting.org | 入门-中级 |
| Advanced Prompt Engineering for LLMs | Maven | 高级 |
| AI Red-Teaming and AI Security | learnprompting.org | 高级 |
7.2 重要论文和文献¶
| 论文/文献 | 年份 | 贡献 |
|---|---|---|
| Chain of Thought Prompting Elicits Reasoning in LLMs | 2022 | 提出CoT提示技术 |
| Self-Consistency Improves CoT Reasoning | 2023 | 提出自一致性方法 |
| ReAct: Synergizing Reasoning and Acting in Language Models | 2023 | 提出ReAct框架 |
| Tree of Thoughts: Deliberate Problem Solving with LLMs | 2023 | 提出思维树方法 |
| Graph of Thoughts: Generating Complex Reasoning with LLMs | 2024 | 提出图思维方法 |
| Reflexion: Language Agents with Verbal Reinforcement Learning | 2023 | 提出Reflexion方法 |
7.3 实用工具¶
| 工具名称 | 用途 | 链接 |
|---|---|---|
| Prompt Perfect | 提示优化 | https://promptperfect.jina.ai/ |
| LearnPrompting.org Courses | 在线课程 | https://learnprompting.org/ |
| Anthropic Claude | AI助手 | https://claude.ai/ |
| OpenAI ChatGPT | AI助手 | https://chatgpt.com/ |
7.4 社区和讨论¶
| 社区 | 平台 | 特点 |
|---|---|---|
| Prompt Engineering | 社区讨论 | |
| Learn Prompting Discord | Discord | 学习交流 |
| Hacker News | - | 最新资讯讨论 |
7.5 持续学习建议¶
学习路径:
1. 入门(1-2周)
- 阅读官方文档
- 完成Learn Prompting基础课程
- 实践基本提示技巧
2. 进阶(2-4周)
- 学习CoT、Few-shot等技术
- 完成进阶课程
- 参与实际项目
3. 高级(持续)
- 学习ReAct、ToT等框架
- 阅读最新论文
- 贡献开源项目
总结¶
核心要点回顾¶
- 提示工程是基础技能:清晰、具体、结构化的提示能显著提升输出质量
- 从基础到高级:零样本→少样本→CoT→自一致性→ReAct→ToT
- 实践是关键:理论学习必须配合大量实践
- 迭代优化:好的提示是不断改进出来的
下一步行动¶
- ✅ 学习本教程的理论部分
- 🔲 完成所有练习题
- 🔲 在实际项目中应用所学技术
- 🔲 持续关注最新研究进展
- 🔲 加入社区,参与讨论
祝学习愉快!提示工程是一门实践性很强的技能,动手实践是最好的学习方法。
最后更新:2025年2月