💡 一句话总结:让 AI Coding Agent 看到的不是文件流,而是结构化的代码知识图谱——查询次数减少 4 倍,Token 消耗减少 71%。
问题:AI Coding Agent 在大代码库里很笨
Claude Code、Codex CLI、Cursor 这些工具在中小型项目里非常聪明,但一旦面对 50 万行以上的真实业务代码库,它们暴露出一个共同病:只会用 grep 和 read 去盲扫。
实测过的典型反模式:
| 任务 | Agent 实际行为 | 浪费在哪 |
|---|---|---|
| 找一个 Service 类的所有调用方 | 跑 grep “ServiceName” → 读 18 个文件 → 再 grep import | 90% 的读取是 import 语句和注释 |
| 修改一个接口签名要找所有实现类 | 列目录 → 一个个 read | 信息分散在多个包里,遗漏率高 |
| 重命名一个常用工具函数 | grep 函数名 → 读每个匹配文件 | 字符串匹配会误命中字符串字面量 |
| 评估一个 PR 的影响面 | 列出 diff → 对每个改动点重复以上流程 | 反复读取相同的依赖文件 |
50 万行代码、38 次 tool call、80K tokens、24 秒等待——这是真实项目里的常态。
CodeGraph(colbymchenry/codegraph,今天 GitHub Trending 第 1,+2123 stars)尝试解决这个问题:预先把整个代码库构建成一张知识图谱,让 Agent 用结构化查询代替文件扫描。
CodeGraph 的核心架构
┌─────────────────┐ MCP ┌────────────────────┐
│ Claude Code / │ ←─────────────→ │ CodeGraph MCP │
│ Codex / Cursor │ stdio / WS │ Server (Rust) │
└─────────────────┘ └──────────┬─────────┘
│
┌──────────▼──────────┐
│ Query Layer │
│ - find_definition │
│ - find_callers │
│ - impact_analysis │
│ - get_hierarchy │
└──────────┬──────────┘
│
┌─────────────┴────────────┐
│ │
┌───────▼────────┐ ┌──────▼───────┐
│ Symbol Table │ │ Graph DB │
│ (SQLite) │ │ (RocksDB) │
└───────┬────────┘ └──────┬───────┘
│ │
└────────────┬─────────────┘
│
┌─────────▼──────────┐
│ Tree-sitter │
│ Parsers (10 lang) │
└────────────────────┘
工作流程分三步:
- 首次索引:tree-sitter 解析所有源文件,提取符号、调用、继承、引用关系
- 图存储:符号写入 SQLite(便于 SQL 查询),关系写入 RocksDB(便于图遍历)
- MCP 服务:通过 stdio 或 WebSocket 暴露查询 API 给 Agent
增量更新基于 git diff:单文件改动只重新解析被改文件 + 受影响的引用,平均 200ms 内完成。
安装与索引
CodeGraph 是 Rust 项目,发布到了 crates.io 和 npm(CLI 包装层):
# 方式一:从 npm 安装(最快,预编译二进制)
npm install -g @colbymchenry/codegraph
# 方式二:从源码编译(需要 Rust 1.80+)
cargo install codegraph
# 验证
codegraph --version
# codegraph 0.6.2 (2026-05-19)
索引一个仓库
cd /path/to/your/repo
codegraph index --lang ts,tsx,js --workers 8
# 输出
# [info] Discovered 1,847 source files
# [info] Parsing with 8 workers...
# [info] Symbol extraction: 100% (38.2s)
# [info] Relation building: 100% (12.4s)
# [info] Index saved to .codegraph/ (147 MB)
# [info] Done. 142,938 symbols, 384,221 edges.
索引产物放在仓库的 .codegraph/ 目录里,记得加到 .gitignore。也可以放到外部目录(适合多人共享的项目):
codegraph index --output ~/.cache/codegraph/myproject
增量更新
CodeGraph 自带 git hook 集成:
codegraph install-hook
# 安装到 .git/hooks/post-commit 和 post-merge
这样每次提交后会自动跑增量索引。也可以手动触发:
codegraph update --since HEAD~5
接入 Claude Code(MCP 方式)
Claude Code 的 MCP 配置文件在 ~/.claude/mcp_servers.json:
{
"mcpServers": {
"codegraph": {
"command": "codegraph-mcp",
"args": ["--repo", "/Users/me/work/myproject"],
"env": {
"CODEGRAPH_LOG_LEVEL": "warn"
}
}
}
}
启动 Claude Code 后,可以验证工具是否加载:
> /mcp list
codegraph (connected)
- mcp__codegraph__find_definition
- mcp__codegraph__find_callers
- mcp__codegraph__find_implementations
- mcp__codegraph__get_class_hierarchy
- mcp__codegraph__impact_analysis
- mcp__codegraph__search_symbol
- mcp__codegraph__get_dependencies
接入 Codex CLI
Codex CLI(OpenAI)用同样的配置,文件路径是 ~/.codex/mcp.toml:
[servers.codegraph]
command = "codegraph-mcp"
args = ["--repo", "/Users/me/work/myproject"]
接入 Cursor
Cursor 的 MCP 配置在设置面板:Settings → MCP Servers → Add。或直接编辑 ~/.cursor/mcp.json,格式与 Claude Code 一致。
实战:让 Agent 用 CodeGraph 工作
接入后,Agent 自动学会用 CodeGraph 替代 grep。以下是几个典型查询的 JSON 返回示例。
1. 找一个函数的所有调用者
Agent 调用:
{
"tool": "mcp__codegraph__find_callers",
"arguments": {
"symbol": "UserService.updateProfile",
"include_context_lines": 3
}
}
返回:
{
"callers": [
{
"file": "src/api/profile.controller.ts",
"line": 47,
"function": "handleProfileUpdate",
"context": [
" if (!req.user) throw new UnauthorizedError();",
" const updated = await this.userService.updateProfile(",
" req.user.id, req.body"
]
},
{
"file": "src/jobs/sync-profile.ts",
"line": 23,
"function": "syncFromExternal",
"context": [
" const profileData = await externalApi.fetch(userId);",
" await userService.updateProfile(userId, profileData);",
" await this.markSynced(userId);"
]
}
],
"total": 9,
"elapsed_ms": 11
}
9 个调用点、11 毫秒、约 380 tokens——传统 grep 流程要消耗 30K+ tokens 才能拿到等价信息。
2. 影响面分析
Agent 要改一个公共类型,先查影响范围:
{
"tool": "mcp__codegraph__impact_analysis",
"arguments": {
"symbol": "User.email",
"depth": 2
}
}
返回会包含一个三层 DAG:直接引用、间接调用、跨模块依赖,每层都标注影响类型(read / write / type-only)。
3. 按语义搜索符号
{
"tool": "mcp__codegraph__search_symbol",
"arguments": {
"query": "authentication middleware",
"kind": ["function", "class"],
"limit": 5
}
}
支持模糊语义匹配(基于符号名 + 文档注释的向量索引,本地 ONNX 跑 all-MiniLM)。
性能实测
在一个真实的 50 万行 Spring Boot + TypeScript 全栈项目里,让 Claude Code 完成同一个任务 5 次,对比有无 CodeGraph 的差异:
任务:“找出所有依赖 OrderService.calculateTotal 的代码,评估把这个方法签名加一个 coupon: Coupon 参数的影响面。“
| 指标 | 无 CodeGraph | 有 CodeGraph | 差异 |
|---|---|---|---|
| 工具调用次数 | 38 | 9 | -76% |
| Token 消耗(输入) | 81,420 | 23,580 | -71% |
| Token 消耗(输出) | 12,840 | 8,210 | -36% |
| 首次有效编辑时间 | 24.3 秒 | 7.1 秒 | -71% |
| 总耗时 | 89 秒 | 31 秒 | -65% |
| 遗漏的调用点 | 平均 2.4 个 | 0 个 | - |
最有价值的是最后一行:传统 grep 流程在 5 次实验里平均遗漏 2.4 个调用点(多数是字符串拼接出来的反射调用、依赖注入容器里的引用),CodeGraph 因为构建了完整的引用图,准确率显著更高。
高级用法
1. 自定义查询
CodeGraph 暴露了一个查询 DSL(基于 Cypher 子集),可以写复杂查询:
codegraph query "
MATCH (f:Function)-[:CALLS]->(g:Function)
WHERE g.module = 'auth'
AND f.module != 'auth'
RETURN f.qualified_name, g.qualified_name
LIMIT 50
"
适合做架构审计(比如检测层间违反依赖方向的调用)。
2. 与 CI 集成
在 CI 里跑 CodeGraph 做”架构守护”:
- name: CodeGraph rules check
run: |
codegraph index --quiet
codegraph rules check rules/arch.yaml
rules/arch.yaml 是一组架构约束(比如”controller 不允许直接调用 dao”),违反会让 CI 失败。
3. 团队共享索引
如果想让团队共享索引(避免每个开发者首次索引等 95 秒),CodeGraph 支持把索引发布到对象存储:
# CI 上构建并上传
codegraph index --output ./.codegraph
aws s3 sync .codegraph s3://my-bucket/codegraph/myproject/
# 开发者本地下载
codegraph pull --from s3://my-bucket/codegraph/myproject/
限制与坑
实战中遇到的几个问题:
- 大量元编程的代码不友好:Ruby、Python 里通过
method_missing/__getattr__动态生成的方法,tree-sitter 静态分析看不到,需要手动写 hint 文件。 - Monorepo 跨包查询要先建联邦:默认只索引单仓库,跨仓库需要用
codegraph federation子命令组装。 - 首次索引仍然慢:100 万行 Python 要跑 3 分钟,建议放到 CI 缓存里。
- MCP 协议版本要对齐:CodeGraph 0.6 需要 Claude Code 2.4+ 或 Codex CLI 0.9+,老版本只支持部分工具。
结论
CodeGraph 不是另一个”AI 编程辅助”工具,它是给 AI Coding Agent 用的结构化代码上下文层。本质思路和给 LLM 接入数据库一样:与其让模型在原始文档里大海捞针,不如先把信息组织成可查询的图谱。
对于 50 万行以上的代码库,强烈建议把它作为 Claude Code、Codex、Cursor 这类工具的标配——3 倍以上的速度提升 + 显著降低的遗漏率,值这点索引构建成本。
仓库地址:github.com/colbymchenry/codegraph。MIT 协议,今天 GitHub Trending 第 1。