Skip to content

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>
  );
}

问题分析

  1. 缺少 TypeScript 类型
  2. map 中缺少 key
  3. deleteTask 未定义
  4. 点击整个 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「失忆」。