---
title: "3.6.3 修正策略：怎么让 AI 改对"
---


![03-technique_3.6-debugging-ai_3.6.3-correction-strategies.png](/images/Basic/03-technique_3.6-debugging-ai_3.6.3-correction-strategies.png)
# 3.6.3 修正策略：怎么让 AI 改对

## 经过本节学习，你将掌握

- 四种修正策略及其适用场景
- 「错误驱动开发」的工作流程
- 识别「死亡螺旋」的信号并及时止损
- 获得一套可直接使用的修正 Prompt 模板

## 四种修正策略

在 3.5.3 中，我们学了如何给 AI 有效的反馈。本节聚焦于**问题已经发生后**的修正策略——当 AI 给的代码有问题时，如何引导它改对。

| 策略 | 适用场景 | 核心思路 |
|-----|---------|---------|
| 精确指出问题 | 你知道具体哪里错了 | 给出位置 + 问题 + 期望 |
| 给出正确示例 | 格式或结构不对 | 展示正确的「样子」 |
| 分步重做 | 任务太复杂导致出错 | 拆解后逐个完成 |
| 换种问法 | 同一问法反复失败 | 改变描述角度或方式 |

### 策略一：精确指出问题

**适用场景**：你能定位到具体是哪行代码、哪个函数有问题。

**Prompt 模板**：

```markdown
你在 [位置] 的代码有问题：

**问题**：[描述具体问题]

**当前行为**：[代码现在做了什么]

**期望行为**：[代码应该做什么]

请修正这个问题，其他部分保持不变。
```

**示例**：

```markdown
你在 handleSubmit 函数第 15 行的代码有问题：

**问题**：使用了 localStorage，但这是服务端渲染项目

**当前行为**：直接调用 localStorage.setItem()，在服务端会报错

**期望行为**：先检查是否在浏览器环境，或者使用 cookies

请修正这个问题，其他部分保持不变。
```

### 策略二：给出正确示例

**适用场景**：AI 理解了任务，但输出的格式、结构不符合你的要求。

**Prompt 模板**：

```markdown
输出格式不对。

**当前格式**：
[展示 AI 给的格式]

**期望格式**：
[展示你想要的格式]

请按期望格式重新输出。
```

**示例**：

```markdown
函数返回格式不对。

**当前格式**：
直接返回数据，如 `return userData`

**期望格式**：
统一返回格式 `{ success: boolean, data: any, error?: string }`
成功时：`{ success: true, data: userData }`
失败时：`{ success: false, data: null, error: "错误信息" }`

请按期望格式修改所有 API 函数的返回值。
```

### 策略三：分步重做

**适用场景**：任务太复杂，AI 一次性输出的代码问题较多，修补不如重来。

**Prompt 模板**：

```markdown
这个功能我们分步骤来做。

**第一步（当前）**：[最小核心功能]
只需要实现这一个功能，其他的后面再加。

完成后我会确认，然后我们再做第二步。
```

**示例**：

```markdown
用户认证功能我们分步骤来做。

**第一步（当前）**：只实现用户注册
- 邮箱 + 密码表单
- 基本的格式验证
- 存储到数据库

不需要：登录、找回密码、邮箱验证、JWT

完成后我会确认，然后我们再做登录功能。
```

### 策略四：换种问法

**适用场景**：同一个问题，用同样的方式问了两三次，AI 还是给出类似的错误答案。

**可以尝试的角度转换**：

| 原问法 | 换种问法 |
|-------|---------|
| 直接要结果 | 先问原理，再让 AI 基于原理实现 |
| 用技术术语 | 用生活化语言描述需求 |
| 描述「要什么」 | 描述「解决什么问题」 |
| 从功能角度问 | 从用户角度描述场景 |

**示例**：

```markdown
原问法（反复失败）：
"写一个防抖函数"

换种问法：
"用户在搜索框输入时，我不想每敲一个字就触发搜索请求，
而是希望用户停止输入 300 毫秒后再发起请求。
请帮我实现这个延迟触发的逻辑。"
```

## 错误驱动开发：把 AI 变成调试助手

当你遇到错误时，不必自己分析——可以直接把错误信息扔给 AI，让它帮你定位和修复。

### 工作流程

```
发现错误 → 复制完整错误信息 → 给 AI 分析 → 应用修复 → 验证 → 如有新错误则重复
```

### 操作模板

```markdown
运行代码时遇到以下错误：

```
[粘贴完整的错误信息]
```

相关代码：
```[语言]
[粘贴相关代码片段]
```

请分析错误原因，并给出修复方案。
```

### 示例

```markdown
运行代码时遇到以下错误：

```
TypeError: Cannot read properties of undefined (reading 'map')
    at UserList (UserList.jsx:12:23)
```

相关代码：
```jsx
function UserList({ users }) {
  return (
    <ul>
      {users.map(user => <li key={user.id}>{user.name}</li>)}
    </ul>
  );
}
```

请分析错误原因，并给出修复方案。
```

**AI 通常会告诉你**：
- 错误原因：`users` 可能是 `undefined`
- 修复方案：添加空值检查或默认值

## 警惕「死亡螺旋」

「死亡螺旋」是指：你让 AI 修问题，它修了一个又引入两个新问题；你再让它修，问题越来越多，代码越来越乱。

### 识别信号

- 🚨 修改轮次超过 3 次，问题还没解决
- 🚨 AI 的代码量越改越多、越改越复杂
- 🚨 修了 A 问题，B 功能又坏了
- 🚨 AI 开始「绕圈」，给出的方案和之前类似

### 止损策略

一旦识别到死亡螺旋，果断止损：

**选项 1：回退重来**
```markdown
这个方向走不通。请忘掉之前的修改，我们从头开始。

[重新清晰地描述需求，可能需要拆分成更小的任务]
```

**选项 2：保留能用的，手动修复剩余部分**
```markdown
请把目前能正常工作的代码整理一下给我，
有问题的部分用注释标注出来，我自己来修。
```

**选项 3：换一个 AI 工具试试**

不同的 AI 模型在不同任务上表现不同。如果一个工具反复卡住，换一个试试可能会有惊喜。

## 修正 Prompt 模板库

### 修复运行时错误

```markdown
这段代码报错了：

错误信息：
```
[错误信息]
```

代码：
```[语言]
[代码]
```

请修复这个错误。如果需要更多上下文，请告诉我需要什么信息。
```

### 修复逻辑错误

```markdown
这段代码可以运行，但结果不对：

**输入**：[描述输入]
**期望输出**：[描述期望结果]
**实际输出**：[描述实际结果]

代码：
```[语言]
[代码]
```

请找出逻辑问题并修复。
```

### 修复样式问题

```markdown
样式和预期不符：

**期望效果**：[描述或截图链接]
**实际效果**：[描述当前问题]

当前代码：
```css
[样式代码]
```

请修改样式使其符合期望效果。
```

### 要求 AI 自查

```markdown
请检查上面的代码：

1. 有哪些潜在的边界情况没有处理？
2. 有哪些可能导致运行时错误的地方？
3. 有哪些可以优化的地方？

列出问题后，请给出修复后的完整代码。
```

## 本节要点

✓ **四种修正策略**：精确指出 → 给出示例 → 分步重做 → 换种问法

✓ **错误驱动开发**：把错误信息直接扔给 AI，让它帮你定位和修复

✓ **警惕死亡螺旋**：修改超过 3 轮还没解决，果断止损重来

✓ **模板库**：积累常用的修正 Prompt，提高修复效率

但有时候，问题不在于怎么修正，而是 AI 真的做不到。下一节我们来看兜底策略——当 AI 真的搞不定时该怎么办。
