【大模型实战笔记 6】Prompt Engineering 提示词工程
《深入解析Prompt Engineering:从基础到高级技巧的完整指南》
- 《深入解析Prompt Engineering:从基础到高级技巧的完整指南》
- 1. 什么是Prompt Engineering?
- 1.1 Prompt的基本概念
- 2. Prompt Engineering最佳实践
- 2.1 核心原则
- 1. 明确目标
- 2. 提供上下文
- 3. 使用具体的指示
- 4. 提供示例
- 5. 使用分步指示
- 2.2 高级技巧
- 6. 控制输出长度
- 7. 使用占位符和模板
- 8. 反复试验和调整
- 3. 核心提示技术详解
- 3.1 Zero-shot、One-shot和Few-shot提示
- 3.2 Chain-of-Thought (CoT) 提示
- 3.3 ReAct 框架
- 3.4 Reflexion 技术
- 4. 结构化输出设计
- 4.1 JSON格式输出
- 4.2 Markdown格式报告
- 4.3 表格格式数据
- 5. 实际应用场景
- 5.1 代码生成
- 5.2 数据处理
- 5.3 文本分类
- 5.4 创意生成
- 6. 高级提示工程技术
- 6.1 角色提示
- 6.2 种子词提示
- 6.3 知识生成提示
- 7. 图像提示工程技术
- 7.1 明确图像生成目标
- 7.2 提供详细描述
- 7.3 使用多模态提示
- 8. 实战框架:CRISPE模型
- 9. 总结
1. 什么是Prompt Engineering?
Prompt Engineering(提示词工程)是设计和优化输入提示(prompt)以获得预期输出的过程。在与大型语言模型(如ChatGPT、GPT-4)交互时,如何构造提示会显著影响模型的回答质量。
1.1 Prompt的基本概念
Prompt是一种人为构造的输入序列,用于引导GPT模型根据先前输入的内容生成相关的输出。简单来说,就是你向模型提供的"提示词"。
示例对比:
- 简单提示:“告诉我关于猫的事情。”
- 优化提示:“请详细描述猫的生物学特征、行为习惯以及它们在不同文化中的象征意义。”
2. Prompt Engineering最佳实践
2.1 核心原则
1. 明确目标
明确你希望模型完成的任务或回答的问题。
- 目标不明确:“告诉我关于气候变化的事情。”
- 目标明确:“请简要描述气候变化的主要原因及其对农业的影响。”
2. 提供上下文
为模型提供必要的背景信息或上下文,以帮助其理解任务。
- 无上下文:“解释一下微积分。”
- 有上下文:“作为一名高中生,我正在学习微积分。请用简单的语言解释一下微积分的基本概念。”
3. 使用具体的指示
使用明确的指示和要求,避免模糊不清的提示。
- 模糊指示:“写一篇关于技术的文章。”
- 具体指示:“请写一篇关于人工智能在医疗领域应用的文章,包含以下几点:应用场景、优势和挑战。”
4. 提供示例
通过提供示例来展示你期望的输出格式或内容。
# 无示例:"生成一个关于产品的报告。"
# 有示例:"生成一个关于产品的报告,格式如下:
# --产品名称:
# --价格:
# --特点:
# --优点:
# --缺点:"
5. 使用分步指示
对于复杂任务,分解为多个步骤,逐步引导模型完成。
- 一步完成:“解释并解决这个数学问题:2x + 3 = 7。”
- 分步指示:“首先,解释如何解方程。然后,解方程2x + 3 = 7。”
2.2 高级技巧
6. 控制输出长度
通过提示控制输出的长度,确保内容简洁或详细。
- 无长度控制:“解释一下量子力学。”
- 有长度控制:“用不超过100字解释量子力学的基本概念。”
7. 使用占位符和模板
使用占位符和模板来指示需要填充的内容或格式。
- 无模板:“生成一个用户注册表单。”
- 有模板:“生成一个用户注册表单,包含以下字段:用户名、密码、邮箱、电话号码。”
8. 反复试验和调整
不断试验和调整提示,观察模型的输出,并根据需要进行优化。
3. 核心提示技术详解
3.1 Zero-shot、One-shot和Few-shot提示
Zero-shot:模型在没有任何示例的情况下完成任务。
提示:"翻译这句话:'The cat is on the roof.'"
回答:"猫在屋顶上。"
One-shot:提供一个示例帮助模型理解任务。
提示:"翻译以下句子:'The dog is in the garden.' -> '狗在花园里。' 'The cat is on the roof.' ->"
回答:"猫在屋顶上。"
Few-shot:提供多个示例帮助模型理解复杂任务。
3.2 Chain-of-Thought (CoT) 提示
通过展示模型思考过程的步骤来解决复杂问题。
提示:"如果一个苹果和一个香蕉的总价是3美元,一个苹果的价格是2美元,那么一个香蕉的价格是多少?请展示你的思考过程。"
回答:"首先,苹果的价格是2美元。总价是3美元,所以香蕉的价格是3美元减去2美元,等于1美元。"
3.3 ReAct 框架
结合反应(Reaction)和行动(Action)的提示技术。
提示:"你是一个虚拟助手。用户问:'我今天应该穿什么衣服?' 你需要根据天气情况给出建议。步骤1:查询天气。步骤2:根据天气给出建议。"
回答:
- 步骤1:"查询天气:今天的天气是晴天,温度在25~30度之间。"
- 步骤2:"建议:今天适合穿轻便的夏装,比如T恤和短裤。"
3.4 Reflexion 技术
模型在生成初步答案后,反思并可能修改其回答。
提示:"解释为什么天空是蓝色的。"
初步回答:"因为大气中的氧气和氮气散射阳光中的蓝色光。"
反思:"这解释不够准确。实际上,蓝色光被散射得更多是因为瑞利散射效应。"
修改回答:"天空是蓝色的,因为阳光穿过大气层时,短波长的蓝色光比其他颜色的光被空气分子散射得更多,这种现象被称为瑞利散射。"
4. 结构化输出设计
4.1 JSON格式输出
提示:"""
请生成一个包含以下信息的JSON对象:
- 名字
- 年龄
- 职业
- 兴趣爱好示例格式:
{
"name": "张三",
"age": 30,
"occupation": "软件工程师",
"hobbies": ["阅读", "旅行", "编程"]
}
"""输出:
{
"name": "李四",
"age": 25,
"occupation": "数据分析师",
"hobbies": ["绘画", "跑步", "音乐"]
}
4.2 Markdown格式报告
提示:"""
请根据以下信息生成一份Markdown格式的报告:
- 标题:气候变化对农业的影响
- 引言:简要介绍气候变化的背景。
- 影响:详细描述气候变化对农业的具体影响。
- 结论:总结并提出应对措施。
"""输出:
# 气候变化对农业的影响## 引言气候变化是指长期气候模式的变化,主要由人类活动引起的温室气体排放导致...## 影响气候变化对农业的影响主要体现在以下几个方面:
1. **作物生长周期**:温度升高和降水模式的变化影响作物的生长周期...
2. **病虫害**:气候变化可能增加病虫害的发生频率和严重程度...
3. **水资源**:气候变化导致的极端天气事件,如干旱和洪水...## 结论为了应对气候变化对农业的影响,需要采取以下措施:
1. 推广耐高温和抗旱作物品种。
2. 改进农业灌溉技术,提高用水效率。
3. 加强农业病虫害监测和防治工作。
4.3 表格格式数据
提示:"""
请生成一张包含以下信息的表格:
- 产品名称
- 价格
- 库存数量
- 供应商示例格式:
| 产品名称 | 价格 | 库存数量 | 供应商 |
|---|---|---|---|
| 产品A | 100 | 50 | 供应商1 |
| 产品B | 200 | 30 | 供应商2 |
"""输出:
| 产品名称 | 价格 | 库存数量 | 供应商 |
|---|---|---|---|
| 产品C | 150 | 20 | 供应商3 |
| 产品D | 250 | 10 | 供应商4 |
5. 实际应用场景
5.1 代码生成
提示:"请用Python编写一个函数,计算一个列表中所有数字的平均值。"输出:
def calculate_average(numbers):return sum(numbers) / len(numbers)
5.2 数据处理
提示:"请将以下数据转换为标准日期格式:'12/31/2023', '01-01-2024', '2024.02.28'。"输出:"2023-12-31, 2024-01-01, 2024-02-28"
5.3 文本分类
提示:"请将以下句子分类为'正面'或'负面':'我今天很开心。' '这个产品真糟糕。'"输出:"正面:'我今天很开心。' 负面:'这个产品真糟糕。'"
5.4 创意生成
提示:"请编写一个关于勇敢小狗冒险的短篇故事。"输出:"从前有一只勇敢的小狗,它每天都在森林里冒险。有一天,它遇到了一个迷路的小女孩,决定帮助她找到回家的路……"
6. 高级提示工程技术
6.1 角色提示
通过为模型指定特定角色来引导输出。
提示公式:"作为[角色]生成[任务]"示例:
- 任务:生成对客户查询的回复
- 角色:客户服务代表
- 提示公式:"作为客户服务代表,生成对客户查询的回复。"
6.2 种子词提示
通过提供特定的种子词或短语来控制输出。
提示公式:"请根据以下种子词生成文本:[种子词]"示例:
- 任务:编写一篇有关龙的故事
- 种子词:"龙"
- 提示公式:"请根据以下种子词生成文本:龙"
6.3 知识生成提示
从模型中引出新的、原创的信息。
提示公式:"请生成关于X的新的和原创的信息"示例:
- 任务:从给定的数据集中生成有关客户行为的见解
- 提示公式:"请从这个数据集中生成有关客户行为的新的和原创的信息"
7. 图像提示工程技术
7.1 明确图像生成目标
- 目标不明确:“生成一张图片。”
- 目标明确:“生成一张卡通风格的森林场景,包含动物和树木。”
7.2 提供详细描述
- 简单描述:“生成一张城市图片。”
- 详细描述:“生成一张现代城市的图片,包含高楼大厦、街道和行人,使用明亮的色调。”
7.3 使用多模态提示
结合文本和图像提示,提供更加丰富的信息。
提示:"生成一张森林的图片,参考下面的描述和图像。
描述:一个宁静的森林,阳光透过树叶。
[参考图像链接]"
8. 实战框架:CRISPE模型
CRISPE是Prompt Engineering的经典框架:
- Capacity and Role(能力与角色):你希望ChatGPT扮演怎样的角色
- Reason(洞察):背景信息和上下文
- Instruction(陈述):你希望ChatGPT做什么
- Style(个性):你希望ChatGPT以什么风格或方式回答
- Experiment(实验):要求ChatGPT提供多个答案
示例:
角色:产品经理
背景:需要设计一个赛博朋克风格的网站首页
任务:编写PRD文档,包含主题、简介、问题陈述、目标与目的、用户故事、技术要求等
风格:专业、详细
实验:提供3个不同的设计方案
9. 总结
Prompt Engineering是与大型语言模型有效交互的关键技能。通过掌握:
- 基础原则:明确目标、提供上下文、使用具体指示
- 核心技术:Zero-shot、CoT、ReAct等提示技术
- 结构化输出:JSON、Markdown、表格等格式设计
- 实战应用:代码生成、数据处理、创意写作等场景
- 高级技巧:角色提示、种子词提示、知识生成等
