AI 读得懂代码,读不懂现场
· 中文 · English
今天整理博客的时候,顺手把自己这半年和 AI Agent 一起干活的记录翻了出来:3 月到 8 月用的是 Codex,257 个会话;9 月到现在用的是 Claude Code,156 个会话。加起来 400 多次。
翻之前,我对自己怎么用 AI 是有一套印象的。翻完发现,有的对,有的不对。
一个跑了 7 年的服务
这半年我主要在做一件事:把公司一个从 2019 年跑到现在的 Python 服务,用 Go 重写。它管着几个港口里自动驾驶车辆和云端之间的数据往来。
旧服务 6 万多行代码,团队前前后后提交了 6800 多次。Go 版本从今年 5 月 11 日开始写,到今天 5 个半月,1500 多次提交里有 1135 次是我的,业务代码 12 万行。
这里面大概 95% 是 AI 写的。
有个数字我自己也没想到:旧服务的测试代码只有业务代码的十分之一,新版本里测试有 9 万多行,是业务代码的四分之三。以前补测试是苦差事,能拖就拖;现在测试基本是 AI 顺手写的。
它最帮忙的地方,不是写代码
重构这种事,主干的数据链路我心里是清楚的。难的是细节:某个字段在某种情况下要特殊处理,某段逻辑只在特定条件下才会走到。这些东西散落在旧代码的各个角落,人去梳理,总会漏掉一些。
让 AI 去梳理,非常快,而且不容易出错。
所以如果问我 AI 在这次重构里最大的价值是什么,我的答案不是”写代码快”,而是”读得懂系统”。
但它不知道现场
这个服务要同时支持三个港口,每个港口的作业流程都不一样。
有一次,AI 把 A 港口的逻辑写进了 B 港口。代码本身看着没问题,问题是这段逻辑根本不该出现在这个港口。
这种错其实很好发现,它刚写完我一看就知道不对。但前提是你得知道这两个港口在现场到底是怎么作业的。
AI 读代码可能是对的,但它不知道数据在现场是怎么流转的,不知道业务逻辑和作业场景是什么。这些东西不在代码里,在做这个业务的人脑子里。你不讲清楚,它就只能猜。
还有更隐蔽的。有一个港口的生产机上,跑着的 Python 代码和仓库里的不一样:有没推上去的提交,甚至把仓库里刚合并的功能在现场就地回滚了。Go 版本照着仓库对齐,结果比现场多发了一步。
这件事之后,我给 AI 定的规矩里多了一条:对照旧代码之前,先去生产机上把真正在跑的版本采一份下来,别拿仓库当现场的真相。
把代码之外的东西写下来
既然 AI 不知道现场,那就得有人告诉它。我的办法是写下来。
项目根目录有一份给 Agent 看的说明,167 行,每次会话开始它都会先读。里面写的大多不是代码规范,而是代码之外的事:这个仓库其实是两个系统合在一起的,改其中一个的时候,另一个的模块一律不碰;哪些协议是线上在用的,一个字节都不能动,连旧代码里的拼写错误都要原样保留。
还有一份设计决策记录,从重构第一天开始写,到现在 428 条。每做一个有分量的改动,先写清楚问题、决策、实现和注意事项,再写代码。这些记录既是写给以后的自己,也是写给 AI 的。
说明里有一句话,是我自己写的,到现在也觉得最重要:
AI 能加速 1:1 翻译,加速不了”判断这次翻译对不对”。
所以我们把”完工”分成了两级。代码和单测都齐了,只算行为冻结;必须拿真实的线上数据回放一遍,新旧两边的输出逐字节对比,核心模块再由人看一遍差异,才算真正验证过。测试全绿,不等于可以上线。
数据里的两个意外
第一个意外:我一直以为 AI 主要是在帮我写代码。
但 Claude Code 这两个月一共执行了 1.5 万多次操作,其中 88% 是在终端里跑命令:搜代码、查日志、跑脚本、看 git 记录、连服务器。专门用来改文件的操作只有几百次。
和 Codex 那几个月对比一下:
| 终端命令的用途 | Codex(3–8 月) | Claude Code(9–10 月) |
|---|---|---|
| 看文件、改文件 | 44% | 13% |
| 跑脚本 | 2% | 11% |
| 连服务器 | 0.1% | 3.8% |
用 Codex 的时候,它基本是在代码里打转;换成 Claude Code 之后,它越来越多地走出代码,去碰真实的环境。这跟上面说的是同一件事:要把事做对,光读代码不够。
(这只是我从数字里看出来的关联。这几个月我手上的活也在变,不全是工具的差别。)
第二个意外:我对 Codex 的一个印象被推翻了。
我一直觉得 Codex 啰嗦,一个在原文件里加几行就能搞定的需求,它会单独搞一个新文件出来。结果一统计,它改代码时新建文件只占 10%,绝大部分还是在改已有的文件。
可能是那几次让我印象太深了,也可能啰嗦是真的,只是不体现在新建文件上。总之,感觉和数据不完全是一回事。
从”说准确”到”说清楚”
一开始公司只给了 Codex。说实话用起来挺痛苦的,有种降智的感觉:同样的话,它常常理解不了我到底要干什么。
9 月有了 Claude Code,用得一下子多了起来。用 Codex 的时候平均一周十来个会话,换过来之后,多的时候一周三四十个。
但我觉得更大的变化不在于换了哪个工具,而在于模型本身。两个月前,你得把 prompt 写得很准确,它才知道你要干什么;现在说得没那么准确,它也能把事做对。
写 prompt 的门槛在降低,但有一样东西它还是猜不到:代码之外的那些事,业务是什么,现场是什么样。
以前我觉得工程师的价值在于会写代码。现在 95% 的代码是 AI 写的,我反而觉得,值钱的是知道代码之外的东西,并且能把它讲清楚。