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