Prompt Engineering 实践总结
2023 年,用了一年的 LLM,从 GPT-3.5 到 GPT-4,从 Claude 到国产模型。
踩过的坑比吃过的盐还多。总结一些经验。
为什么 Prompt 重要
同样的模型,不同的 Prompt,效果天差地别。
好的 Prompt:
不好的 Prompt:
核心原则
1. 明确任务
别让模型猜你要什么。
1 2 3 4 5
| "给我写点代码"
"用 Python 写一个快速排序函数,包含完整的类型注解和单元测试"
|
2. 给出上下文
模型需要知道背景。
1 2 3 4 5
| "解释一下这个 API"
"我是一个 Python 后端开发,正在学习 FastAPI。请用通俗易懂的方式解释 RESTful API 的概念,并给出一个简单的 FastAPI 示例"
|
3. 指定格式
输出格式要明确。
1 2 3 4 5
| "给我一些编程语言"
"用 JSON 格式列出 5 种主流编程语言,包含:name(名称)、creator(创始人)、year(诞生年份)、paradigm(编程范式)"
|
4. 分解任务
复杂问题拆成几步。
1 2 3 4 5 6 7 8
| "给我写一个完整的用户管理系统"
"第一步:设计数据库表结构 第二步:写用户注册的 API 第三步:写用户登录的 API 第四步:写获取用户信息的 API"
|
实用技巧
1. Few-shot Learning
给例子,效果更好。
1 2 3 4 5 6 7 8 9 10
| 判断以下评论的情感(正面/负面/中性):
评论:东西收到了,很满意,好评! 情感:正面
评论:等了一周还没发货,体验太差了 情感:负面
评论:就那样吧,普通水平 情感:
|
2. 角色设定
让模型进入特定角色。
1 2 3
| 你是一个资深 Python 工程师,擅长写简洁优雅的代码。 你的代码遵循 PEP 8 规范,注重可读性和性能。 现在,请帮我优化以下代码...
|
3. 思维链 (Chain of Thought)
让模型分步思考。
1 2 3 4 5 6 7 8 9
| 解题思路: 1. 理解问题 2. 分析数据 3. 设计算法 4. 实现代码 5. 测试验证
问题:找出数组中出现次数超过一半的数字 请按照以上思路解答...
|
4. 结构化输出
用 Markdown、JSON 格式。
1 2 3 4 5 6 7 8 9 10 11 12
| 用 Markdown 格式输出,结构如下:
## 技术名称 - 简介:(一句话介绍) - 优点: - 优点1 - 优点2 - 缺点: - 缺点1
## 技术名称 ...
|
5. 限制条件
明确禁止什么。
1 2 3 4 5
| 写一段自我介绍,但满足以下条件: - 不能超过 100 字 - 不能出现真实姓名 - 不能提及具体公司名称 - 语气要积极向上
|
常见问题与解决
1. 输出太长
2. 格式不稳定
1 2
| 始终用以下 JSON 格式输出,不要改变: {"name": "xxx", "age": xxx, "city": "xxx"}
|
3. 幻觉
1 2
| 如果不确定某个信息,请明确说"我不确定",不要编造。 引用你引用的信息来源。
|
4. 上下文太长
进阶技巧
1. 系统提示词
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| messages = [ { "role": "system", "content": """你是一个专业的技术作家。 - 写作风格:简洁、专业、易懂 - 输出格式:Markdown - 代码示例:必须有注释 - 遇到不确定的术语要解释""" }, { "role": "user", "content": "解释一下什么是 Docker" } ]
|
2. 自洽性检查
1 2 3 4 5 6 7 8
| prompt = """ 1. 给出问题的答案 2. 验证答案是否正确 3. 如果错误,给出修正后的答案
问题:Python 中 list 和 tuple 的区别是什么? """
|
3. 迭代优化
场景示例
代码审查
1 2 3 4 5 6 7 8 9 10 11 12 13
| 作为代码审查专家,请审查以下 Python 代码:
1. 找出潜在的 bug 2. 指出代码质量问题 3. 提出优化建议
代码: def process_data(data): result = [] for item in data: if item['status'] == 'active': result.append(item) return result
|
写作辅助
1 2 3 4 5 6 7 8
| 你是一个技术博客作者。 请用以下风格写一篇博客: - 开头用一个有趣的故事或问题 - 中间用代码示例解释技术 - 结尾总结和展望
主题:Python 异步编程入门 目标读者:有一定 Python 基础的开发者
|
数据处理
1 2 3 4 5 6 7
| 我有一份 CSV 数据,包含以下字段: user_id, username, email, created_at, status
请: 1. 统计每个月的用户增长数 2. 找出活跃用户(有登录记录的) 3. 生成一个 JSON 格式的报告
|
感悟
Prompt Engineering 和编程差不多,需要不断练习。
没有银弹,只有经验。
多试,多调,多总结。
这就是 AI 时代的新技能吧。