
上个月有个同事跟我抱怨,他用 Claude Code 帮公司重构了一个老项目,账单出来差点没被组长骂死——一周烧了将近 200 美元。任务不复杂,就是追几个功能的完整调用链。
不是 Claude 变笨了,是它在做一件非常蠢的事:翻文件。
打开一个文件,再打开另一个,找到引用,跳过去,再找……每一次文件读取都在消耗 token。每一个 token 都在花钱。最要命的是,这些 token 没有用来推理,没有用来思考,就是在机械地"找东西"。
CodeGraph 要解决的,就是这件事。
给 AI 一张预先构建好的代码地图,让它不用到处翻。跨 7 个真实开源项目的基准测试显示:平均减少 57% 的 token 消耗,降低 35% 的成本,工具调用次数少 71%。项目目前已积累 32,100 GitHub Stars,MIT 开源。
AI 为什么那么贵?答案出乎意料
先说一个反直觉的结论:大多数时候,AI 编码工具昂贵,不是因为它在思考,而是因为它在探索。
问一个孤立的函数"这段代码有什么问题",AI 很快给出答案。但问它"用户登录请求从 Controller 到数据库的完整流程是什么",画风就变了。
它开始打开文件。找到引用,打开更多文件。搜索符号,再打开几个。一个功能链路追下来,可能读了五六十个文件,耗掉数百万 token,跑了两三分钟。
而这整个过程,AI 其实没有在认真推理你的问题。它只是在找:**"相关的代码在哪里?"**
这就是 CodeGraph 的切入点:与其让 AI 自己摸索着找,不如在它问之前就把答案准备好。
知识图谱 vs 向量搜索:地图和雷达的区别
要理解 CodeGraph 的价值,先得搞清楚 Cursor 这类工具现在在做什么。
Cursor 用的是向量嵌入(vector embeddings)做语义搜索:你的查询被向量化,系统返回"相似度最高"的代码片段。这个方案对探索性问题确实好用——"认证相关的代码在哪里"这种模糊查询,语义搜索能给你一堆有用的线索。
但它有个结构性盲点:它不理解关系。
它不知道 handleAuth() 调用了 validateToken(),validateToken() 又 import 了 jwt_utils。它只知道这三个东西"讲的都是认证"。所以 AI 拿到的是线索——相似度排名的提示,然后还得自己去验证关系,挨个读文件确认调用链。
CodeGraph 走的是完全不同的路:显式调用图。它解析每一个源文件,提取符号(函数、类、方法、接口)和边(调用关系、import、继承、实现),存进本地 SQLite。当 AI 问"什么东西调用了这个函数",CodeGraph 一次 MCP 工具调用就给出确定性的答案——不是线索,是答案。
语义搜索(Cursor) 知识图谱(CodeGraph)─────────────── ────────────────────"这些文件可能相关""这就是调用链"概率性排名 确定性关系AI 收到:线索 AI 收到:答案还需要:逐文件验证 还需要:直接推理技术内核:tree-sitter + SQLite
CodeGraph 的实现方案选择很讲究。
解析引擎用的是 tree-sitter——GitHub 最初为 Atom 编辑器开发,现在是 Neovim 的核心语法引擎。它被选中的原因是两个关键特性:容错性和速度。
tree-sitter 是增量解析的,即使代码有语法错误,也能生成部分 AST。这对实际开发环境至关重要——没有人写代码是一直保持可编译状态的,函数写到一半保存,tree-sitter 照样能处理。
存储层用 SQLite,开启了 FTS5 全文搜索。整个知识图谱就一个文件:.codegraph/codegraph.db。没有后台服务进程,没有网络请求,没有散落在项目里的缓存碎片。
源文件 (.ts/.py/.rs/...) │ ▼ tree-sitter 解析 │ ▼ 抽象语法树 (AST) │ ▼ 语言特定提取查询 ┌────┴────┐ ▼ ▼符号提取 边提取(函数/类) (调用/import) │ │ └────┬────┘ ▼ SQLite + FTS5 (.codegraph/codegraph.db) │ ▼ MCP 工具接口 │ ▼ AI 单次查询 → 完整调用链实测数据:7 个项目,7 种语言
基准测试设计很严格:统一用 Claude Opus 4.7 headless 模式(claude -p),相同的探索任务,唯一变量是有没有开 CodeGraph。每组跑 4 次取中位数。
| 82% | ||||||
几个值得注意的规律:
项目越大,收益越明显。 VS Code 的 TypeScript monorepo(10,000 个文件),单次基准任务的 token 消耗从 280 万降到 60 万;Excalidraw 从 350 万降到 34 万,直接降到零头。大海里找针,有地图的优势才会被放大。
Rust 项目收益最惊人。 Tokio 的成本从 2.41 美元降到 0.42 美元,节省 82%。Rust 的模块系统——mod 声明、use 路径、pub use 重导出、嵌套模块层级——对 agent 的文件遍历极其不友好,CodeGraph 一次查询绕过了这一切。
小项目收益递减。 OkHttp(645 文件)只节省了 13%,Gin(110 文件)节省 34%。在小代码库里,AI 暴力翻文件的代价本来就不高,地图的边际价值自然降低。
这些数字最关键的一点是:两边跑的是同一个模型。Claude Opus 4.7 没有变聪明,也没有变蠢。节省掉的每一个 token,都是在替 AI 消除机械式的文件遍历工作。
竞品格局:本地优先是差异化
代码库智能这个方向,市面上有几个方案,各有取舍。
Gemini Code Assist 能处理超大规模仓库,理解能力不弱。代价是你的代码要上传到 Google 的基础设施。对于有数据主权要求的团队——涉密项目、受监管行业、有 IP 敏感度的商业代码——这是一票否决项。
Sourcegraph 做的是企业级代码搜索,功能强大,但需要服务器部署、索引器配置、基础设施维护。适合需要共享代码情报平台的组织,对个人开发者来说太重。
GitHub Copilot 的代码库索引还在 beta,云端限定,推广缓慢。
CodeGraph 的定位是:本地优先、零配置、结构化图谱。无服务器、无 API 密钥、无网络传输、无数据外泄。这个组合在当前市场上是唯一的。
框架路由识别:API 调试神器
一个容易被低估的功能:CodeGraph 原生识别 14 种 Web 框架的路由模式,覆盖注解式(Spring、NestJS)、装饰器式(Flask、FastAPI)、DSL 式(Rails、Laravel)、文件约定式(Django URLconf、SvelteKit)。
实际意义是什么?你可以直接问支持的 AI 工具:"POST /api/users 这个接口谁在处理?" CodeGraph 给你 handler 函数,穿透中间件链、路由 include、装饰器堆栈。
以前的工作流:找路由配置 → 追到 view → 确认中间件 → 可能还得再往下找。CodeGraph 之后:一次查询。对维护微服务或 API 接口多的团队来说,这个功能单独就值得装一次。
三层自动同步:让索引消失在背景
知识图谱有用的前提是及时更新。CodeGraph 的同步架构分三层:
文件变更 │ ▼Layer 1: OS 原生文件监听(macOS FSEvents / Windows ReadDirectoryChangesW / Linux inotify)无轮询,零 CPU 开销 │ ▼Layer 2: 2秒防抖批处理5个文件同时改 → 合并为1次同步,避免重复重建 │ ▼Layer 3: 过期标记 + 重连对账(size, mtime) 快速比对 + 内容哈希验证标记未同步文件,AI 直接读原文而非旧图谱整个机制的目标是让开发者感知不到索引的存在。没有"跑一下 rebuild"的步骤,没有"我改了代码,记得更新索引"的心智负担。
安装和上手
安装没有前置依赖:
# macOS / Linuxcurl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh# Windows PowerShellirm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex进入项目目录,初始化:
cd your-projectcodegraph init -i-i 触发首次全量图构建。对于 10 万文件以上的超大型项目,首次可能需要 10 分钟以上,但这是一次性成本,之后全部增量同步。
安装器会自动检测你装了哪些 AI 工具(Claude Code、Cursor、Codex CLI、OpenCode、Gemini CLI 等)并自动配置 MCP 集成,不需要手动改配置文件。
支持语言:TypeScript、Python、Rust、Java、Go、Swift、Kotlin、C/C++、C#、Ruby、PHP、Dart,以及 Svelte、Vue 这类模板语言。
macOS 用户注意:先装 Xcode 命令行工具(xcode-select --install),否则会走兼容模式,速度慢 5-10 倍。
说说局限性
几个真实的局限,用之前最好知道。
首次索引时间不可忽略,越大的项目等得越久。语言覆盖深度也不均——TypeScript、Python、Rust、Go 覆盖最成熟,Objective-C 是部分支持,较冷门的语言建议先测效果再决策。
更重要的是:CodeGraph 不替代推理能力。它省的是"找文件"的 token,不是"想问题"的 token。"这个查询为什么慢""给这个系统设计一个缓存层"——这类问题的推理成本跟知识图谱没关系,还是在模型身上。
把它当增强器,不要当替代品。
这件事的意义
过去几年,AI 编码工具的竞争逻辑是模型能力竞赛:谁的 benchmark 更高,谁的代码补全更准,谁的推理更强。这个方向没有错,推动了整个行业。
但随着这些工具深入日常开发,另一个瓶颈浮出水面:一个需要读 50 个文件、烧 300 万 token、跑 2.5 分钟才能回答你一个问题的工具,不管多聪明都不会被随手使用。成本太可见,摩擦感太强。
相反,一个中等智能、有准确地图、10 个文件读完、60 万 token、不到一分钟给答案的工具,会真正融入你的工作流。
这是两条不同的优化路径。不是更聪明,是更高效。
CodeGraph 是在这条路上走得最远的一个开源方案。不管它最终的命运如何,它代表的方向——工程效率而非模型智能——很可能定义 AI 辅助开发的下一个阶段。
你现在在用 Claude Code 还是 Cursor?有没有被意外的 token 账单惊到过?
评论区告诉我你最贵的一次 AI 探索是什么任务——追调用链、找 bug 根源,还是别的什么?票数最多的场景,下期我们专门写一篇针对性的省钱实践 👀
夜雨聆风