用CodeGraph给AI编码助手装本地知识图谱,省80%Token
昨天GitHub上冒出一个新项目 CodeGraph,一天狂揽近18000星。我第一时间试用了一把,发现它解决了一个所有AI编码助手用户的痛点:每次让AI解释代码结构,它都要重新扫描整个项目,又费Token又慢。
CodeGraph 的思路很简单——提前把代码库的类、函数、依赖关系解析成结构化的知识图谱,让AI直接查,省掉实时工具调用。而且100%本地运行,不用担心代码泄露。
这篇文章我会教你:
- CodeGraph 到底解决了什么问题(以及它不能解决什么)
- 如何安装并生成项目图谱
- 怎么在你的 AI 助手里使用这个图谱(附完整 prompt 模板)
- 不同场景下的变体用法
1. 现在 AI 编码助手最大的坑是什么?
用过 Claude Code 或者 Cursor 的人应该都有体会:你问一个“这个函数在哪里被调用了”,AI 会先跑一个全局搜索,然后读几段代码,再回答。整个流程下来,可能花掉几百 Token,还得等 tool call 完成。
如果你连续问10个这样的问题,Token 和等待时间直接翻倍。更烦的是:同样的上下文模型每次都要重新理解,它记不住你项目的全局结构。
CodeGraph 做的事情就是:把项目的类层级、函数签名、模块依赖关系提前提取出来,存成一个 JSON 文件。AI 在启动时加载这个文件,之后的查询直接从内存中检索,无需再调用搜索工具。
2. 核心原理:预索引 vs 实时解析

| 维度 | 实时解析 | 预索引(CodeGraph) |
|---|---|---|
| Token消耗 | 每次查询重复扫描相关文件 | 只消耗图谱本身的存储Token,后续查询近乎0 |
| 速度 | 慢(需要多轮工具调用) | 快(直接内存检索) |
| 代码变更 | 自动适配最新代码 | 需要重新生成图谱 |
| 隐私 | 依赖云端工具时可能泄露 | 100%本地生成,图谱文件本地使用 |
我的看法:CodeGraph 最适用的是稳定的大型项目——比如你维护一个已经成型的老项目,要频繁给AI做代码审查、找依赖、写测试。如果项目每天在剧烈重构,每次改完都要重新跑一遍生成图谱,反而增加负担。
3. 安装与使用步骤
假设你使用 npm,全局安装:
npm install -g @colbymchenry/codegraph
然后进入你的项目根目录,运行:
codegraph scan --output .codegraph/graph.json
它会在当前目录生成一个 .codegraph 文件夹,里面包含 graph.json。这个 JSON 包含以下信息:
- 所有文件路径及依赖
- 导出的类、函数、枚举、类型接口
- 函数参数和返回类型
- 类之间的继承/实现关系
- 模块之间的 import/require 依赖
实测对一个 5000 文件的中等项目,扫描耗时约 12 秒,生成的 JSON 约 2.3MB。相比模型理解实时扫描,这点一次性成本完全可以接受。
4. 在 Claude Code / Cursor 中使用(附 Prompt 模板)
关键的一步来了:如何让你的 AI 助手知道这个图谱的存在?
方式一:通过环境变量(推荐)
对于 Claude Code,你可以在启动时设置环境变量指向图谱文件:
CODEGRAPH_PATH=`pwd`/.codegraph/graph.json claude
Claude Code 会自动检测并加载该文件,后续在对话中会优先使用图谱查询。
方式二:手动注入 Prompt
如果你用 Cursor 或者其他没有原生支持的 AI 助手,可以这样手动注入:
你是一个资深 TypeScript 开发者。下面是我的项目代码知识图谱(JSON格式),请加载并理解它。之后所有关于代码结构的查询,请直接使用图谱中的信息,不要额外调用搜索工具。
```json
(把 .codegraph/graph.json 的内容贴在这里)
现在开始回答问题:
- UserService 类继承了哪些父类?
- createUser 函数在哪些文件被引用?
```
完整 Prompt 模板(可直接复制)
## 项目知识图谱上下文
我已将项目代码预索引为知识图谱,放在文件 `.codegraph/graph.json` 中。
图谱包含以下信息:
- 每个文件的导入导出
- 类和函数签名(参数、返回类型)
- 继承关系和接口实现
- 跨模块依赖
**使用规则**:
1. 对于代码结构相关问题(“这个函数在哪定义”、“依赖关系是什么”),**优先使用图谱中的数据回答**,不要调用 search/read 工具。
2. 只有当需要理解具体实现逻辑(函数体内部代码)时,才读取实际源码文件。
3. 如果图谱中没有包含某个实体,才使用普通搜索,并告诉我“图谱中未找到,已降级使用实时搜索”。
请确认你已理解图谱内容。
5. 效果演示:差 Prompt vs 好 Prompt
假设我们在一个中型 Node.js 项目里,想知道 AuthMiddleware 在哪些地方被引用。
❌ 差 Prompt(没有图谱)
在项目中搜索 AuthMiddleware 被引用的地方
实际执行:AI 调用 grep 工具扫描所有文件,返回 20 个文件路径。然后它会读前几个文件来确认上下文,每次读文件消耗 200-500 Token。整个操作平均耗时 15s,消耗约 1500 Token。
✅ 好 Prompt(使用 CodeGraph 图谱)
根据项目知识图谱,列出所有引用了 AuthMiddleware 的文件。
执行过程:AI 内部从内存中的 JSON 查找 AuthMiddleware 的引用列表,直接返回文件名和引用行。无需任何工具调用。耗时约 0.5s,消耗约 50 Token(仅输出查询结果)。
对比:
| 指标 | 无图谱 | 有图谱 | 提升 |
|------|--------|--------|------|
| 响应时间 | 15s | 0.5s | 30x |
| Token消耗 | ~1500 | ~50 | 30x |
| 工具调用次数 | 2-5次 | 0次 | 无限倍 |
6. 变体和注意事项
变体 1:增量更新
项目代码更新后,不需要重新扫描全域,你可以只扫描有变化的文件:
codegraph scan --incremental --since 2025-03-01
只重新索引改过的文件,合并到已有图谱中。
变体 2:自定义输出格式
如果你用的 AI 工具不支持直接加载 JSON,可以转换成 Markdown 格式作为 prompt 前缀:
codegraph export --format markdown > .codegraph/overview.md
然后把 overview.md 的内容放在系统提示中。
变体 3:结合 OpenCode / Hermes Agent
这些 Agent 通常也支持工具调用。你可以在 Agent 配置中加入自定义工具:
tools:
- name: codegraph
description: 查询项目代码知识图谱(类、函数、依赖)
exec: codegraph query "$QUERY" --format json
这样 Agent 可以直接调用本地脚本查询图谱,更灵活。
注意事项
- 代码保密性:图谱 JSON 包含文件名和函数名,如果包含敏感业务名称,注意不要上传到公共 AI 平台。建议自建本地模型或使用私有 API。
- 大型项目:超过 10000 个文件的巨型项目,图谱 JSON 可能达到 10MB+,加载到 AI 上下文中有可能超长。你可以通过
--scope src/core只索引核心目录。 - 动态语言:CodeGraph 对 JavaScript/TypeScript 支持最好(基于 AST 解析)。对于 Python/Ruby 等动态语言,由于没有静态类型,依赖关系提取可能有遗漏。使用时注意核对。
写在最后
CodeGraph 不是什么颠覆性技术,它只是把“提前缓存”这个常识用到了 AI 编码助手上。但就这么简单的一步,能让你的日常使用体验明显提升——省 Token 就是省钱,省时间就是提升开发效率。
我建议你今晚就试一下:
- 在你的主力项目上安装并生成图谱
- 按照上面的 prompt 模板配置到 Claude Code 或 Cursor
- 正常问几个代码结构问题,感受一下响应速度的变化
如果效果好,记得设置定时任务每天自动更新图谱(cron job)。
最后提醒:工具只是辅助,理解代码最重要的还是你自己。CodeGraph 让你少做机械工作,多留时间思考架构。