Prompt Engineering 实践指南:让 AI 更懂你

foxgem

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]
[代码]

请从以下方面评审:

  1. 代码质量和可读性
  2. 潜在的 Bug 和边界情况
  3. 性能问题
  4. 安全隐患
  5. 改进建议(附代码示例)“

### 技术方案设计

```markdown
"设计[功能名称]的技术方案:

背景:[背景描述]
需求:[具体需求]
约束:[技术约束、时间约束等]

请输出:
1. 整体架构设计
2. 核心流程图
3. 数据库设计
4. API 设计
5. 技术选型及理由
6. 潜在风险和应对方案"

错误排查

"帮我排查以下错误:

错误信息:

[错误日志]


相关代码:
```[language]
[代码片段]

环境信息:

  • 操作系统:[OS]
  • 运行时版本:[版本]
  • 相关依赖:[依赖]

请分析:

  1. 错误原因
  2. 解决方案
  3. 如何避免类似问题”

### 文档生成

```markdown
"为以下代码生成文档:

```[language]
[代码]

要求:

  1. 函数/类的用途说明
  2. 参数说明(类型、含义、默认值)
  3. 返回值说明
  4. 使用示例
  5. 注意事项

输出格式:[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 沟通的高手。