diff 审阅与写入前确认 — AI 改代码你先看一眼
为什么 diff 审阅这么重要
常规 AI Agent 改文件的流程是:AI 直接写入 → 你事后才看到改了什么。对于小型脚本或临时文件这可能能接受,但对于有版本管理的代码库:
- AI 可能改了不该改的文件(比如改错了 parser.ts 而不是 formatter.ts)
- AI 可能改多了(比如顺便把不相关的 import 也改了)
- 改了之后你得自己在 git diff 里慢慢翻,找出哪些是 AI 动的手
SophCode Desktop 把这个流程反过来:AI 先生成 diff → 你审阅 → 你确认后才写入。
diff 是什么
diff(difference 的缩写)是一种描述文件变更的标准格式,和 git diff 输出的格式完全一样。一段典型的 diff 长这样:
--- a/src/utils/parser.ts
+++ b/src/utils/parser.ts
@@ -42,7 +42,10 @@ parseInput(input: string): Result {
const result = parse(input);
+ if (!result) {
+ return null;
+ }
return result;
}
逐行解释:
--- a/src/utils/parser.ts— 修改前的文件路径+++ b/src/utils/parser.ts— 修改后的文件路径@@ -42,7 +42,10 @@— 在文件的第 42 行开始,删除 7 行,新增 10 行- 以
+开头的行 — 新增的内容 - 以
-开头的行 — 删除的内容 - 没有前缀的行 — 保持不变的上下文
审阅界面的三个按钮
每次 AI 生成 diff 后,SophCode Desktop 会弹出审阅界面,三个操作选项:
接受(Accept)
AI 把 diff 应用到目标文件,修改正式生效。接受后 AI 会在 diff 下方记录"2026-10-15 14:32 用户接受了 parser.ts 的修改",方便后续追溯。
拒绝(Reject)
AI 放弃这处 diff,不改这个文件。如果你在对话里说过"这样改不对",AI 会换一种方案重新生成 diff。如果只是不想改这个文件,直接拒绝即可。
修改后接受(Edit & Accept)
这是最灵活的选项——你直接在 diff 里编辑新增/删除的内容,然后让 AI 按你修改后的版本写入。比如 AI 生成的空值检查条件写得不够好,你可以把它改成更完善的版本后再接受。
一个实际例子
假设你让 AI "在 parser.ts 的 parseInput 函数里加一个空值检查":
AI 生成的 diff:
const result = parse(input);
+ if (!result) {
+ return null;
+ }
return result;
你审阅后可能的操作:
- 空值检查位置对吗?对的,在 parse 之后
- 只检查 null 够不够?你觉得还应该检查 undefined 和空字符串
- 选择 修改后接受,改成:
const result = parse(input);
+ if (!result || result.value === undefined || result.value === '') {
+ return null;
+ }
return result;
- 确认写入
diff 审阅的价值
diff 审阅机制的核心价值是把"事后补救"变成"事前把关":
- AI 不会悄悄改错文件 — 每一处变更你都看得见
- 你不用自己翻 git diff — AI 生成的 diff 聚焦在它做的事上,不是整个项目的全量 diff
- 确认成本极低 — 扫一眼 diff 通常 10 秒够了,比事后发现 bug 再回头排查成本低得多
- AI 可以根据反馈优化 — 你拒绝或修改 diff 后,AI 会理解你的意图,后续生成的 diff 更精准
什么时候可以跳过审阅
diff 审阅很有价值,但有成本。以下场景下你可以考虑直接让 AI 执行(不需要 diff 确认):
- AI 在一个专门的"实验目录"里操作(改坏了无所谓)
- AI 做的事是你非常确定不会出错的(比如"把 temp.txt 重命名为 temp_old.txt")
- 你自己已经在本地做了备份,不怕 AI 改错
SophCode Desktop 支持在配置里设置哪些操作自动跳过审阅(比如在实验目录里的写入),哪些操作必须走 diff 流程。
与 Git 配合
diff 审阅和 Git 是天然互补的:
- AI 生成的 diff → 你手动审阅确认 → 接受修改 → Git commit
- 全程保持 Git 版本管理不中断
- 每一处 AI 修改都对应一次 Git commit,可以通过 commit message 追溯(建议 message 里写上"AI 修改:加空值检查 — diff 已审阅")
整个工作流:让 AI 干活 → diff 确认 → Git commit,既高效又安全。