如何让AI代理处理海量遗留代码库而不丢失上下文或浪费资金
听起来很熟悉?你让Claude或ChatGPT去搞清楚一个老项目的逻辑,它开始"幻觉",或者用普通的grep读取数百个文件,耗尽整个Token限额。即便是像Claude Code这样的现代代理,在处理服务之间的深层连接或复杂的调用链时,也常常表现得像盲目的猫咪。
前几天我偶然发现了codebase-emory-mcp仓库。这是一个MCP(Model Context Protocol)服务器,可以将代码转换为结构化的知识图谱。这个工具不是向神经网络提供原始文本,而是构建函数、类和依赖关系的映射,让AI能够心领神会。
普通搜索有什么问题
当AI代理试图理解你的代码时,它通常采用暴力方式。它运行字符串搜索,逐个打开文件,并试图把所有内容记在脑子里。问题是上下文窗口并非无限的。如果项目很大,代理很快就会忘记调用链的开头,或者开始混淆不同模块中的相似方法。
DeusData开发者声称使用了他们图谱后,Token消耗减少了120倍。普通代理需要处理400,000个Token,而这个工具只需要三千到四千个。这不仅仅是节省API调用费用的问题——主要是关于答案的准确性。
这个引擎能做什么
该项目使用"纯" C编写,并使用SQLite进行数据存储。这带来了惊人的速度。对Linux内核(2800万行代码)建立索引只需要三分钟。典型的Django或React项目在几秒钟内就能被"吞下"。
有几个功能引起了我的注意:
- 架构理解。这个工具不仅看到文本,还看到结构。它能区分API端点,理解哪个函数调用哪个,甚至能找到没有人使用的"死"代码。
- 支持66种语言。得益于tree-sitter,这个引擎几乎能理解一切——从Python和TypeScript到Rust和COBOL。此外,对于C、C++和Go,它能以LSP风格推断类型。
- 可视化。它附带一个(可选的)3D图谱可视化器。你可以在浏览器中旋转你的项目,查看模块是如何连接的。
- 代理集成。只需一条命令,工具就会为Claude Code、Zed、Aider和其他十几种流行工具进行配置。
这个你可以在浏览器中旋转的3D图谱
底层工作原理
有趣的是,作者决定不嵌入自己的LLM来将查询转换为数据库命令。他们明智地认为:既然你已经在和一个智能代理(如Claude 3.5 Sonnet)对话,就让它来处理翻译工作。
你问:"谁调用了方法?"。代理理解意图并调用工具。引擎在毫秒级遍历图谱并返回结构化响应。结果,AI看到的是一条清晰的调用链,而不是试图从间接线索中猜测。
存储使用WAL模式的SQLite,数据使用LZ4算法压缩。这使得即使是非常大的项目的索引也能在操作期间直接保存在内存中,而不会给磁盘带来压力。
对开发者的实际好处
最明显的用例是加入新项目或重构旧项目。你不用在脑海中手动构建图表,而是给代理访问。
例如,你可以问:"找到所有接受但没有检查访问权限的端点"。该工具将找到普通文本搜索会遗漏的HTTP路由和验证方法之间的连接。
另一个很酷的功能是。它分析你当前的git diff并显示"爆炸半径":你的更改将影响哪些函数和模块。这是在提交前的绝佳保险。
如何尝试
安装再简单不过了——无需Docker或额外依赖。对于macOS和Linux,只需一个终端命令:
如果你想立即使用可视化,添加标志。安装后,只需重启你的AI代理并告诉它:"为这个项目建立索引"。
值得一试吗
这个项目看起来非常有前景。我特别喜欢的是它不是又一个云服务,而是一个本地工具。你所有的代码都留在你的机器上——没有数据被发送到外部服务器进行索引。
当然,也有一些细微差别。对于Haskell等某些语言的分析质量仍然低于主流的Python或Go。但支持的技术列表和处理速度足以弥补这些粗糙之处。
如果你在日常开发中积极使用AI,并且感觉它在复杂任务上开始"卡壳",这个工具可能就是那个缺失的环节。至少,能够将项目作为3D图谱查看绝对值得花十分钟安装时间。
相关项目