AI 代码生成后的失控感,我是如何解决的?
上个月,我用 Cursor 进行了一次大规模代码重构。仅三天时间,AI 替我生成了两万行代码,覆盖了 40 多个文件。然而第四天,一个 Bug 让我瞬间紧张起来。问题不在于代码写不好,而在于 AI 写得太快——当代码量增长速度超过了你的理解速度时,那种失控感会让人极度不安。要追踪一个 Bug,链路跨越了 7 个文件,其中 5 个是 AI 写的,而你压根没仔细看过它们。这种感觉,就像你不知道自己的车是怎么开到了目的地。
我真正想要的是什么?
关键在于:我并非要逐行审查 AI 写的每一行代码——那样做还不如自己写。我真正想要的,是一眼就能看清项目在做什么,而不是盯着什么调用图或 import 关系。调用图是给编译器看的,import 关系是给打包工具看的,而我想看到的,是能跟同事口头描述功能时那种“人话”:简洁、清晰,一开口就能让彼此理解。
举个例子,你并不是要分析代码里的每个钩子,而是想知道“用户登录时,系统究竟干了什么”。这需要的是一种语义级别的地图,而不是代码级别的树状结构。
一次实践尝试
经过几天的思考,我创造了一个名为 CodeSee 的工具。核心想法很简单:让 AI 在写代码的同时,也生成一份“功能地图”。这不是代码级别的描述——它是语义级别的。好比做菜:你不需要知道每克盐如何投放,而是需要理解这道菜的整体流程。
功能地图长什么样?
它采用三层视图,从粗到细:
- 概览——展示整个项目有哪些大模块,以及它们之间的关联关系。
- 功能——每个模块中具体包含哪些功能。
- 流程——一个功能内部的步骤链条,包含异步、条件分支和错误处理。
这种设计让你能按需深入,而不是一开始就被海量细节淹没。
它是如何工作的?
简单来说就两件事:
- AI 生成一份 JSON 文件(features.json),描述项目的功能结构。
- 前端画布读取这份 JSON,将其渲染为可交互的流程图。
AI 怎么知道该写什么?我编写了一套 prompt,告诉它:你刚写完代码,现在请把这个功能用“动作短语”描述出来,写入 features.json。关键点在于,这份 JSON 是纯文本形式,支持 git diff,支持人工修改,也支持锁定不让 AI 覆盖。它不是黑盒,透明且可控。
最佳使用方式
经验表明,从项目第一天就集成效果最好。为什么?因为 AI 刚写完代码时,它完全清楚每一步做了什么。如果让它“回忆”一个已有项目的逻辑,准确率会大幅下降。
工作流是这样的:你说“实现用户登录”→ AI 写代码 → AI 顺手更新 features.json → 你打开画布看一眼“哦,原来是这么串起来的”→ 发现设计问题 → 告诉 AI 修改 → 进入下一个功能。画布变成了一幅活着的架构图,始终与代码保持同步。
为什么不用现有工具?
我调研过不少方案:
- Mermaid / PlantUML——需要手动维护,AI 改了代码你还得手动改图,几天就过时了。
- 代码调用图工具——颗粒度太细,看到的是函数调用而非业务逻辑。
- Notion / 飞书文档——与代码完全脱节,无法自动同步。
CodeSee 的定位是:AI 自动维护、语义级别、可交互画布、与代码同步,这四点同时满足的方案目前没有找到替代品。
技术实现细节
- 前端:React + React Flow + ELK 布局算法 + Tailwind。
- 数据:纯 JSON 文件,AI 通过 prompt 生成。
- 校验:写了一个零依赖的 validator,AI 写完自动运行,防止它编造不存在的字段。
- 兼容性:Cursor / Claude Code / Kiro / Copilot / Codex 都能用,只要你能读取 AGENTS.md。
开源地址
项目以 MIT 协议发布,并提供 Windows 和 macOS/Linux 的安装脚本。如果你也有“AI 写太快,我跟不上”的体验,不妨试试看。
