AI 教我学习 · 精读源码

带 AI 精读一个大型开源仓库

几十万行的陌生代码,带着 AI 读出设计决策。约束只有一条:每一个技术论断都能回到源码的具体行。

课程目标读完能带着 AI 啃一个陌生的大型仓库,并且每一句技术判断都能指到源文件的某一行。也会看懂校验脚本为什么要同时盯引用数量和引用对错。
先玩一遍 · 引用校验现场
同一段技术说明:混了逐字节一致的引用和悄悄改过的引用
校验口径
点播放看脚本怎么逐条比对。换口径再跑一遍,看最后一步差在哪。
AI 写的技术说明 · 示意文本

放行条件写在 admit。user 没被封,或者 token 仍有效,就发 Permit。失败时走 revoke

4文章声称
4还在的引用
0逐字节通过
引用 1 · L40-42函数签名 · 待检
引用 2 · L41条件方向 · 待检
引用 3 · L40-46整段函数 · 待检
引用 4 · L48-50失败路径 · 待检
文章里的引用
还没开始比对。
源文件里的真实内容
脚本会按声称的路径和行号,把源文件切出来。
选一种校验口径,点播放。脚本会把文章里的引用拿回源文件,逐条比对。
脚本在比什么左边是文章声称的字节,右边是源文件按行号切出来的字节。差一个符号、少一行、行号对不上,都会亮出来。
漏检的代价条件方向反了,读者会按或逻辑理解放行。删掉的 else 会让失败路径从文章里消失。漂了的行号会把人带到另一段函数。
口径也要被盯住只报现有引用对不对,报错的引用会被删掉,校验照样全绿。
教学示意:gate/src/admit.rs 是为演示编的短片段,用来展示校验机制本身。真实仓库里,脚本拿回去比对的是锁过版本的源文件。
思路一 · 每一个论断都回到具体行
它解决什么问题

打开一个几十万行的仓库,没有导读,上游每天在改。你问 AI 这段是怎么调度的,它会流畅地吐出一个函数名和一个看起来合理的行号。那个函数可能根本不存在。你把这句话写进笔记,下次按行号点进去对不上,分不清是当初写错了,还是后来上游改了。

源码是最难的一类材料。量大,没有导读,上游在动。AI 在这里最容易编造,因为它能把不存在的符号说得很顺。

具体怎么做

定一条约束:每一个技术论断都带文件路径加行号。写 session 在超时后会清掉 pending tool 这种句子之前,先打开那个文件,读到那一行,再写。引用里写清路径、起始行、结束行。代码块和源文件逐字节一致。找不到就写未找到对应实现,并记下检索用过的关键词,不要补一个看起来合理的。

站里那组 Codex 课页,比如 新功能先找落脚的 crate,就是这套做法跑出来的成品。每一处判断旁边都能指到源码。

这套方法从四个项目里长出来:Claude Code、Grok、DeepSeek Harness、OpenAI Codex。最后产出了 61 节课页。

为什么有效

这条约束有两层用处。一层是迫使你真的读到那一行,印象和文件名推测过不了关。另一层是让别人能验证你。没有行号的源码文章,读的人只能选择相信作者。这是工程经验。

每一个技术论断都回到源码的具体行。
思路二 · 先锁版本,再按四步往下写
它解决什么问题

行号是地基。上游每天合 PR。你今天记下的第 76 行,下周可能已经是另一段逻辑。不先锁版本,写到后面,前面的引用会成批失效。失效之后更麻烦:分不清当初就写错了,还是后来上游改了。两种情况的处理完全不同。

具体怎么做

四件事按顺序做。小任务不必四步全走。只想搞清一个机制,守住论断带行号就够。要写成一门课或一个系列,四步都走,并且一开始就准备校验脚本。

1. 锁版本锚点

记下当前 commit,最好打一个 tag,写进后续文档的文件头。后面所有行号都相对于这一次快照。

2. 写逐章提纲

每章只立一个核心问题,并列出这一章要读的文件。这一步决定哪些进、哪些不进。

3. 按结构写章节

每处论断带行号,代码块和源文件逐字节对齐。推断要标明是推断。

4. 转成可讲的产出

课页、演示、给别人讲的版本,正文几乎不再堆代码。行号仍留在能被点开的地方。

锁版本锚点 记下 commit 写逐章提纲 问题 + 要读的文件 按结构写章节 论断带行号 可讲产出 课页 / 演示
四步按顺序。校验脚本从第一步之后就跟着跑,不要等全写完再补。

版本锚点把当时仓库长什么样冻住。后面任何引用失效,都能拿这个 commit 复现。提纲先于正文,是为了避免边读边写、写到一半发现两章在重复同一段源码。这是工程经验。

思路三 · 校验脚本同时盯数量和正确性
它解决什么问题

人工复核十万字里的行号不现实。AI 会改一个符号,静默删掉一行,或者把行号写漂。这些改动肉眼扫过去经常看不出来。

还有一类更隐蔽。校验器只报现有引用对不对,不报该有的引用还在不在。AI 为了让校验变绿,会直接删掉报错的那些引用。真实事故:整章从 56 条引用掉到 22 条,全绿。校验规则本身也会被优化。

具体怎么做

让脚本把文章里的代码块拿回源文件,按声称的路径和行号切开,逐字节比对。对得上才过。差一个字符、少一行、行号对不上内容,都标红。

另外给一个数量门槛:这一章开始有多少条引用,结束时不能无故变少。掉了就报。

它会一本正经骗你,三道防线 讲的是同一件事的通用版。这一页的机器校验是它的工程化版本:出处变成了文件加行号,交叉验证变成了脚本重读源文件。

为什么有效

人做不到对十万字逐字节。脚本可以。它不管文字写得顺不顺,只问两件事:你声称的那几行现在还在不在,跟源文件是不是同一个字节序列。口径同时包含数量和正确性,删引用这条捷径就走不通。

横向对比 · 常见做法和这一页的做法

常见做法

把仓库丢给 AI,直接要一份架构总结。函数名、行号、条件方向都可能是编的。读的人没有验证入口。时间省在前面,错埋在后面。

代价:看起来完整,无法核对

这一页的做法

先锁版本,论断带行号,脚本逐字节比对,并且盯引用数量。每个判断都要打开文件。只想快速摸一眼的小问题,会被这套流程压得偏重。

代价:慢,小任务不必四步全走
课堂练习
01

拿你正在看的仓库试一条引用

写一句你以为成立的技术判断,带上文件路径和行号。然后把那几行原样贴进对话,让 AI 按源文件再读一遍。

对不上的那个字符记下来,看它会把结论带去哪。如果它对得上,再补问一句:这段代码旁边还有哪一行是这句判断没覆盖到的。

可复用的方法仓库
开源仓库 · source-reading-methodology

完整方法论、三份可复用模板、28 条踩坑清单,以及可直接装的 Agent Skill。这一页讲的流程和校验口径都在里面。

打开 GitHub 仓库
Takeaway:每一个技术论断都回到源码的具体行。先锁版本,再写提纲和章节。校验脚本同时盯数量和正确性,只报对错会被优化成删引用。