夜雨聆风学习资料网

ARTICLE · 1149266

让 AI 一次读懂 3 万行代码:我给项目建了张"认知索引",附踩坑清单

让 AI 一次读懂 3 万行代码:我给项目建了张"认知索引",附踩坑清单

先给结果。我拿自己手上这个商用项目(微信小程序 + Node 后端)试了一遍:1340 个文件、2.8 万行代码,压缩成 6446 个 token 的一张纯文本地图。

压缩比约 3.6:1。听起来不夸张,但意义不在比例,而在这份地图是持久的:它跟代码一起存在仓库里,被 Git 版本化,AI 每个任务开局读一次,之后就不用再把整个仓库翻一遍了。

它到底是什么

每个文件一行,四个字段:

文件名[标签]: F:职责 | R:必须一起读的关联 | A:对外契约 | S:不可推断但改错会出事的约束

一条真实的(我这个项目里的水印组件):

index.js[CU6M]: F:给图片叠品牌水印的公共组件,按 mode 决定烧进图片或作为浮层,支持按容器宽高自适应定位 | R:code:miniprogram/config/index.js | A:src,mode,text | S:mode=burn 时水印被写进导出图,无法撤销

F 说它是干什么的,R 是必须一起读的文件,A 是别人依赖它的什么,S 是看代码看不出来、但改的人不知道就踩坑的东西。

下面是我这次真实生成的几行(可直接在仓库里的 aoci.code.txt 看到):

S 这条最值钱,也最容易写坏。规矩是:宁可写 - 也不能编。写了 - 是在声明"我查过了,这里没有坑"。

三步装上
# 1)下载 release 包,把 aoci 放到稳定绝对路径
#    https://github.com/aoci-spec/aoci-code/releases
# 2)在你的项目根目录初始化
aoci init --locale zh-CN
# 3)建立基线(随后让 agent 逐批写条目)
aoci scan

本地跑、不联网、不上传代码。想让它自动维护,就把 MCP server 配进你的 agent;配完记得重启宿主并在连接器里点「信任」。

宿主还没加载 MCP 也能调

起 stdio 子进程发 JSON-RPC 就行,但顺序不能省: 先 initialize → 必须再发 `notifications/initialized` → 才能 tools/call。 少发那条通知,tools/call 会被拒。脚本我放进仓库了。

首建的真实工作量

scan 很快,1340 个文件 2.25 秒。真正的成本在写条目:

1297 个 index 文件需要写条目:约 52 轮 Maintain(每轮最多 50 条、响应预算 24 KiB)

官方口径是 20 万行约 1 小时(按模型速度浮动)。我这次只写了前 54 条,用来验证流程,剩下的留着慢慢补,这东西本来就支持渐进建立。

扫描是免费的,写条目才是成本。动手前先想清楚要建到多细。
四个坑,都是真踩出来的

一、项目不是 Git 仓库,直接卡死。 AOCI 的认知对象就是 Git 跟踪的文件集合。我这个项目原来没进版本管理,第一步是 git init + 首次提交。

二、不写 .gitignore,认知预算被打爆。 第一次 git add -A 把 node_modules、日志、上传文件全带进去了,索引预估冲到 61.8 万 token。补了标准 .gitignore 后降到 14.8 万,差 4.2 倍。 尤其要排除 AI 工具资产目录(.cursor/、.workbuddy/ 这类)。现代项目里它们动辄几千个文件,全是技能文档,跟业务代码一点关系没有。

三、别去改 `.aoci/config.json` 的 exclude_dirs 收窄范围。 会让策略身份漂移,后面所有 maintain 全变 repair_required。 用 scope rule add --action exclude 大批量排除也不行——超过 25% 阈值会被判为高风险变更,要求真人在终端手敲确认串,脚本里过不去。 正解是从 Git 源头解决:写进 .gitignore 再 git rm -r --cached(磁盘文件保留)。认知对象本来就来自 git 跟踪集合。

四、标签格式照文档字面写会被拒。 官方样例是 4 位紧凑形式(main.go[EG7T]),但合同字面写的是 A+B+C+[D]+E,照字面中间插个 -,结果整批拒收:

object_tag_dictionary_violation
cause: D Trait value - is not declared by the current Meta dictionary

还有:模块位(第 2 位)不能用 `F`,配置类文件用 C。 我第一轮 28 条全被拒,连修三轮(14 → 10 → 0)才过。

增量维护:改一行代码会发生什么

我故意在一个已索引文件的末尾加了一行注释,然后跑 maintain:

status=stopped  aligned=False
drift: stale 1 → ['miniprogram/app.js']

它精确知道是这个文件、这条条目过期了。

原理不玄:基线里存了每个文件的源码 SHA-256,改动后哈希对不上即判定漂移。 不看时间戳,也不靠 AI 猜。改完代码跑一次 maintain,它把过期的条目列给你,你(或你的 agent)只更新这几条。

整个批次与漂移的过程,机器输出长这样:

什么项目值得建,什么不值得

值得:几万行以上、多人协作、经常换 agent 或换会话、需要接手别人的老项目。省的是每个任务开头重复搜索和解释的那段时间。

不值得:几千行的小项目、一次性脚本、你自己天天在写、闭着眼都知道结构的代码。索引本身也是要维护的,小项目是负担大于收益。

一个前提:仓库得是干净的。依赖、构建产物、AI 工具资产没排除掉的话,索引里全是噪声,先花十分钟写 .gitignore 再开始。

我把完整上手流程、FRAS 写作规范、以及踩到的 16 条坑整理成了 skill,开源在下面,照着走一遍大概二十分钟:

https://github.com/TaurenRen/aoci-codebase-index

上游工具是 aoci-spec/aoci-code。提醒一句:它的许可是 FSL-1.1-MIT,不是 MIT——可以用、可以改,但不能拿它做成竞争性产品对外提供,两年后转 MIT。商用前确认一下这条。

索引能替 AI 记住代码,但决定建不建、建到多细的,还是你。

点击下方蓝色链接,领取《AOCI 代码认知索引上手速查》

资料包里有完整命令链、FRAS 四字段写法与配额表、以及实测踩坑清单,打印出来贴在显示器旁边照着做就行。

点此领取:AOCI 代码认知索引上手速查

相关学习资料