接手陌生代码库时,先让 AI 把「入口在哪、请求怎么走、改动会碰到谁」三件事问出来并自己动手验证一遍,再开始改代码;顺序反了,AI 只会给你一段听起来合理但经不起跑的错误结论。
为什么一上来就问「这个项目是干什么的」没用
新手最常见的做法是打开对话框问一句「这个项目是做什么的」,然后照着答案找文件。这个动作有三个问题:
- 模型没有仓库上下文时会依据目录名和文件名推测,推测出来的架构经常是「看起来很标准的那一种」;
- 大仓库一次塞不进上下文,模型只看到局部,会把测试目录、示例代码或历史遗留模块当成现行主逻辑;
- 结论无法验证。你不知道它说的入口是真实入口,还是恰好排在目录前面的那个文件。
GitHub 工程师在分享如何熟悉新代码库时,给出的第一条建议恰恰相反:先动手探索,从 Good First Issues 这类小任务切入,边看边把 Copilot Chat 开在旁边问。这个顺序的关键在于「先有真实接触点,再要解释」。
四步梳理法
第一步:先要地图,不要要结论
问架构,不问用途。并且强制要求给出证据——文件路径加行号,没有证据的结论一律标为待验证。一份可用的提问模板:
这是本仓库的目录树与入口文件清单。请回答:
1. 程序启动入口是哪个文件,启动后依次加载了哪些模块
2. 模块之间如何依赖,画出调用方向
3. 数据最终落在哪里(数据库 / 文件 / 外部 API)
4. 每一条结论后面附上 文件路径:行号 作为证据
不要推测,找不到就说找不到。
这一步的目标不是「读懂」,而是拿到一张可以自己核实的草图。 Cursor 官方文档在讲陌生代码理解时也强调同一件事:先要整体架构,再下钻到具体任务、测试策略和配置。
第二步:追一条主链路
不要横向铺开读所有模块。挑一条最高频的链路——一个 HTTP 接口、一条命令、一次定时任务——从入口一路追到存储层,并要求输出时序图:
追踪一次 POST /api/orders 请求的完整路径:
经过哪些中间件、做了哪些校验、调用了哪些服务、
最终写进哪张表。用 Mermaid 时序图输出,每个节点标注文件位置。
这一步的价值是建立「改哪里会碰到什么」的直觉。看懂一条链路比泛读十个模块有用得多,检索层面的技巧可以配合代码检索三步法一起用。
第三步:用改动验证理解
这是最容易被跳过、也最不能跳过的一步。挑一处你自认为看懂的地方,做一次最小改动并观察结果:
- 改一个常量、加一行日志,跑起来看现象是否符合预期;
- 写一个最小断言,把「我以为的行为」固化成测试;
- 故意在开发分支里破坏它,观察失败路径。
改对了说明理解成立,改错了说明前两步的结论有偏差,正好回去修正。把这一步交给模型自己做是不行的——模型不知道运行时长什么样,除非你把运行时信息喂给它。
第四步:把结论沉淀成项目上下文文件
验证过的结论要落到文件里,否则下一次开新会话又要重来一遍。写成规则文件供后续会话自动加载:
# 项目上下文
## 架构
- monorepo,三个包:api / web / shared
- api 用 Express + TypeORM,web 用 Next.js
## 常见模式
- 新增接口参考 src/api/routes/users.ts
- 业务逻辑在 service,数据访问在 repository
## 禁区
- src/api/auth/legacy 是遗留鉴权,不要动
- 部分老服务仍是 callback 风格,不要混用 async/await
这个文件有双重作用:既让 AI 下次少走弯路,也是给下一个新人看的文档。具体的组织方式可以参考项目记忆文件指南。
四类问题该问什么
| 你想知道的 | 该这样问 | 别这样问 |
|---|---|---|
| 结构 | 列出入口文件与模块依赖,附文件路径 | 这个项目用了什么架构 |
| 流程 | 追踪一次 X 请求从入口到存储的完整路径 | 订单模块怎么工作的 |
| 影响面 | 重命名 Customer 会影响哪些文件,逐个列出 | 改这个类名安全吗 |
| 历史原因 | 查这段代码的提交历史,说明它为什么存在 | 这段代码能不能删 |
规律是:要求列举、要求给证据、要求限定范围。开放式提问得到的答案听着完整,但无法验证,也就无法放心使用。
落地步骤
- 拉起项目,先跑通一次启动和一个最小用例,确认环境没问题。
- 要地图:让 AI 输出入口、模块依赖、数据落点,每条结论必须带文件路径与行号。
- 追主链路:挑一条最高频请求,要求输出时序图并标注每个节点的文件位置。
- 动手验证:改一个常量或加一行日志,跑起来比对现象与预期是否一致。
- 补一个最小断言测试,把验证过的行为固化下来,防止后续回归。
- 查历史:对看起来别扭的代码,先查提交历史与 blame,再决定是否动它。
- 沉淀上下文:把架构、常见模式、禁区写成规则文件,提交进仓库。
什么时候不该依赖 AI 的回答
三类信息 AI 给不了可靠答案,必须自己看:线上真实流量与性能数据、团队成员口耳相传的历史包袱、以及没有写进代码的业务约束。 GitHub 那篇分享里把「分析遥测指标」和「结对编程」单独列成两类策略,正是因为它们无法从代码里读出来。
如果你接手的是一个历史包袱很重的老项目,思路要换成先划边界再小步改,具体可以参考遗留代码的 AI 重构思路。
仓库太大,AI 读不完怎么办
AI 给的结论怎么判断真假
文档缺失的项目还有救吗
要花多久才能算上手
结论:AI 在陌生代码库上的价值不是替你读,而是把你的提问变成可核实的清单。地图、链路、验证、沉淀四步里,真正产生理解的是第三步——只有自己动过手,前面那些解释才从「听起来对」变成「确实对」。










评论 (0)