3.5.3 有效反馈的艺术
经过本节学习,你将掌握
- 区分有效反馈和无效反馈
- 使用 SBI 框架(情境-行为-影响)组织反馈
- 根据问题类型选择合适的反馈粒度
- 获得一个可直接使用的反馈句式库
反馈决定迭代质量
迭代对话的核心是「反馈-修正」循环。你给的反馈质量,直接决定 AI 的修正质量。
同样是对一段代码不满意:
❌ 无效反馈:"这不对,重新做"
✅ 有效反馈:"handleSubmit 函数缺少错误处理,当 API 请求失败时会导致白屏"第一种反馈,AI 只能猜你不满意什么。第二种反馈,AI 能精准定位问题并修复。
无效反馈 vs 有效反馈对比
| 无效反馈 | 问题 | 有效反馈 |
|---|---|---|
| "这不对" | 不知道哪里不对 | "第 15 行的条件判断逻辑有误,应该用 && 而不是 ` |
| "太复杂了" | 不知道怎么简化 | "请移除 X 和 Y 功能,只保留核心的 Z 功能" |
| "不够好" | 不知道好的标准 | "请把函数拆分成更小的单元,每个函数不超过 20 行" |
| "样式不对" | 不知道期望什么样式 | "按钮颜色改成 #3B82F6,圆角改成 8px" |
| "有 bug" | 不知道 bug 是什么 | "当输入超过 100 个字符时,页面会卡死" |
规律:有效反馈 = 具体位置 + 具体问题 + (可选)期望结果
SBI 反馈框架
SBI 是一个来自管理学的反馈框架,用于给 AI 反馈同样有效。
框架结构
S - Situation(情境):问题出现在哪里
B - Behavior(行为):具体是什么问题
I - Impact(影响):这个问题会导致什么后果示例对比
场景:AI 生成的表单没有验证逻辑
❌ 无 SBI:
"表单验证有问题"
✅ 使用 SBI:
"在 handleSubmit 函数中(S),
没有检查邮箱格式是否正确(B),
这会导致用户输入无效邮箱也能提交成功(I)。
请添加邮箱格式验证。"场景:AI 生成的代码性能差
❌ 无 SBI:
"代码太慢了"
✅ 使用 SBI:
"在 renderList 函数中(S),
每次渲染都会重新创建整个数组(B),
这会导致列表有 100 项时页面明显卡顿(I)。
请使用 useMemo 优化。"简化版 SBI
对于简单问题,可以省略 Impact:
"在 handleAdd 函数中(S),缺少空输入检查(B)。请添加验证。"反馈粒度金字塔
不同类型的问题,需要不同粒度的反馈。
▲
╱ ╲
╱ ╲ 方向级反馈
╱ 方向 ╲ "整体思路需要调整"
╱───────╲
╱ 功能 ╲ 功能级反馈
╱───────────╲ "这个功能缺少 XX"
╱ 代码 ╲ 代码级反馈
╱───────────────╲ "第 15 行应该改成 XX"方向级反馈
使用场景:AI 的整体思路偏离了你的预期
特点:
- 不纠结细节
- 重新描述期望的大方向
- 可能需要推翻重来
示例:
我需要的不是一个新页面,而是一个弹窗组件。
请重新实现:用户点击按钮后,弹出一个模态框让用户输入任务。功能级反馈
使用场景:方向对,但具体功能有缺失或错误
特点:
- 针对具体功能点
- 保留已有正确的部分
- 增量修改
示例:
整体功能可以,请补充以下内容:
1. 添加取消按钮,点击后关闭弹窗
2. 点击弹窗外部区域也能关闭
3. 按 ESC 键也能关闭代码级反馈
使用场景:功能正确,但代码细节需要调整
特点:
- 精确到行号或函数名
- 给出明确的修改指令
- 最小范围改动
示例:
请修改以下细节:
1. 第 23 行:把 `var` 改成 `const`
2. handleClose 函数:添加 event.stopPropagation() 防止事件冒泡
3. Modal 组件:添加 aria-label="任务输入弹窗" 提升可访问性选择合适的粒度
| 问题类型 | 使用粒度 | 判断标准 |
|---|---|---|
| AI 理解错了需求 | 方向级 | 需要推翻重做 |
| 功能缺失/逻辑错误 | 功能级 | 保留大部分,增量修改 |
| 代码风格/细节问题 | 代码级 | 只需微调 |
常见场景的反馈句式库
功能缺失
markdown
请补充以下功能:
1. [功能描述]
2. [功能描述]markdown
这个实现缺少 [功能名称]。
具体需求:[详细描述]逻辑错误
markdown
[函数名/位置] 的逻辑有误:
- 当前行为:[描述当前错误行为]
- 期望行为:[描述正确行为]
- 请修正。markdown
在 [场景] 下,[具体问题]。
正确的逻辑应该是:[描述正确逻辑]代码结构优化
markdown
请优化以下代码结构:
1. 把 [逻辑描述] 抽成独立函数
2. 把 [内容] 移到 [位置]
3. [其他结构调整]markdown
这个函数太长了(当前 [X] 行),请拆分成:
- [函数1]:负责 [职责]
- [函数2]:负责 [职责]样式调整
markdown
请修改以下样式:
- [元素]:[属性] 改成 [值]
- [元素]:[属性] 改成 [值]markdown
[组件] 的样式需要调整:
1. [具体样式问题]
2. [具体样式问题]
参考设计:[描述或图片链接]边界情况
markdown
请处理以下边界情况:
1. 当 [条件] 时,应该 [行为]
2. 当 [条件] 时,应该 [行为]markdown
当前实现没有考虑 [边界情况]。
当 [具体场景] 发生时,会 [问题描述]。
请添加相应的处理逻辑。实战示例:修正一段有问题的代码
AI 第一轮输出的代码:
tsx
function TaskList({ tasks }) {
return (
<ul>
{tasks.map(task => (
<li onClick={() => deleteTask(task.id)}>
{task.title}
</li>
))}
</ul>
);
}问题分析:
- 缺少 TypeScript 类型
- map 中缺少 key
- deleteTask 未定义
- 点击整个 li 就删除,交互不合理
有效反馈:
markdown
请修正以下问题:
1. 类型定义:
- 添加 Task 接口定义(id: string, title: string)
- 给 tasks 参数添加类型
2. React 警告:
- map 中的 li 需要添加 key={task.id}
3. 功能问题:
- deleteTask 函数未定义,请通过 props 传入
- 不要让整个 li 可点击删除,改成:在每个任务后面添加一个删除按钮
4. 交互安全:
- 删除前添加确认提示反馈的注意事项
一次不要反馈太多
❌ 一次提出 10 个修改点
✅ 一次提出 3-5 个相关的修改点如果问题很多,优先反馈最重要的,分批进行。
反馈要具体,但不要过度指定
❌ 过度指定:"在第 15 行和第 16 行之间插入 const x = 1;"
✅ 适度具体:"在 handleSubmit 中添加空值检查"告诉 AI「做什么」,而不是「怎么写每一行代码」。
说明「为什么」有时很有帮助
请把 validateInput 函数抽出去。
原因:这个验证逻辑在其他表单中也会用到,抽成独立函数便于复用。AI 理解你的意图后,可能会给出更好的实现。
可复制模板:通用反馈模板
markdown
请修改以下内容:
**问题1**:[位置/上下文]
- 当前情况:[描述问题]
- 期望结果:[描述期望]
**问题2**:[位置/上下文]
- 当前情况:[描述问题]
- 期望结果:[描述期望]
**问题3**:[位置/上下文]
- 当前情况:[描述问题]
- 期望结果:[描述期望]本节要点
✓ 有效反馈三要素:具体位置 + 具体问题 + 期望结果
✓ SBI 框架:情境(哪里)→ 行为(什么问题)→ 影响(导致什么)
✓ 粒度金字塔:方向级 → 功能级 → 代码级,根据问题类型选择
✓ 句式库:积累常用的反馈句式,提高沟通效率
✓ 节制原则:一次 3-5 个修改点,说「做什么」而非「怎么写」
下一节,我们来学习如何管理长对话的上下文,避免 AI「失忆」。
