第二篇 · 与 AI 协作 / 第 5 章

五个核心习惯

五个习惯,每一个都对应一个你正在踩的坑。 第 4 章解释了 AI 为什么会变笨;这一章给你五个具体动作,按一件事从开始到做完的顺序排列。

预计阅读
22 分钟
前置
第 4 章
关键词
说清楚、切片、验证、存档、让 AI 审 AI

读完这一章,你能

  • 用“先不要写代码,一次问一个问题”把模糊需求问成一份清单;
  • 把“加一个登录功能”切成 4 个每一步都能亲手验证的小片;
  • 在换任务时写出一份交接摘要,并在新会话里先复述再动手。

午饭登记 · 当前状态:还没开始做

本章地图
  • 必读:习惯一、二——先让它问清楚,再把任务切小。
  • 必读:习惯三、四——换任务就交接,先定义“完成”再验收。
  • 必读:习惯五——让一个干净的会话专门挑错。
  • 可选如果你用 Claude Code:/compact、/clear、/handoff 三个命令。
先看全貌
#习惯解决的问题
1让它先问你做出来的东西不是你要的
2一次只做一小片一口气写一大堆,最后全是错
3一个会话一件事聊久了它变笨、开始乱改
4定义清楚「完成」它说做完了,你没法验收
5让 AI 审 AI你没法判断代码质量
习惯一

让它先问你,别急着让它做

症状

你说"帮我做一个记账的小工具"。十分钟后它交给你一个东西—— 有分类、有图表、有导出、还能多人共享。做得很漂亮。 但你其实只想要一个能记下"今天花了多少钱"的输入框。

你想说"不是这样的",但又觉得"都做出来了,凑合用吧"。或者更糟:你说"不是这样的", 它又猜了一个方向,还是不对。

为什么会这样

因为你自己也没想清楚。这不怪你——人本来就是看到具体东西才知道自己要什么。 有句话说得很好:在亲眼看到之前,没有人真正知道自己想要什么。

所以问题不在"你没说清楚",而在顺序错了: 你说 → 它做 → 你判断,这条路注定要返工。 正确的顺序是:你先被问 → 你想清楚了 → 它再做。

怎么做:把问题倒过来

不要让 AI 直接干活。开场就要求它反过来问你问题—— 一次问一个,你答完它再问下一个,直到它觉得没有歧义了才动手。

这听着简单,但效果非常夸张。它逼着你在动手之前把脑子里模糊的地方一个个想清楚, 而这些地方,正是你后面会返工的地方。

照着说

我想做一个 XXX。你先不要写任何代码。 请你像面试官一样,一个问题一个问题地问我,直到你完全清楚我要什么。 一次只问一个问题,问完等我回答。

三个必须说出口的限定
  • 「先不要写代码」——不说这句,它会一边问一边偷偷写,你就被带跑了。
  • 「一次只问一个问题」——不说这句,它会一口气甩 15 个问题给你,你根本答不完, 最后随便糊几句过去,等于没问。
  • 「问完等我回答」——不说这句,它会自问自答。

它该问出什么来

如果它问得好,你会听到这类问题——这些问题本身就是价值:

  • "这个东西是给谁用的?只有你自己,还是别人也要用?"
  • "数据要存在哪?关掉再打开,之前记的东西要还在吗?"
  • "如果用户填了一个空的数字,你希望怎么处理?"
  • "你说的『分类』,是固定的几个选项,还是可以自己加?"

每个问题都在替你消掉一个模糊地带。这一轮问完,你脑子里那个东西才第一次真正成形。

顺手记下来

问完这一轮,把答案整理成一小段文字,让 AI 存成一个文件(比如叫 spec.md)。 这样下次开新对话,你把它一贴,就不用从头再问一遍了——这正好配合习惯三。

习惯二

一次只做一小片,做完立刻验证

症状

你说"帮我加一个登录功能"。然后它一口气写了十几个文件:界面、后端接口、数据库表、 密码加密、错误提示、记住登录状态……写完之后你点了一下,崩了。

先把这句话翻译成人话:登录看起来只是两个输入框,背后却要查数据库 (去存用户资料的表里找这个人)、核对密码(而且密码不能原样保存, 要先加密成别人看不懂的样子),还要记住你登录过。任何一环没接好,整个功能都会崩。

然后就是长达数小时的折磨:它改一个地方,另一个地方又崩。你越来越怀疑自己是不是太笨。

为什么会这样

因为 AI 有一个很强的本能:想一次给你一个"完成的方案"。 它脑子里有一个"已经写好的登录功能"的样子,于是一跃把全部写出来, 中间从没验证过任何一个假设。

结果就是:十几个文件里可能有五处假设是错的(你的数据库字段名不一样、你的 项目用的是另一种写法……)。五处错误同时存在, 它们还会互相影响,你根本不知道该从哪查起。

这个毛病有个很形象的说法——开出了车灯照射范围。车灯只能照到前面五十米,它却按一百五十米的速度往前冲。

怎么做:切一小条纵贯线

不要"横向地一层层建",要"纵向地切一小条"。

❌ 一次全写完 ✅ 先切一小条 界面 逻辑 存储 回显 再一段段加宽 四层全写完,才第一次运行 好几处假设一起错,还互相纠缠 这一条细线立刻能跑 错了也一眼看得出是哪儿
左边每一层都写满了,但四层之间从没连起来试过。 右边只做了一条贯穿四层的细线——又窄又完整,这正是它值钱的地方。

"一小片"的标准是:窄到可以一次做完,但完整到能亲手跑一遍看见结果。

还是用登录举例,一个好切法是这样的:

  1. 先做一个假的输入框

    只有两个框和一个按钮。点按钮,屏幕上弹一句"你输入了 xxx"。跑一遍,对了。

  2. 再把"点按钮"接到一个固定的判断上

    写死一个用户名密码,输对了就跳转。跑一遍,对了。

  3. 再把判断接到真实的数据库

    现在真的去查了。跑一遍,对了。

  4. 最后才加加密、错误提示、记住登录

    一次加一个,每加一个跑一遍。

看出区别了吗?每一步都是完整的(能点、有反应), 但每一步都很小(出错范围一目了然)。 而且从第 1 步开始,你就已经能看到东西了——不用等到最后。

照着说

我们来做 XXX。但不要一次做完。 先只做最小的一小片——小到能立刻跑起来看到效果,但要从头贯穿到尾。 做完停下来,告诉我该怎么验证,等我确认了再做下一片。

这个习惯的名字

这叫曳光弹(tracer bullet)。军用术语——子弹里带一点发光剂, 打出去能看见弹道,你就知道有没有打偏。 先打一发看得见的,再决定往哪儿打。

停一下

现在就把“做一个午饭登记”切成三片,每片写一句“我怎么亲手验证它成了”。 如果你切不出三片,或者某一片没法单独验证,说明切得还不够小。

习惯三

一个会话只干一件事,到点就重开

症状

你在同一个对话里,连着干了三件事:先修了个小 bug,然后加了个新功能,接着想让它美化一下界面。 第三件事的时候,它开始不对劲了——改这儿坏那儿,你说过的要求它当没听见。

为什么会这样

回到第 4 章那张图:上下文是张工作台,只会越来越满。 你做的前两件事并没有"结束",它们还堆在桌上。 到第三件事时,它要在两千字的混乱里找你的要求——找不到很正常。

❌ 一个会话里连做三件事 任务一 任务二 任务三 ↑ 从这里开始就在变笨区了 ✅ 一个会话干一件事 任务一 任务二 任务三 会话 1 会话 2(新开) 会话 3(新开) 每件事都拿到一个「刚开局、注意力最集中」的 AI
同样是做三件事。上面的做法,第三件事交给了一个已经累坏的 AI; 下面的做法,三件事都是满状态开工。

怎么做:把「开新对话」当成一个正常动作

判断标准很简单:一件事做完、要开始另一件事了,就开新会话。

而上一件事的结论不会丢——你要做的只是交接:

  1. 让它写一份交接说明

    在旧会话结束前,让它总结:我们做了什么、改过哪些文件、还有什么没做、下一步该干嘛。

  2. 把这份说明存成文件

    比如叫 进度.md。存在项目里,新会话能直接读到。

  3. 开新会话,先让它读这份说明

    新会话是张干净的桌子,然后你把这一份必要的东西放上去。不多不少。

照着说(旧会话里)

我们这一轮先到这里。请写一份交接说明,包含: 我们做了什么、改了哪些文件、哪些地方还没完成、下一步建议做什么。 写成一个文件存下来,方便我在新对话里继续。

照着说(新会话里)

请先读一下 进度.md,然后告诉我你理解的现状。 先不要动手改任何东西,等我确认你理解对了再说。

三种「清桌子」的力度

做法效果什么时候用
压缩 把前面的对话压成一份摘要,保留大意 同一件事还没做完,但聊太久了。可以无缝继续
清空 丢掉全部对话,桌子清空,但东西还在项目里 要换一件事做了。最推荐,也最容易被忽略
重开 新开一个会话,从一份交接文档重新起步 已经乱到没法救,或者它开始反复犯同一个错
一条反直觉但极其有用的建议

感觉不对劲的时候,与其继续解释,不如重开。

解释一遍 = 往满桌子上再放一张纸。而重开 + 贴一份干净的需求 = 换一张新桌子。 后者几乎总是更快,哪怕看起来更麻烦。 大部分新手会本能地选择前者,然后在同一个坑里耗掉一下午。

不管用什么工具,这三种动作都成立

压缩:把前面的对话压成一份摘要,保留大意。 清空:丢掉全部对话,但项目里的文件还在。 重开:新开一个会话,从一份交接文档重新起步。

名字和按钮因工具而异,但你真正要做的判断只有一句: 这件事还没完、只是聊太久了,就压缩;要换事了,就清空或重开。

如果你用 Claude Code:三个命令分别对应哪一种可选

压缩是 /compact,清空是 /clear, 重开那一步可以借助 /handoff——它把你手上还没落地的工作打包成一份能带走的文件。

容易搞反的地方:/handoff 不是“会话总结”。 只有工作要出门时才需要写文件——换工具、换目录、交给同事。 同一个工具里接着干,/compact 就够了。

三者更细的分工见技能档案 · 会话管理。 不用 Claude Code 的读者可以跳过这一框,上面的三种动作照样适用。

习惯四

把「完成」定义清楚,然后亲手跑一遍

症状

AI 说"已经完成,现在登录功能可以正常工作了"。你打开一看,好像是有个登录框。 但你不确定它到底做完了没有——万一点下去报错呢?万一密码根本没验证呢?

为什么会这样

两个原因叠在一起:

  • 它说的"完成"是个模糊概念。它写的代码确实写完了,但不等于你要的功能实现了。
  • "验证"这一步被默认交给了读代码。而你不读代码——于是验证这一环直接消失了。

怎么做:开工前先定标准

在让它动手之前,先让它说清楚"怎么样算做完了"。 这个标准要具体到你能亲手试。

不是标准

"登录功能做好了"

"代码已经更新"

"应该没问题了"

↑ 这些你都无法验证,只能选择相信

是标准

"打开页面能看到用户名和密码两个框"

"输错密码会显示红色提示"

"输对了会跳到首页,且右上角显示我的名字"

↑ 每条你都能亲手试一遍

照着说

动手之前,先告诉我怎么验证它做完了。 请给我一份清单,每条都是我能亲手点一遍就能确认的,比如"点这里应该看到什么"。 然后你再开始做。

做完之后,就照这份清单一条条点一遍。你是用户,用户验收的就是行为。

更进一步:让机器替你反复验收

如果每加一个功能,你都要把之前所有清单重试一遍,那太累了。 你可以让 AI 把这份清单写成自动检查(行话叫"测试")—— 也就是一段能自己运行的代码,跑一遍就把清单全过一遍,告诉你哪条挂了。

这样一来,每改一次代码,你只要敲一个命令,几十秒就知道有没有碰坏东西。 这是从"能用"走向"敢一直改下去"的关键一步。

还要加一步:存档

每次你确认"现在是对的",立刻存个档(第 3 章讲的 Git 提交)。 这样接下来无论 AI 怎么改,你都有一个确定的退路。

照着说

这个版本我验证过了,没问题。请帮我提交一次存档, 备注写清楚这次做了什么。

为什么这一步不能省

没有存档,你就不敢让 AI 大改——因为改坏了回不来。 于是你只敢让它小修小补,项目慢慢僵死。 存档不是什么程序员的形式主义,它是你敢放手让 AI 干活的底气。

习惯五

让 AI 审 AI

症状

你隐约觉得不太对:这个项目里好像存了密码、有些地方一改就崩、 代码文件越来越多你完全不知道哪个是干嘛的。 但你既看不懂代码,也不知道该问谁。

为什么会这样

回到第 1 章那张图:代码质量是你不该亲自判断的事。 但"不该你判断"不等于"没人判断"——否则问题就会一直积压,直到某天爆发。

解决办法很巧妙:换一个 AI 来审。

怎么做:开一个干净的会话专门挑错

会话 A · 干活的 已经聊了很久,桌上很满 交出成果 会话 B · 审查的 干净的 没有参与开发,所以没有偏见 只带一副挑错的眼光 关键:B 没被 A 的思路带走,所以它更敢说「这里不对」
为什么不能直接问正在干活的 AI"你觉得你写得怎么样"? 因为它会倾向于替自己辩护——它自己刚写的东西,它看不出问题。
照着说(在新会话里)

你现在是代码审查员,不是开发人员。 请仔细看一下 XXX 这部分代码,从这几个角度挑问题:

  • 有没有安全问题(比如密码、密钥被写死在代码里)
  • 有没有明显的 bug 或没处理的边界情况
  • 有没有哪部分写得特别乱、以后很难改

请直接指出问题,不要先肯定我。 如果确实没什么问题,再告诉我为什么。

三个让审查真正有效的小技巧
  1. 换个新会话。用刚干完活的那个会话去审查,等于让当事人自己当法官。
  2. 明确禁止它先夸你。AI 天生爱说"做得很好!不过……"。 说一句"直接说问题",能挤出不少真话。
  3. 按角度分批审。一次只问"安全",下一次只问"有没有 bug"。 一起问,它会每个角度都浅浅说两句糊弄过去。

审查出来的问题,不要就地修——把它当成新的小任务, 回到习惯二,一片一片来。

三句话带走

  1. 先让它问你,再让它动手;顺序对了,返工就少了一半。
  2. 一次只做一小片,每片都要能亲手跑一遍;换任务就先交接,再开新会话。
  3. “完成”必须是你验证得了的行为;代码质量交给另一个干净的会话去审。

五段完整话术、危险信号清单和开工前自查,都收在 第 10 章 · 工具箱,这里只留一张骨架表。

习惯一句话
1. 让它先问你 动手前把模糊的地方问清楚
2. 一次只做一小片 窄到能一次做完,完整到能跑起来看到
3. 一个会话一件事 换任务就重开,先写交接文档
4. 定义清楚「完成」 先拿到一份你能亲手验证的清单
5. 让 AI 审 AI 开个干净的会话,专门挑错
这五个习惯其实是一个习惯

它们全都在做同一件事:把大而模糊的东西,切成小而确定的东西。

需求大而模糊 → 用提问切小;任务大而模糊 → 用曳光弹切小; 对话长而模糊 → 用重开切小;验收标准模糊 → 用清单切小; 质量判断模糊 → 交给一个专门的审查者。

自测:三个问题

你说“帮我做一个记账工具”,AI 立刻开始写代码。你漏了哪一句?

漏了“先不要写任何代码”,以及“一次只问一个问题、问完等我回答”。 没有这三句,它会一边问一边猜,最后还是按它自己的想象做。

“加一个登录功能”该怎么切成第一片?

先只做两个输入框和一个按钮,点按钮显示“你输入了 xxx”。 这一片窄到一次做完,又完整到你能亲手点一遍;验证通过后再接判断、数据库和加密。

它说“已经完成,可以正常登录了”。你下一步做什么?

先要一份你能亲手点的验收清单,再照着一条条试:输错有没有提示、输对能不能进、刷新后还在不在。 不要用“它说完成了”代替你自己的验证。

动手 10 分钟

挑一件你最近想让 AI 做的小事,按顺序写三句话:

  1. “先不要写代码,像面试官一样一次问我一个问题。”
  2. “做完第一小片就停下,告诉我怎么亲手验证。”
  3. “验证通过后,帮我提交一次存档,再写一份交接摘要。”

把这三句真的发出去,观察它有没有照做。没照做的地方,就是你下次要补的限定。

如果你看到 X,大概率是 Y

  • 它一口气问了你 15 个问题 → 你漏了“一次只问一个”。补上这句,重来。
  • 它改一处、坏三处 → 这一片切得太大了。退回存档,切小重做。
  • 同一句话你说了三遍它还在犯 → 桌子满了,不是你没说清。写交接、开新会话。
  • 它说“应该没问题了” → 它自己也没验证过。要一份你能亲手点的清单。