去年有个团队用Claude重构支付模块,测试全绿,上线三小时后被紧急回滚。问题出在三个看似无关的调用链——Claude改了核心函数,却没发现还有四处地方在用它。这不是智力问题,是导航问题。
AI写代码的瓶颈从来不在"会不会写",而在"知不知道自己在哪"。就像让一个记忆力超群的人进迷宫,他能背下所有转弯,但手里没地图。
90%的AI_INDEX都是电话簿,不是地图
现在市面上的代码索引工具,大多长这样:
auth → src/auth/
api → src/api/
db → src/models/
Claude能靠这个找到文件位置,但改完auth里的verifyToken函数后,它完全不知道api层的requireAuth会受影响。这是目录列表,不是结构图。
真正有用的索引得是图结构——节点是业务域,边是真实的调用关系。每个节点写明入口文件、关键函数、测试位置,以及最关键的"Connects to":它连向谁,被谁连。
比如Auth节点的边:通过requireAuth()连到API层,通过UserModel.findById()连到DB层。API层又通过POST /api/evaluate连到规则引擎。这才是能被算法遍历的网络。
没有边,你只能查电话簿;有了边,BFS能帮你算影响范围。
grep烧光token,LSP直接问编译器
遍历图需要精确查找。传统做法用grep字符串匹配,搜一个函数名出来40个结果,15个是噪音,token预算先烧掉一半。
更好的办法是LSP(语言服务器协议)。它不猜字符串,直接问语言的类型检查器:这个符号在哪定义的?谁引用了它?语义级查询,同样的问题返回6个精确结果。
生成器的工作流程很直接:扫描import语句、目录结构、导出符号,输出AI_INDEX.md。所有"Connects to"的边都来自真实代码,不是猜的。
整个过程80%是确定性脚本,零token消耗;剩下20%让Claude做精炼,比如给节点起更准确的业务名。
新项目跑一遍,结构变了再重跑。不需要每次提问都重新分析。
关键机制:逼Claude先指认来源
这套系统真正值钱的地方,是强制Claude在发表任何结论前,先说出它读了哪个文件、哪行代码。
以前的状态是:Claude给出一个自信满满的解释,你信了,一小时后发现是编的。现在的状态是:它要么指出来源(准确),要么说"不确定"(你需要深挖)。中间地带被消除了。
/investigate-module命令让它读特定节点,/trace-impact命令做BFS遍历——改一个函数前,先算出所有受影响的路径。
把bug或需求丢进这张图,系统能在你写第一行代码前,就标出所有相关节点和边。
有个细节很有意思:团队发现Claude在精炼阶段特别喜欢给节点起抽象名字,比如把"用户登录"改成"身份认证域"。他们最后加了条规则——节点名必须能在代码里搜到对应关键词,防止过度抽象。
这套方法现在最大的限制是什么?边缘项目的代码库往往连稳定的LSP配置都没有,第一步就得先折腾环境。
热门跟贴