Skip to content

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 真的搞不定时该怎么办。