Prompt Engineering 是与大语言模型(LLM)有效沟通的关键技能。好的 Prompt 可以显著提升 AI 输出的质量和准确性。本文将系统介绍 Prompt Engineering 的核心技巧。
为什么 Prompt 如此重要?
同一个问题,不同的 Prompt:
❌ 糟糕的 Prompt:
"写代码"
✅ 好的 Prompt:
"使用 Python 编写一个函数,实现二分查找算法。
要求:
1. 接收已排序的列表和目标值作为参数
2. 返回目标值的索引,未找到返回 -1
3. 添加详细的注释说明
4. 提供时间复杂度分析"
LLM 是”统计鹦鹉”,它根据上下文预测最可能的输出。精确的上下文 = 精确的输出。
基础原则
1. 清晰具体
❌ 模糊: "帮我优化这段代码"
✅ 具体: "帮我优化以下 JavaScript 代码的性能:
1. 减少不必要的循环
2. 使用更高效的数据结构
3. 保持代码可读性
```javascript
function findDuplicates(arr) {
const duplicates = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j] && !duplicates.includes(arr[i])) {
duplicates.push(arr[i]);
}
}
}
return duplicates;
}
```"
2. 提供上下文
❌ 缺乏上下文:
"解释 Redux"
✅ 有上下文:
"我是一个有 React 基础的前端开发者,正在学习状态管理。
请用简单易懂的方式解释 Redux 的核心概念:
- 什么是 Store, Action, Reducer
- 为什么需要 Redux
- 和 React Context 的区别
请用类比的方式帮助理解。"
3. 指定输出格式
✅ 指定格式:
"分析以下技术栈的优缺点,以表格形式输出:
| 技术 | 优点 | 缺点 | 适用场景 |
|-----|------|------|---------|
| ... | ... | ... | ... |
技术栈:React, Vue, Angular"
4. 分步骤说明
✅ 分步骤:
"帮我设计一个用户注册功能,按以下步骤思考:
Step 1: 列出需要收集的用户信息字段
Step 2: 设计数据验证规则
Step 3: 设计数据库表结构
Step 4: 编写 API 接口
Step 5: 考虑安全性问题"
高级技巧
Few-Shot Learning
提供示例让模型学习模式:
"将以下中文技术术语翻译为英文:
示例:
- 深度学习 → Deep Learning
- 机器学习 → Machine Learning
- 神经网络 → Neural Network
请翻译:
- 卷积神经网络
- 循环神经网络
- 注意力机制
- 迁移学习"
Chain of Thought (CoT)
引导模型逐步推理:
"解决以下问题,请展示你的思考过程:
问题:一个背包容量为 10kg,有 3 件物品:
- 物品A: 重量 4kg, 价值 40
- 物品B: 重量 5kg, 价值 45
- 物品C: 重量 6kg, 价值 48
如何选择物品使总价值最大?
请按照以下步骤思考:
1. 列出所有可能的组合
2. 计算每种组合的总重量和总价值
3. 筛选出不超重的组合
4. 找出价值最大的组合"
Role Playing
赋予 AI 特定角色:
"你是一位资深的 React 架构师,拥有 10 年前端开发经验。
我正在重构一个电商网站的前端代码,当前面临以下问题:
- 组件嵌套过深,props 传递复杂
- 状态管理混乱,难以追踪数据流
- 性能问题,页面加载缓慢
请以架构师的视角,给我专业的重构建议。"
自我一致性 (Self-Consistency)
让模型从多个角度思考:
"分析使用 MongoDB 还是 PostgreSQL 的决策:
请从三个不同的角度分析:
1. 作为数据库专家,从数据一致性和事务支持角度分析
2. 作为性能工程师,从查询效率和扩展性角度分析
3. 作为项目经理,从团队技能和维护成本角度分析
最后综合三个角度,给出建议。"
常用 Prompt 模板
代码审查
"请对以下代码进行 Code Review:
```[language]
[代码]
请从以下方面评审:
- 代码质量和可读性
- 潜在的 Bug 和边界情况
- 性能问题
- 安全隐患
- 改进建议(附代码示例)“
### 技术方案设计
```markdown
"设计[功能名称]的技术方案:
背景:[背景描述]
需求:[具体需求]
约束:[技术约束、时间约束等]
请输出:
1. 整体架构设计
2. 核心流程图
3. 数据库设计
4. API 设计
5. 技术选型及理由
6. 潜在风险和应对方案"
错误排查
"帮我排查以下错误:
错误信息:
[错误日志]
相关代码:
```[language]
[代码片段]
环境信息:
- 操作系统:[OS]
- 运行时版本:[版本]
- 相关依赖:[依赖]
请分析:
- 错误原因
- 解决方案
- 如何避免类似问题”
### 文档生成
```markdown
"为以下代码生成文档:
```[language]
[代码]
要求:
- 函数/类的用途说明
- 参数说明(类型、含义、默认值)
- 返回值说明
- 使用示例
- 注意事项
输出格式:[JSDoc/TSDoc/Markdown 等]”
## Prompt 优化技巧
### 迭代优化
Round 1: 初始 Prompt → 查看输出 → 发现问题 Round 2: 添加约束条件 → 输出改善 → 还有不足 Round 3: 提供示例 → 输出接近预期 → 微调 Round 4: 最终版本
### 负面约束
明确告诉 AI 不要做什么:
```markdown
"解释 JavaScript 闭包的概念。
要求:
- 使用简单易懂的语言
- 提供代码示例
- 不要使用过于学术的术语
- 不要超过 500 字
- 不要偏离主题讨论其他概念"
温度参数
temperature = 0: 输出确定性高,适合代码生成、事实查询
temperature = 0.7: 平衡创造性和一致性,适合一般对话
temperature = 1.0+: 输出更随机,适合创意写作
常见问题解决
输出太长
"[你的问题]
注意:回答控制在 200 字以内,突出重点。"
输出格式不对
"[你的问题]
输出格式要求:
- 使用 Markdown 格式
- 代码块使用三个反引号
- 重点内容加粗
- 使用有序/无序列表组织
示例输出格式:
## 标题
**重点**: xxx
```code```"
输出不准确
"[你的问题]
重要提示:
- 如果不确定,请明确说明
- 不要编造信息
- 引用时说明来源
- 给出置信度评估"
总结
| 原则 | 说明 |
|---|---|
| 清晰具体 | 明确任务、要求、约束 |
| 提供上下文 | 背景信息、专业水平、目标 |
| 指定格式 | 表格、列表、代码块、长度 |
| 分步骤 | 复杂任务拆解为小步骤 |
| 给示例 | Few-shot learning |
| 角色扮演 | 专家视角获取专业回答 |
| 迭代优化 | 根据输出不断改进 Prompt |
Prompt Engineering 是一门实践性很强的技能,多练习、多总结,你就能成为与 AI 沟通的高手。