AI 写代码时总「迷路」?我把 CodeGraph 用 Rust 重写了一遍
AI 写代码时总「迷路」?我把 CodeGraph 用 Rust 重写了一遍
作为一个Vibe Coding资深用户,我使用了很多AI工具包括而不限于opencode,claude code, codex, trae, kiro等,在编写代码时,每次新建session,让AI理解你的意图和代码仓是一项重复而又繁琐的工作。
每次让它「把这个函数的所有调用方改一下」,它先 grep/rg/Glob 一遍函数名,翻出来几十个匹配,再一个个打开文件确认是不是真的调用——读到第十几个文件,上下文窗口污染不说,有可能还会忘记最初要干嘛,然后漏掉两处、改错一处。
问题在于它找代码的方式太原始。grep 只认字符串:它分不清「这是函数定义」还是「只是一个同名变量」,更给不出「改这里会连带影响哪些地方」。模型只能把一大堆可能相关的文件一股脑读进去自己猜——token 烧了一大把,答案还可能不正确。
我想要的其实很简单:有个东西能一步告诉它「谁调用了 X、X 调用了谁、改 X 会波及哪些符号」,而不是让它 grep 二十次再读十个文件。
colbymchenry/codegraph 这个思路正合我意,但它是 TypeScript 写的、跑在 Node 上,启动开销大,分析速率也比较差,加上我正在做企业内部的AI Agent需要快速的代码分析工具,于是我用 Rust 把它重写了一遍:sunerpy/codegraph-rust。
它到底是个啥
一句话:一个确定性的「代码知识图谱」。
它用 tree-sitter 把整个代码库解析成「符号 + 调用 + 依赖」的关系图,落进一个本地 SQLite(带全文检索),然后通过命令行和 MCP 暴露出来。注意——它内部没有任何大模型,它不替你思考,它只负责把代码的结构关系算清楚、存好、查得飞快。
分工是这样的:
CodeGraph 负责「精确定位」,你的 AI 负责「理解和改」。
模型不再需要靠 grep 大海捞针,它直接问 CodeGraph 要答案——一次拿到相关符号的逐字源码 + 完整调用链。上下文更准,往返更少,token 省一大截。
一个真实的对比
还是上面那个场景——「谁调用了 parse_config」。
没有 CodeGraph 的代理:
grep "parse_config" → 37 处匹配
→ 打开 file1.rs 确认… 打开 file2.rs 确认… (读到第 12 个文件)
有 CodeGraph 的代理:
codegraph callers parse_config
# 直接列出:真正调用它的 5 个符号 + 各自的 file:line
37 个字符串匹配 vs 5 个真实调用方。前者是「文本碰巧出现的地方」,后者是「AST 解析出来的真实调用关系」。这就是「认字符串」和「认结构」的差别。
为什么从 TS 换成这个 Rust 版
Rust 版索引结果和 TS 上游一致(有 golden 预言机逐语言校验、SQLite schema 严格对齐,同一份代码两边产出完全相同的图)——结果不变,变的是体验:
① 快很多。 没有 Node/V8 启动开销,tree-sitter 走 native 绑定,SQLite 直接编进二进制。对一个要反复跑的本地索引工具来说,首次索引更快、增量 sync 更快、内存占用更低。常驻当 MCP server 挂着,几乎感觉不到它的存在。
② 一个文件,零依赖。 不用装 Node、不用 npm install、不用拖一堆 node_modules。下载一个 codegraph 可执行文件丢进 PATH,完事。
③ 真·扔哪都能跑。 SQLite 内联编译(不需要系统 SQLite);Linux 产物静态链接 musl,不依赖 glibc——任意发行版、任意容器基础镜像、CI 里直接跑,不用为环境头疼。
简单说:上游定义了「结果该长什么样」,Rust 版在结果一模一样的前提下,把它做成了一个跑得飞快、装起来无痛的单文件工具。
怎么用:两种方法
姿势一,挂给 AI Agent(推荐)。 标准 MCP 协议,一行命令自动注册进你装的所有代理:
codegraph install --yes
# 自动检测并接入 Claude Code / Cursor / Codex CLI / opencode / Hermes / Gemini CLI / Antigravity / Kiro
# 也可以仅选择对应 Agent 进行自动配置 (-t参数)
接好之后,Agent就多了一套「比 grep 聪明」的工具:
| 工具 | 什么时候用 |
|---|---|
codegraph_explore |
首选——「这块怎么工作」「这条流程」「概览一个模块」,一次返回相关符号源码、按文件分好组 |
codegraph_search |
按名字定位符号(kind + file:line + 签名) |
codegraph_node |
读某个符号/文件的逐字源码 + 它的调用链(一个更聪明的「读文件」) |
codegraph_callers / codegraph_callees |
谁调用它 / 它调用了谁 |
codegraph_impact |
改这个符号,影响半径有多大(传递闭包) |
一句经验之谈:让代理读文件之前先 explore,并且信任它的结果(完整 AST 解析出来的,别再用 grep 复核——那是开倒车)。
姿势二,自己当命令行用。:
codegraph init /path/to/project # 建索引(生成 .codegraph/)
codegraph callers parse_config # 谁调用了它
codegraph impact parse_config # 改它会波及哪些符号
codegraph query "config" # 全文检索
codegraph export # 导出整张图(含 PageRank 中心性,看哪些符号最核心)
一键安装(也可以把github链接丢给AI让它帮你安装)
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/sunerpy/codegraph-rust/main/scripts/install.sh | sh
# Windows(PowerShell)
irm https://raw.githubusercontent.com/sunerpy/codegraph-rust/main/scripts/install.ps1 | iex
# 或者 cargo
cargo install --git https://github.com/sunerpy/codegraph-rust codegraph-rs
支持约 28 种语言(TypeScript、Python、Go、Rust、Java、C/C++、C#、Vue、Svelte……tree-sitter 一套语法管全部,跨文件解析进同一张图)。索引库就在项目本地的 .codegraph/ 目录里,数据和源码都不出本机。
谁会用得上
- 在用 AI 维护 中大型仓库,想要提高编码效率和节省token的;
- 想让Agent减少token消耗、对代码仓库的理解更迅速准确,Agent专心做「改代码」;
- 之前在跑 TS 版的 codegraph,嫌 Node 依赖重、启动慢,想换个单文件、跑得快的;
- 需要可复现、可 diff 的代码结构事实,拿去做 CI、重构影响分析、代码分析的团队。
仓库在这:github.com/sunerpy/codegraph-rust。单二进制、MIT 协议、约 28 种语言,可直接下载预编译二进制文件使用,也可以让AI直接帮你安装配置。觉得有用的话点个 star,有问题欢迎来提 issue。
更多推荐



所有评论(0)