往期热门文章: 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/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 次取中位数),挑几个有代表性的列出来:

有意思的是,7 个项目里 AI 的文件读取次数全部降为零——它完全靠图谱回答问题,一个文件都没打开。
不过也要说明,小项目上优势没那么夸张。比如 OkHttp 那个测试,没有 CodeGraph 时 AI 运气好,5 次调用就找到了答案,成本反而还低一点。所以这个工具在大项目上的收益更明显。

移动端混合项目支持
这是 CodeGraph 独有的能力。它能追踪 Swift 和 Objective-C 之间的桥接调用、React Native 的 legacy bridge 和 TurboModules、Expo Modules 的原生模块注册。做 iOS 或者 RN 开发的话,跨语言调用链断了的问题应该都遇到过,这个功能就是干这个的。
放在一起比一比
简单说我的选择逻辑:
项目语言比较杂,或者有微服务架构需要跨服务分析,选 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 就开始吃力了:
对 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 的工具,真香~
夜雨聆风