乐于分享
好东西不私藏

实测两个代码知识图谱工具:AI 终于不用逐文件翻代码了

实测两个代码知识图谱工具:AI 终于不用逐文件翻代码了
往期热门文章:
1、AI Coding 后,Java 后端的价值不在写得更快
2、不会写代码的高管用Claude Code两天上线新程序,工程师接手后发现:一个Bug,让AI一天烧掉一个月服务器费!
3、Fastjson 又炸了,爆出了核弹级漏洞
4、面试官尬笑:你说半天就能读完一个开源项目源码,不就是用 AI 吗?我说:是用 DeepWiki,而且是 Codemap 模式!
5、Claude Code 强大是因为模型强还是 Agent 实现细节?

用 Claude Code 或者 Cursor 写代码的日子一长,一个问题会反复困扰你:AI 对你的代码库"没有记忆"。

每次开新会话,它都像第一天入职的新人,什么都不记得。你问它"这个函数被谁调用了",它就老老实实地 grep 一遍、read 一堆文件,绕了一大圈才给你答案。代码库越大,这个问题越明显——Token 烧得心疼,等待时间也长。

最近社区里有两个开源项目都在解决这个问题,思路也差不多:提前把代码库解析成一张知识图谱,存到本地 SQLite 里,再通过 MCP 协议暴露给 AI 助手。AI 不用自己翻文件了,直接查图就行。

这两个项目分别是 codebase-memory-mcp(DeusData 出品,3.7 万 Star)和 CodeGraph(colbymchenry 出品,6.4 万 Star)。我把两个都装上用了一段时间,这篇文章聊聊实际体验。


先说 codebase-memory-mcp

codebase-memory-mcp纯 C 实现 · 零依赖 · 158 种语言 · MIT

这个项目最让我惊讶的是索引速度。官方数据说 Linux 内核(2800 万行代码、7.5 万个文件)全量索引只要 3 分钟,我在一台 M3 Pro 上索引一个几十万行的 Java 项目,几秒钟就跑完了。它把 158 种语言的 tree-sitter 语法全部编译进了一个二进制文件里,不需要装任何运行时,下载下来就能用。

另一个值得一提的是它的 Hybrid LSP 机制。普通 tree-sitter 解析只能拿到语法结构,但 codebase-memory-mcp 在 Python、TypeScript、Go、Rust、Java 等 10 种语言上额外做了一层轻量级类型推断——参数绑定、返回类型、泛型替换、JSX 组件分发这些都能解析出来。实际效果是调用链追踪的精度明显比纯 AST 分析高一截,尤其是 TypeScript 里那种层层泛型嵌套的代码。

安装很简单:

# macOS / Linuxcurl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash# 或者用包管理器brew install codebase-memory-mcpnpm install -g codebase-memory-mcppip install codebase-memory-mcp

装完之后重启你的 AI 助手,跟它说"Index this project",它就会自动调用 index_repository 工具建立索引。

它提供了 15 个 MCP 工具

挑几个我日常用得最多的说说。在看具体工具之前,先瞅一眼图谱里到底存了些什么——下面是一个电商项目里"下单"这条链路的真实结构:

1. 调用链追踪(trace_path)

这是我最常用的功能。以前问 AI"谁调用了这个函数",它要 grep 好几轮,还不一定找得全(动态调用、跨包引用经常漏)。现在它直接查图:

# 你问 AI:"OrderService 的 createOrder 被哪些地方调用了?"# AI 在后台调用:trace_path(function_name="createOrder", direction="inbound", depth=3)# 返回结果(节选):{"paths": [    ["OrderController.submit""OrderFacade.place""OrderService.createOrder"],    ["ImportJob.run""BatchProcessor.process""OrderService.createOrder"],    ["OrderRetryHandler.onMessage""OrderService.createOrder"]  ],"total_callers"3,"query_time_ms"0.4}

注意最后一条路径:OrderRetryHandler.onMessage 是通过消息队列间接触发的,grep 根本找不到这种调用关系,但图谱里有 ASYNC_CALLS 边,能追出来。

2. Cypher 查询(query_graph)

如果你喜欢自己动手,可以直接写类 Cypher 语句查图。比如找出所有没有任何调用者的函数(潜在的死代码):

MATCH (f:Function)WHERE NOT (f)<-[:CALLS]-()AND NOT f.is_entry_pointRETURN f.name, f.fileORDER BY f.file

再比如查某个类的所有实现:

MATCH (c:Class)-[:IMPLEMENTS]->(i:Interface)WHERE i.name = 'PaymentGateway'RETURN c.name, c.file

在这种几十万行的项目上,这类查询基本都在 1 毫秒以内返回。

3. 变更影响分析(detect_changes)

改代码之前,先看看影响面。这个工具会读取 git diff,把改动的文件映射到受影响的符号上:

detect_changes(project="my-app")# 返回(节选):{"changed_symbols": ["UserService.updateEmail"],"impacted": [    { "symbol""ProfileController.update""risk""high" },    { "symbol""AdminApi.syncUsers",    "risk""medium" },    { "symbol""UserTest.testUpdate",   "risk""low" }  ]}

AI 拿到这个结果后,会主动提醒你"这次改动影响了 3 个下游调用方,建议同步检查 ProfileController 的测试"。这比它自己瞎猜靠谱多了。

4. 跨服务链接

做微服务的话这个功能很实用。它能识别 HTTP 路由定义和调用方,把前端请求和后端接口在图里关联起来:

# 图谱中的边:(Frontend: "apiClient.fetchOrders")-[:HTTP_CALLS]->(Backend: "GET /api/orders")-[:DEFINES]->("OrderController.list")

除了 HTTP,还支持 gRPC、GraphQL、tRPC,甚至 Socket.IO 的事件通道(EMITS / LISTENS_ON 边)。

5. 语义搜索

它把 Nomic 的 nomic-embed-code 向量模型直接编译进了二进制里,不需要 API Key,也不需要跑 Ollama。搜索"处理用户退款的逻辑"这种模糊描述时,比正则匹配好用:

semantic_query(project="my-app", query="user refund processing")# 返回按相关度排序的符号列表,综合了 TF-IDF、AST 结构、# 数据流、模块邻近度等 11 个信号打分

另外提一句,它还有个 3D 图谱可视化 UI(安装时加 --ui 参数),浏览器打开 localhost:9749 就能交互式地看整个代码库的结构。第一次看自己项目的全景图,还挺有意思的。

官方截图 · codebase-memory-mcp 内置的 3D 图谱可视化(localhost:9749),可以旋转、缩放、点选节点,直观看清整个代码库的结构和聚类。
还有个适合团队的功能:索引完成后会生成 .codebase-memory/graph.db.zst 压缩文件,提交到 Git 仓库后,队友克隆下来直接用,不用重新索引。

再看 CodeGraph

CodeGraphRust 内核 · 自动同步 · 34+ 种语言 · MIT

CodeGraph 的定位和 codebase-memory-mcp 类似,但有几个自己的特点。

安装分三步:

# 1. 装 CLI(自带运行时,不需要 Node.js)curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh# 2. 把 MCP Server 接入你的 AI 助手(新开一个终端)codegraph install# 会自动检测已安装的 Claude Code、Cursor、Codex、OpenCode 等,逐个配置# 3. 在项目里初始化cd your-projectcodegraph init
官方截图 · codegraph init 一条命令建好整个图谱,之后自动同步默认开启,不用再手动跑任何同步命令。

自动同步是它最大的卖点

codebase-memory-mcp 也有后台 watcher,但 CodeGraph 在同步这件事上做得更细。它用原生 OS 事件(macOS 的 FSEvents、Linux 的 inotify、Windows 的 ReadDirectoryChangesW)监听文件变化,防抖 2 秒后自动增量同步。按官方数据,在一个 4400 文件的项目上,改一个文件后图谱更新约 0.3 秒。

更关键的是它处理了"同步窗口期"的问题:如果 AI 恰好在同步完成前查了一个刚改过的文件,返回结果里会带一个警告横幅,告诉 AI"这个文件有更新,请直接 Read 它"。这个细节避免了 AI 拿着过期数据给你错误答案。

# 用 codegraph status 随时查看同步状态$ codegraph statusGraph: my-app (4,412 files, 38,291 symbols)Last sync: 2s ago✓ Up to date

核心工具:codegraph_explore

CodeGraph 的 MCP 工具不多,核心是一个 codegraph_explore,一次调用返回入口点、关联符号和代码片段。看个实际例子:

# 你问 AI:"Django 的 ORM 是怎么从 QuerySet 构建和执行 SQL 的?"# AI 调用:codegraph_explore(query="QuerySet to SQL execution")# 返回(节选):{"entry_points": ["QuerySet.__iter__""QuerySet._fetch_all"],"call_path": ["QuerySet.__iter__","QuerySet._fetch_all","Query.get_compiler","SQLCompiler.execute_sql","CursorWrapper.execute"  ],"snippets": { "SQLCompiler.execute_sql""django/db/models/sql/compiler.py:1441..." }}

AI 拿到这条调用链,直接就能给你讲清楚整个流程,不需要自己去翻 django/db/models/sql/ 下面那一堆文件。

官方基准测试

CodeGraph 团队在 7 个真实开源项目上做了对比测试(Claude Opus 4.8,每个场景跑 4 次取中位数),挑几个有代表性的列出来:

项目
语言
工具调用(有/无)
Token(有/无)
成本(有/无)
VS Code
TypeScript
2 / 40
26.5 万 / 150 万
$0.36 / $1.41
Tokio
Rust
3 / 57
38.6 万 / 430 万
$0.44 / $3.04
Django
Python
2 / 29
25.4 万 / 120 万
$0.35 / $1.13
Alamofire
Swift
3 / 53
31.6 万 / 310 万
$0.35 / $2.51
Gin
Go
3 / 10
24.6 万 / 30 万
$0.27 / $0.46

有意思的是,7 个项目里 AI 的文件读取次数全部降为零——它完全靠图谱回答问题,一个文件都没打开。

不过也要说明,小项目上优势没那么夸张。比如 OkHttp 那个测试,没有 CodeGraph 时 AI 运气好,5 次调用就找到了答案,成本反而还低一点。所以这个工具在大项目上的收益更明显。

官方基准图 · CodeGraph 官方给出的 Token / 成本节省随代码库规模的变化趋势——代码库越大、耦合越深,省得越多。VS Code 这种量级的项目上差距最为悬殊。

移动端混合项目支持

这是 CodeGraph 独有的能力。它能追踪 Swift 和 Objective-C 之间的桥接调用、React Native 的 legacy bridge 和 TurboModules、Expo Modules 的原生模块注册。做 iOS 或者 RN 开发的话,跨语言调用链断了的问题应该都遇到过,这个功能就是干这个的。


放在一起比一比

codebase-memory-mcp
CodeGraph
实现
纯 C,单二进制文件
Rust 内核 + 自带运行时
语言数量
158 种
34+ 种
解析精度
tree-sitter + Hybrid LSP 类型推断(10 种语言)
Rust 原生解析,逐字节验证一致性
索引速度
Linux 内核约 3 分钟(M3 Pro)
Linux 内核约 12 分钟(2 核 6GB VPS);工作站上 27k 文件约 100 秒
查询延迟
亚毫秒级(官方基准)
未公布具体数字,实测体感为毫秒级
自动同步
后台 watcher
原生 OS 事件 + 过期警告机制
搜索方式
向量语义搜索 + BM25
FTS5 全文搜索
跨服务
HTTP / gRPC / GraphQL / tRPC / 事件通道
17 种 Web 框架路由识别
移动端
Swift↔ObjC / RN / Expo 桥接
可视化
3D 图谱 UI
团队共享
图谱文件可提交 Git
安装方式
brew / npm / pip / scoop / AUR 等
安装脚本 / npm

简单说我的选择逻辑:

  • 项目语言比较杂,或者有微服务架构需要跨服务分析,选 codebase-memory-mcp。158 种语言的支持面是实打实的优势,Cypher 查询也更灵活。
  • 主力是 TypeScript / Python / Go / Rust 这些主流语言,想要装完就不用管、图谱永远最新的体验,选 CodeGraph。自动同步做得确实更省心。
  • 做 iOS 或 React Native 开发,CodeGraph 的跨语言桥接追踪基本是唯一选择。
  • 两个都是 MIT 协议、100% 本地运行,代码不会出你的机器。codebase-memory-mcp 明确声明不收集任何遥测;CodeGraph 有可选的匿名使用统计(可关闭)。不冲突的话其实可以都装上试试。

那 grep 是不是可以退休了?

写到这儿,估计有人会问:说得这么神,我直接 grep 不就行了?

说实话,很多时候 grep 真就够了。你只是想找某个报错文案在哪、某个配置项叫什么、哪行写了 TODO——这种活儿 grep 又快又准,图谱反而帮不上忙,因为它索引的是代码结构,不是任意文本。

两者的根本区别就一句话:grep 搜的是"文本在哪出现",图谱查的是"代码之间什么关系"。

图谱强在哪

凡是涉及"关系"和"全局"的问题,grep 就开始吃力了:

你想搞清楚
grep 的做法
图谱的做法
谁调用了这个函数
搜函数名,混进定义、注释、同名函数,得人工筛
直接查 CALLS 边,精确到符号
A→B→C→D 的调用链
一轮轮手动搜,搜到怀疑人生
一次图遍历全出来
接口 / 消息队列 / 事件触发的间接调用
基本搜不到
能追(ASYNC_CALLS、HTTP_CALLS 边)
改这个函数会炸到谁
只能找到直接引用
传递性影响 + 风险分级
哪些函数是死代码
近似估算,漏动态调用
图度数分析,自动排除入口点

对 AI 助手来说差距更直接。grep 模式下它得反复"搜一批文件 → 读几个 → 再搜",绕一大圈;有图谱后一次查询就拿到精准上下文。前面那张基准表里 89% 的工具调用降幅,本质就是省掉了这些来回摸索。

但 grep 也没那么好取代

反过来,有几类活儿图谱干不了,或者根本不划算:

  • 找任意文本。
    配置值、注释、报错字符串、魔法数字、YAML 里的某个 key——这些不是代码符号,图谱压根不索引,只能 grep。
  • 要绝对最新。
    grep 看到的就是文件此刻的内容;图谱靠后台同步,刚改完的那一两秒里,grep 才是 ground truth。
  • 零门槛。
    grep 不用建索引、不占磁盘,任何脚本和 CI 里拿起来就用;图谱得先索引、存一个 SQLite 库、还要配 MCP。
  • 小活儿。
    就找一个字符串、项目百来个文件,grep 端到端比"索引 + 查询"快多了。前面提过 OkHttp 那个小仓库,grep 循环都能跟图谱打得有来有回。

还有个容易被忽略的点:grep 的结果是"所见即所得",匹配到什么就是什么;图谱依赖解析器,碰到宏、代码生成、重度元编程,边可能建不全,类型推断也只是启发式的,不等于编译器那么准。

所以实际用起来是配合着来的:问架构、追调用链、看影响面、清死代码,走图谱;找某个字符串、查配置、翻注释,还是 grep。装上这俩工具后,AI 助手的 grep / read 其实都还留着,该用照用。


写在最后

这两个工具的本质是给 AI 编程助手补上一块"长期记忆"和"全局地图"。它们本身不包含 LLM,只做结构分析——你的 AI 助手负责理解问题和组织答案,图谱负责提供准确的代码结构信息。分工明确,也不额外烧钱。

用了一段时间下来,最直观的感受是:AI 回答代码问题的准确率上去了,Token 账单下来了,等待时间也短了。尤其是大项目,收益非常明显。

项目地址:

codebase-memory-mcp:github.com/DeusData/codebase-memory-mcpCodeGraph:github.com/colbymchenry/codegraph

注:本文由AI辅助生成

往期热门文章:
1、从 kimi-cli 用 TypeScript 重构说起:为什么大家都在拥抱 TypeScript?
2、CodeGraph为什么突然这么火?
3、RocketMQ 已正式接入 AI !
4、GitHub 狂揽 21.7K Star!这个国产开源神器解救你裸奔的网站。
5、给 Codex 换个主题,好像心情也变好了
6、为什么越来越多人使用FastAPI?
7、面试官:Git 如何撤回已 Push 的代码?问倒一大片。。。
8、SpringBoot 不香了,Quarkus 3.37 发布,启动快 50 倍、内存省 70%
9、终于有个非 AI 相关的项目登上 GitHub 热榜,高低得推荐一下。
10、3个完美替代 Navicat 的工具,真香~