我用Cody读懂了三万行祖传代码,AI代码搜索太猛了
上周五,组里把一个运行了六年的老系统甩给了我。说是”交接”,其实就是一句”这个项目以后你负责维护”。打开代码库一看,三万多行,没有文档,注释比大熊猫还稀少,函数命名风格从”getUserInfo”到”xxx_test2″什么都有。我当时的心态,大概和被扔到荒岛上差不多。
接手老项目的崩溃时刻

说真的,接手别人写的代码比从头写更痛苦。你不知道这个函数为什么存在,不知道这行注释”临时方案,后续优化”是不是三年前写的,更不知道删掉某段逻辑会不会引发线上事故。
我试过用IDE的全局搜索,结果搜一个函数名出来几十个文件,每个都长得差不多。一个”process”方法,在不同的类里有七八个实现,根本搞不清调用的到底是哪个。
也试过直接问ChatGPT,把代码贴进去问”这段代码在干嘛”。但问题在于,ChatGPT只看你贴的片段,它不知道上下文,不知道这个函数被谁调用,更不知道整个项目的架构长什么样。
折腾了一整天,我只理清了一个模块的大致流程。照这个速度,全部摸完至少要两周。
Cody是什么?Sourcegraph出品的代码搜索AI
后来一个同事推荐了Cody。这是Sourcegraph做的AI编程助手,跟Copilot、Cursor不太一样——它的核心能力不是帮你写代码,而是帮你理解代码。
Cody背后接的是Sourcegraph的代码图谱引擎。简单说,它不光看单个文件,而是把整个仓库的调用关系、依赖关系、引用关系全部建了索引。你问它问题,它会在代码库里搜索相关上下文,然后把答案和对应的代码位置一起给你。
这对我来说太对口了。我不需要它帮我写新功能,我需要它帮我搞懂旧功能。
实际使用过程
第一步:连接仓库
Cody支持直接连接GitHub、GitLab仓库,也支持本地代码。我把那个老项目的GitHub仓库连上去之后,Cody花了大概两三分钟建索引。项目不大,三万行代码很快就索引完了。
如果你用的是私有仓库,需要配置一下Sourcegraph的访问令牌。公开仓库的话直接选就行,零配置。
第二步:用自然语言问问题
这一步是最爽的。我开始用中文直接问:
“用户登录的流程是什么?从入口到最终验证,涉及哪些核心函数?”
Cody给了我一个相当完整的回答:它找到了登录入口在那个Controller里,然后追踪到认证Service,再到Token生成和缓存逻辑。每个步骤都附了对应的文件路径和行号,点击就能跳转。
说实话,如果是我自己一个文件一个文件翻,这个流程至少要花半天。Cody大概用了十秒。
第三步:追问细节
光知道流程还不够,我需要理解每个模块的实现细节。于是我开始追问:
“processOrder这个函数里,第45行那个if判断的condition是什么意思?为什么要在status等于3的时候跳过?”
Cody不仅解释了那段代码的逻辑,还帮我找到了status字段的枚举定义——在一个叫constants的文件里,status=3代表”已退款订单”。这个信息在代码注释里完全没提到,我只能通过上下文推断。
这种”追问式”的代码理解方式特别适合接手老项目。你不需要一次搞懂全部,而是从你关心的问题出发,一层层往下挖。
第四步:让它帮我画调用链
Cody还有个功能我觉得特别实用——你可以让它生成调用链路。比如我问:
“OrderService.createOrder被哪些地方调用?最终会触发哪些下游操作?”
它会列出所有调用点,然后画出大致的调用路径。虽然不是可视化的图表,但文字版的调用链已经很清晰了。对于理解”改了这里会影响哪些功能”来说,足够用了。
效果对比:手动翻代码 vs 用Cody
我用两种方式分别理解了同一个模块(订单处理),记录一下对比:
手动方式:打开入口Controller → 搜函数名 → 找到Service → 读实现 → 发现调了另一个类 → 再去搜那个类 → 循环往复。一个模块下来大概花了4个小时,而且中途经常被无关代码带偏。
用Cody:直接问”订单处理模块的完整流程是什么”,10秒拿到概览。再追问关键细节,半小时搞懂了核心逻辑和边界条件。总共花了大概40分钟。
效率差距大约是6倍。当然,Cody偶尔也会理解错误,特别是代码命名很混乱的时候。但它给的文件路径和行号是真的,你可以快速验证。
复用指南:怎么把Cody用好
用了几天之后,我总结了几条经验:
1. 问题越具体越好。 “这个项目怎么运行的”这种问题太宽泛,Cody的回答会很泛泛。换成”用户下单后到支付成功,中间经历了哪些步骤”会好很多。
2. 善用追问。 一次问答搞不定的,就追问细节。Cody的上下文窗口够大,连续追问三四轮完全没问题。
3. 交叉验证关键逻辑。 涉及到线上核心逻辑的,一定手动确认一遍。AI有时候会”幻觉”出不存在的调用关系。
4. 用Recipes功能。 Cody内置了一些Recipe(配方),比如”解释这段代码”、”找到这个函数的所有调用者”、”生成单元测试”等,比自己写prompt更精准。
5. 结合IDE一起用。 Cody有VS Code和JetBrains的插件,可以直接在编辑器里用,不用切窗口。
关于价格
Cody的定价分三档。Free版本每月500次聊天和自动补全,对个人开发者来说够用了。Pro版本每月9美元,无限聊天,适合重度用户。Enterprise版本面向团队,支持更多仓库和SSO。
我个人觉得Free版就够接手一两个老项目用了。如果你每天都在老代码里泡着,Pro版值得升级。
几点不完美的地方
说了这么多好话,也聊聊不足:
一是Cody对中文注释的理解有时候不够准。老项目里有些注释是中英混杂的,偶尔会理解错意思。
二是大仓库的首次索引比较慢。三万行的项目还好,但如果是几十万行的大型monorepo,建索引可能要等挺久。
三是它的”调用链”分析还停留在文字层面。如果能生成可视化的调用图就更直观了。
写在最后
用了Cody之后,我对”接手老项目”这件事的恐惧值降低了不少。以前觉得是苦差事,现在反而有点像”考古”——有AI帮你翻译古人留下的”甲骨文”,你知道每段代码大概在干嘛,为什么这么写,改了会影响什么。
当然工具归工具,最终保证代码质量的还是人。Cody能帮你快速理解代码,但它不会帮你做架构决策,也不会替你背线上事故的锅。
但如果你正在接手一个庞大的老项目,或者在一个你不熟悉的代码库里摸索,Cody确实是目前最好的”代码考古工具”之一。至少比你在几十个文件里Ctrl+F要强太多了。














