前言
"写个代码" "帮我写个快速排序函数,用 Python 实现,要求时间复杂度 O(n log n),添加详细注释"
同样是让 AI 写代码,为什么第一个指令得到的是模糊的回复,而第二个能得到精确满足需求的代码?
这就是提示词工程(Prompt Engineering)的魔力。
好的 Prompt = 好的输出。今天我们来学习如何写出让 AI "秒懂"的提示词。
1. 什么是提示词工程
提示词(Prompt):你给大模型的输入指令
提示词工程(Prompt Engineering):设计和优化 Prompt 的艺术和科学
Prompt 的黄金结构
1┌─────────────────────────────────────────┐ 2│ Prompt 结构模板 │ 3├─────────────────────────────────────────┤ 4│ │ 5│ 1. 角色(Role) │ 6│ "你是一个经验丰富的程序员..." │ 7│ │ 8│ 2. 任务(Task) │ 9│ "请写一个快速排序函数..." │ 10│ │ 11│ 3. 上下文(Context) │ 12│ "用于处理整数数组..." │ 13│ │ 14│ 4. 约束(Constraints) │ 15│ "要求O(n log n)时间复杂度..." │ 16│ │ 17│ 5. 格式(Format) │ 18│ "返回JSON格式,包含code和说明..." │ 19│ │ 20│ 6. 示例(Examples) │ 21│ "输入:[3,1,2] 输出:[1,2,3]" │ 22│ │ 23└─────────────────────────────────────────┘ 24
2. 案例
案例 1:明确角色的力量
❌ 没有角色:
1"怎么提高编程能力?" 2
✅ 有角色:
1"你是一位有10年经验的编程导师, 2曾经指导过数百名初学者成为资深工程师。 3请给我提供提高编程能力的建议。" 4
效果差异:有角色的 Prompt 能得到更有针对性、更有深度的回答。
案例 2:具体明确的任务
❌ 模糊的任务:
1"帮我写个文章" 2
✅ 明确的任务:
1"请写一篇关于人工智能发展历史的文章, 2要求: 31. 字数800-1000字 42. 包含三个主要发展阶段 53. 提到GPT、Llama等关键模型 64. 语言风格通俗易懂" 7
SMART 原则:
- Specific(具体明确):写 Python 代码而非"写代码"
- Measurable(可衡量):100字以内
- Achievable(可达成):不要求超出模型能力
- Relevant(相关性):任务与上下文相关
- Time-bound(有时限):30秒内能读完的介绍
案例 3:提供充足上下文
❌ 缺少上下文:
1"这个代码有什么问题?" 2[粘贴一段代码] 3
✅ 充足上下文:
1"我正在开发一个电商网站的用户认证功能。 2这段Python代码用于验证用户密码, 3但总是返回False,帮我找出问题: 4 5[粘贴代码] 6 7预期行为:正确密码返回True,错误密码返回False 8实际行为:所有密码都返回False" 9
上下文要素清单:
- 背景:这是什么项目/场景?
- 目标:想要达到什么效果?
- 现状:当前是什么情况?
- 问题:遇到了什么具体问题?
案例 4:使用示例的魔力
少样本学习示例:
1例子1: 2输入:苹果 3分类:水果 4 5例子2: 6胡萝卜 7分类:蔬菜 8 9例子3: 10香蕉 11分类:? 12
思维链示例:
1问题:小明有5个苹果,吃了2个,又买了3个,现在有几个? 2 3思考过程: 41. 初始:小明有5个苹果 52. 吃了2个:5 - 2 = 3个 63. 买了3个:3 + 3 = 6个 7答案:6个 8 9现在请解决: 10小红有10颗糖,给了妹妹3颗,妈妈又给了她5颗,现在有几颗? 11
效果:示例能让 AI 快速理解你想要的输出模式。
案例 5:格式化输出
❌ 不好的 Prompt:
1"分析这段代码" 2
✅ 好的 Prompt:
1"请分析以下代码,并按以下格式输出: 2 3## 代码功能 4[简要说明代码的功能] 5 6## 时间复杂度 7[分析时间复杂度] 8 9## 改进建议 10[列出3条具体改进建议] 11 12## 重构代码 13\`\`\`python 14[重构后的代码] 15\`\`\`" 16
案例 6:常用 Prompt 模板
代码生成模板:
1你是一个{语言}专家。 2请写一个{功能描述}的{语言}函数, 3要求: 41. {要求1} 52. {要求2} 63. {要求3} 7 8请包含: 9- 详细的注释 10- 错误处理 11- 使用示例 12
Bug 调试模板:
1我在开发一个{项目类型}项目, 2这段{语言}代码出现了{问题描述}: 3 4\`\`\`{语言} 5{代码} 6\`\`\` 7 8预期行为:{预期} 9实际行为:{实际} 10 11请帮我: 121. 找出问题所在 132. 解释问题原因 143. 提供修复方案 15
总结
核心技巧速记
| 技巧 | 说明 | 示例 |
|---|---|---|
| 明确角色 | 给 AI 分配身份 | "你是一位经验丰富的程序员" |
| 具体任务 | 清楚说明要做什么 | "写一个快速排序,O(n log n)" |
| 充足上下文 | 提供背景信息 | "这是电商网站的推荐功能" |
| 使用示例 | 展示期望格式 | "输入A输出B,输入C输出?" |
| 明确格式 | 说明输出形式 | "以 JSON 格式返回" |
Prompt 检查清单
发送 Prompt 前,问自己:
- 角色清晰:是否告诉 AI 它的角色?
- 任务明确:是否清楚说明了要做什么?
- 上下文充足:是否提供了足够的背景信息?
- 约束具体:是否说明了限制和要求?
- 格式明确:是否说明了输出格式?
- 示例充分:是否提供了参考示例?
常见陷阱
| 陷阱 | 问题 | 解决方案 |
|---|---|---|
| 过于简短 | "帮我优化代码" | 说明具体优化目标 |
| 矛盾要求 | "性能最好但代码简洁" | 明确优先级 |
| 一次太多 | "写完整电商系统" | 分解为小任务 |
| 缺少验证 | "计算复杂数学" | 要求给出计算步骤 |
高级技巧
1. 迭代优化
1第一次尝试 → 评估结果 → 修改 Prompt → 再次尝试 2
2. 温度参数调整
- 低温度(0.1-0.3):更确定、一致的输出
- 中等温度(0.4-0.7):平衡创造性和准确性
- 高温度(0.8-1.0):更创造性、多样化的输出
3. 分解复杂任务
1"设计一个博客系统" 2↓ 分解为 3"1. 设计数据库结构" 4"2. 设计用户认证 API" 5"3. 设计文章发布 API" 6
- 不要期望一次完美:迭代优化是常态
- 从简单开始:先验证基本方向,再添加细节
- 保存好用的 Prompt:建立自己的模板库
- 对比实验:用不同版本测试效果差异
- 学习他人经验:参考优秀的 Prompt 示例
《提示词工程入门-03》 是转载文章,点击查看原文。
