·17 分钟
Prompt Engineering 完全指南:让 AI 听懂你的话
Prompt Engineering提示词工程LLM最佳实践AI
什么是 Prompt Engineering?
Prompt Engineering(提示词工程)是设计和优化提示词(prompt)的技术,目的是让大语言模型(LLM)更好地理解你的需求,生成更准确、更有用的回答。
为什么重要?
code
差的提示词: "写一首诗"
好的提示词: "写一首七言绝句,主题是春天的雨,意境要优美,用词要典雅"
结果: 从随机生成 → 高质量定制化输出
基础原则
1. 明确具体
❌ 模糊的提示词:
code
帮我写个邮件
✅ 明确的提示词:
code
写一封工作邮件,主题是项目进度汇报,收件人是项目经理张总,
内容包括:本周完成的任务、遇到的问题、下周计划。
语气要正式专业。
2. 提供上下文
❌ 缺乏上下文:
code
解释这个函数
✅ 提供上下文:
code
我正在开发一个电商网站,这是购物车的计算函数。
请解释它的功能,并指出可能的优化点。
def calculate_total(items):
total = 0
for item in items:
total += item['price'] * item['quantity']
return total
3. 指定输出格式
❌ 没指定格式:
code
列出 Python 的数据类型
✅ 指定格式:
code
以表格形式列出 Python 的主要数据类型,包含以下列:
1. 类型名称
2. 示例
3. 主要用途
4. 可变性(可变/不可变)
常用技巧
1. 角色设定(Role Prompting)
让模型扮演特定角色:
code
你是一位有 10 年经验的 Python 高级工程师。
请审查以下代码,指出潜在的性能问题和改进建议。
def process_data(data):
result = []
for item in data:
if item > 0:
result.append(item * 2)
return result
常见角色:
- 代码审查专家
- 技术文档写手
- 产品经理
- UI/UX 设计师
- 安全专家
2. 少样本提示(Few-shot Prompting)
通过示例教模型:
code
将以下文本分类为正面、负面或中性情感。
文本: "这个产品太棒了!"
情感: 正面
文本: "服务态度很差"
情感: 负面
文本: "今天天气还行"
情感: 中性
文本: "餐厅的菜很好吃,但是上菜太慢了"
情感: ?
3. 思维链(Chain of Thought)
引导模型逐步推理:
code
问题: 一个水池有两个水管,A管每小时注入3吨水,B管每小时排出1吨水。
水池容量是20吨,从空开始,多久能装满?
请逐步思考:
1. 首先,计算净注入速率
2. 然后,计算装满所需时间
3. 最后,给出答案
模型回答:
code
1. 净注入速率 = A管速率 - B管速率 = 3 - 1 = 2吨/小时
2. 装满时间 = 水池容量 / 净注入速率 = 20 / 2 = 10小时
3. 答案: 需要10小时装满
4. 结构化输出
要求模型按特定结构输出:
code
请分析以下代码,按以下格式输出:
## 功能描述
[简要描述代码功能]
## 潜在问题
1. [问题1]
2. [问题2]
## 改进建议
1. [建议1]
2. [建议2]
## 优化后的代码
[优化后的代码]
代码:
def find_max(arr):
max_val = arr[0]
for i in range(len(arr)):
if arr[i] > max_val:
max_val = arr[i]
return max_val
高级技巧
1. 自我一致性(Self-Consistency)
让模型多次回答,选择最一致的答案:
code
请用三种不同的方法解决这个问题,然后选择最可靠的方法:
问题: 如何判断一个数是否是质数?
方法1: [模型的解答1]
方法2: [模型的解答2]
方法3: [模型的解答3]
最可靠的方法: [模型的选择和理由]
2. 思维树(Tree of Thoughts)
让模型探索多个推理路径:
code
问题: 设计一个短链接服务
请从以下三个角度思考设计方案:
角度1 - 数据存储:
[模型的思考]
角度2 - 生成算法:
[模型的思考]
角度3 - 高可用性:
[模型的思考]
综合方案:
[模型的综合设计]
3. 反思与修正(Reflection)
让模型自我检查和修正:
code
请完成以下任务,并在完成后自我检查:
任务: 写一个函数,计算列表中所有偶数的和
第一版代码:
[模型的代码]
自我检查:
1. 是否正确处理了空列表?
2. 是否正确识别了偶数?
3. 是否有边界情况遗漏?
修正后的代码:
[模型修正后的代码]
实战案例
案例1:代码生成
code
你是一位资深 Python 开发者。请根据以下需求编写代码:
需求:
1. 创建一个简单的待办事项管理器
2. 支持添加、删除、标记完成、查看所有待办
3. 使用命令行交互
4. 数据保存到本地文件
技术要求:
- 使用 Python 3.10+
- 使用 dataclass 存储待办项
- 使用 JSON 格式保存数据
- 添加适当的错误处理
请先设计类结构,然后实现完整代码。
案例2:文档生成
code
请为以下 API 生成技术文档:
API: POST /api/users
功能: 创建新用户
请求参数:
- name (string, 必填): 用户名
- email (string, 必填): 邮箱
- age (int, 可选): 年龄
请按以下格式生成文档:
## 接口说明
[简要描述]
## 请求参数
[表格形式]
## 请求示例
[JSON 格式]
## 响应示例
[成功和失败的示例]
## 错误码说明
[表格形式]
## 注意事项
[列表形式]
案例3:数据分析
code
请分析以下销售数据,提供业务洞察:
数据:
月份 | 销售额 | 同比增长
1月 | 100万 | 10%
2月 | 80万 | -5%
3月 | 120万 | 15%
4月 | 90万 | -10%
5月 | 150万 | 20%
请从以下角度分析:
1. 整体趋势
2. 季节性规律
3. 异常点分析
4. 业务建议
输出格式: Markdown 报告
常见错误与避免
❌ 错误1:提示词太短
code
错误: "写代码"
正确: "用 Python 写一个快速排序算法,要求:
1. 支持自定义比较函数
2. 处理空列表情况
3. 添加类型注解"
❌ 错误2:缺乏约束
code
错误: "写一篇文章"
正确: "写一篇 800 字左右的技术博客,主题是'Python 异步编程',
目标读者是有 Python 基础的开发者,
要求包含代码示例,语言要通俗易懂"
❌ 错误3:假设模型理解上下文
code
错误: "修复这个 bug"
正确: "这段代码的目的是计算两个日期之间的天数差,
但是当结束日期早于开始日期时会返回负数。
请修复这个问题,确保总是返回正数。"
❌ 错误4:不验证输出
code
错误: 直接使用模型输出
正确: 检查输出是否符合要求,必要时要求修正
工具与资源
1. 在线 Playground
2. 提示词库
3. 学习资源
最佳实践清单
✅ 提示词设计
- 明确任务目标
- 提供足够上下文
- 指定输出格式
- 设置角色身份
- 给出示例(如需要)
✅ 迭代优化
- 测试不同变体
- 收集反馈
- 记录有效模式
- 持续改进
✅ 质量控制
- 验证输出准确性
- 检查是否符合要求
- 评估一致性
- 监控异常情况
总结
Prompt Engineering 是与 AI 高效沟通的关键技能:
- 明确具体: 清晰表达你的需求
- 提供上下文: 让模型理解背景
- 结构化输出: 指定期望的格式
- 迭代优化: 不断改进提示词
掌握这些技巧,你将能够:
- 提高 AI 输出质量
- 减少沟通成本
- 获得更一致的结果
- 解锁 AI 的更多能力
记住:好的提示词 = 好的结果。投入时间优化提示词,将带来指数级的回报。
延伸阅读: