Mingyu's Library主页
2026年8月6日

第 8 课:Claude 改着改着跑偏了怎么办?——防漂移三件套(补课)

日期:2026-08-06(补发)· 主题:防漂移——计划文件、检查点回滚、重开会话的时机 对应大纲模块 A 第 8 课。上下文预算与 /clear、/compact 的系统讲法见第 14 课(2026-08-12),本课只讲「跑偏了怎么救」。

场景

你让 Claude Code 给游戏加一个每日签到功能。前 20 分钟一切正常;第 40 分钟你发现它开始「顺手」重构你的存档系统;第 60 分钟签到功能还没通,存档反而坏了。你骂了一句「回到最开始的方案」,它道歉之后——用第三种方式又重写了一遍。这就是漂移(drift):长会话里目标被中间产物稀释,越改越远。防漂移不靠提醒它「别忘了需求」,靠的是外置的锚点和可回退的检查点。

技巧 1:把计划写成文件,让每一轮都对着文件干活

解决的问题:目标只存在于对话历史里,一被压缩/稀释就丢。

开工前先用 Plan Mode(Shift+Tab 切换)生成计划,但不要让计划停留在对话里,让它落盘:

> 进入计划模式,把实现方案写到 docs/plan-签到功能.md,
> 分成带编号的步骤,每步有「完成标准」。之后每完成一步,
> 在文件里把该步标记为 [x] 再继续。

之后每轮开场白就一句:「继续执行 docs/plan-签到功能.md 的下一步」。对话怎么绕,文件不动,锚就在。 参考:https://code.claude.com/docs/en/common-workflows 、https://www.anthropic.com/engineering/claude-code-best-practices

技巧 2:每个可运行节点就地 commit,给自己造检查点

解决的问题:发现跑偏时,只能「口头回滚」,而口头回滚 = 换个姿势重写。

在 CLAUDE.md 里写死节奏规则:

# 提交纪律
- 每完成计划中的一个编号步骤且测试通过,立即 git commit
- commit message 格式:step-N: 一句话描述
- 不允许把两个步骤混在一个 commit 里

跑偏时的救法从「你给我改回去」变成一条确定性命令:

> git log --oneline 找到最后一个正常的 step commit,
> git checkout -- . 恢复工作区后,从 plan 文件的第 4 步重新开始

代码回滚交给 git(确定性),只让模型负责「接着做」(生成性)。 参考:https://www.anthropic.com/engineering/claude-code-best-practices

技巧 3:会话内回滚——用 /rewind 把对话也退回检查点

解决的问题:代码回滚了,但对话里还残留着一大段错误方向的上下文,模型继续被带偏。

git 只能回滚代码,回不了「模型脑子里的歪路」。Claude Code 的 rewind(Esc Esc 双击,或 /rewind)可以把对话和代码一起退回到之前的检查点:

Esc Esc   → 选择要回退到的那一轮
          → 选「恢复对话和代码」

适用判断:错误方向只持续了几轮 → rewind;错误方向已经污染大半个会话 → 下一条。 参考:https://code.claude.com/docs/en/checkpointing

技巧 4:判断「救会话」还是「弃会话」——重开 + 计划文件冷启动

解决的问题:在被污染的会话里反复纠正,每轮纠正本身又在消耗上下文,越救越糟。

经验阈值:同一个错误方向纠正 2 次还没回正,就别救了。因为此时上下文里「错误方案的代码和讨论」比「正确方案」多得多,模型每轮都在被多数派带跑。正确姿势:

/clear
> 读 docs/plan-签到功能.md 和 git log 里的 step commit,
> 我们现在处于第 4 步,前 3 步已完成。从第 4 步继续。

因为有技巧 1 的计划文件 + 技巧 2 的检查点,冷启动成本只有两次文件读取——这就是防漂移三件套互相咬合的地方:文件锚定目标,git 锚定代码,新会话丢弃坏上下文。 参考:https://code.claude.com/docs/en/common-workflows

今日实操(约 15 分钟)

在自己项目里挑一个 2-3 步能完成的小需求:① 用 Plan Mode 生成计划并落盘为 plan 文件;② 在 CLAUDE.md 加入提交纪律;③ 故意在中途说一句含糊的修改意见诱导它偏题,然后分别练一次 /rewind 回退和 /clear+计划文件冷启动。 验收标准:冷启动后的第一轮回复能准确说出「当前在第几步、前几步已完成」,不需要你重述需求。