惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
IT之家
IT之家
博客园_首页
Last Week in AI
Last Week in AI
博客园 - Franky
罗磊的独立博客
有赞技术团队
有赞技术团队
量子位
小众软件
小众软件
The Cloudflare Blog
博客园 - 聂微东
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Schneier on Security
Schneier on Security
H
Heimdal Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
O
OpenAI News
博客园 - 三生石上(FineUI控件)
A
Arctic Wolf
V
Visual Studio Blog
Attack and Defense Labs
Attack and Defense Labs
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
H
Hacker News: Front Page
Security Latest
Security Latest
大猫的无限游戏
大猫的无限游戏
V2EX - 技术
V2EX - 技术
Hacker News - Newest:
Hacker News - Newest: "LLM"
SecWiki News
SecWiki News
I
Intezer
博客园 - 【当耐特】
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
G
GRAHAM CLULEY
P
Privacy International News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
T
Tor Project blog
V
V2EX
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
S
SegmentFault 最新的问题
宝玉的分享
宝玉的分享

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
CodeGraph:让 AI 编程助手看懂代码库
微信公众号 · 2026-06-18 · via 陈少文的网站

1. CodeGraph 是什么

CodeGraph 是一款本地优先的代码智能工具。它用 tree-sitter 解析代码库,把符号、关系和文件存入本地 SQLite,再通过 MCP、CLI 和 TypeScript API 暴露为可查询的知识图谱。

简单说,它把「在代码里到处 grep、glob、Read」这件事提前做成索引,让 AI 助手用几次查询就能回答结构性问题。

项目已发布到 npm:@colbymchenry/codegraph,支持 Claude Code、Cursor、Codex CLI、opencode、Hermes Agent、Gemini CLI 等主流 AI 编程工具。

2. 为什么需要它

AI 编程助手探索陌生代码库时,大部分时间花在发现上:先找文件,再读文件,再拼出调用关系。这个过程会产生大量 grep / glob / Read 调用,消耗 token,也拖慢响应。

CodeGraph 的思路是:在 agent 提问之前,结构已经建好。符号关系、调用图、继承链、路由绑定等信息都在索引里,查询是亚毫秒级的。

没有 CodeGraph,agent 要自己「扫文件」;有了 CodeGraph,agent 直接「查图谱」。

3. 有/无 CodeGraph 对比

3.1 同一个问题,两条路径

假设你问 agent:「请求是怎么走到数据库的?」

不使用 CodeGraph:

提问 → grep 关键词 → glob 找目录 → Read 多个文件
     → 再 grep 调用关系 → 再 Read → 可能 spawn 子 agent 继续扫
     → 拼出答案(10~20+ 次工具调用,大量 token)

使用 CodeGraph:

提问 → codegraph_explore(一次返回相关符号源码 + 调用路径)
     → 必要时再 codegraph_node 深挖(共 1~4 次调用,通常 0 次 Read)
     → 给出答案
维度不使用 CodeGraph使用 CodeGraph
找符号定义grep 文本,易漏重名、误匹配FTS5 符号搜索,带类型、位置、签名
调用关系多次 grep + Read 手工追踪callers / callees / explore 路径一键展开
影响分析几乎无法系统做impact 计算修改的传播半径
跨文件流程容易在语言/模块边界断链框架路由 + 动态派发合成边桥接
大文件整文件 Read,token 爆炸只返回相关符号片段
数据隐私无额外依赖100% 本地 SQLite,不出机器
首次成本codegraph init 建索引(一次性)

3.2 量化基准

测试方法:Claude Code 无头模式,同一架构问题,有/无 CodeGraph MCP,各跑 4 次取中位数。覆盖 7 个开源仓库、7 种语言,规模从 ~110 文件到 ~10k 文件。

汇总(中位数平均):

指标改善
成本约 16% 更低
Token约 47% 更少
耗时约 22% 更快
工具调用约 58% 更少
文件读取接近 0(无 CodeGraph 时 4~9 次/题)

分仓库对比:

代码库语言 · 规模成本Token耗时工具调用
VS CodeTS · ~10k↓18%↓64%↓11%↓81%
ExcalidrawTS · ~640持平↓25%↓27%↓40%
DjangoPython · ~3k↓8%↓60%↓13%↓77%
TokioRust · ~790持平↓38%↓18%↓57%
OkHttpJava · ~645↓25%↓54%↓31%↓50%
GinGo · ~110↓19%↓23%↓24%↓44%
AlamofireSwift · ~110↓40%↓64%↓33%↓58%

规律很明显:仓库越大、结构性问题越复杂,无 CodeGraph 的 discovery 开销越夸张。

3.3 什么时候不用也行

场景说明
极小项目(几个文件)agent 直接 Read 全文比建索引更快
纯文本搜索找日志字符串、注释、配置项,grep 更合适
非源码文件README、.envyaml 配置,CodeGraph 不索引
编译/类型正确性仍靠编译器、linter、测试
完全动态反射运行时 eval、重度反射,图谱会标注未覆盖
agent 不用 CodeGraph 工具装了但 agent 仍走 grep 路径,变成纯开销

4. 工作原理

CodeGraph 把源码变成可查询图谱,经历四个阶段:

文件 → 提取(tree-sitter AST)→ 存储(SQLite + FTS5)
              ↓
        解析(import、名称匹配、框架模式)
              ↓
        图查询(callers、callees、impact)
              ↓
        上下文构建(面向 AI 的 markdown/JSON)

4.1 提取

tree-sitter 把源码解析成 AST,各语言的提取器从中抽取:

  • 节点(Nodes):函数、类、方法、类型、路由、组件等
  • 边(Edges):调用、导入、继承、实现、引用等

解析在独立 worker 线程中运行。提取结果来自 AST,不是 LLM 摘要,因此可复现、可信赖。

4.2 存储

所有数据写入项目目录下的 .codegraph/codegraph.db,支持 FTS5 全文搜索。优先使用原生 better-sqlite3,不可用时透明回退到 WASM 后端。

4.3 解析

提取之后,还要把「引用」连到「定义」:

  • 函数调用 → 目标定义
  • import → 源文件
  • 类继承、接口实现
  • 框架路由(Django urls.py、Express app.get、Spring @GetMapping 等)

对于静态解析跟不上的动态派发边界(回调、观察者、React setStaterender、JSX 子组件等),CodeGraph 会用合成边桥接,并标注 provenance: 'heuristic',让 agent 知道这条边是如何推断出来的。

4.4 自动同步

MCP 服务启动后,会用操作系统原生文件事件监听项目变更,防抖后增量更新索引。默认无需手动 sync,图谱会随编码保持新鲜。

4.5 图谱能回答什么

问题类型对应能力
X 在哪里定义?符号搜索(FTS5)
谁调用了 Y?callers 遍历
Y 调用了什么?callees / node 源码
改 Z 会影响什么?impact 影响半径
X 怎么走到 Y?explore 中的调用路径
这个 URL 对应哪个 handler?框架路由解析

节点类型包括 filemoduleclassfunctionmethodinterfaceroutecomponent 等 20+ 种;边类型包括 containscallsimportsextendsimplementsreferencesreturns 等。

5. 快速上手

5.1 安装 CLI

无需 Node.js(自带运行时):

1
2
3
4
5
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh

# Windows (PowerShell)
irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex

已有 Node 也可用:

1
npm i -g @colbymchenry/codegraph

安装后新开一个终端,确保 codegraph 命令可用。

5.2 接入 AI 工具

安装器会自动检测已安装的 agent(Claude Code、Cursor、Codex 等),把 CodeGraph MCP 服务写入对应配置。只装 CLI 还不够,这一步是把 CodeGraph 真正连上 agent 的关键。

非交互式安装:

1
codegraph install --yes
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
┌  CodeGraph v1.0.1
◆  Claude Code: Updated ~/.claude.json
◆  Claude Code: Updated ~/.claude/settings.json
◆  Claude Code: Created ~/.claude/CLAUDE.md
◆  Cursor: Updated ~/.cursor/mcp.json
●  Cursor: Restart Cursor for MCP changes to take effect.
◆  Codex CLI: Updated ~/.codex/config.toml
◆  Codex CLI: Created ~/.codex/AGENTS.md
◇  Quick start ───────╮
│                     │
cd your-project    │
│  codegraph init -i  │
│                     │
├─────────────────────╯
codegraph collects anonymous usage stats (no code, paths, or names)"codegraph telemetry off" or CODEGRAPH_TELEMETRY=0 disables. Details: https://github.com/colbymchenry/codegraph/blob/main/TELEMETRY.md
└  Done! Restart your agents to use CodeGraph.

5.3 初始化项目

1
2
cd your-project
codegraph init
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
┌  Initializing CodeGraph
◆  Initialized in /Users/shaowenchen/Code/github/your-project
│  ◆ Scanning files — 249 found
│  ◆ Parsing code — done
│  ◆ Resolving refs — done
◆  Indexed 249 files
●  4,076 nodes, 16,629 edges in 2.1s
└  Done

会在项目下创建 .codegraph/ 并构建完整索引。之后文件变更会自动同步,不用重复 init。

5.4 重启 agent

重启 Cursor / Claude Code 等,让 MCP 配置生效。当项目存在 .codegraph/ 目录时,agent 会自动获得 CodeGraph 工具。

5.5 卸载

1
2
codegraph uninstall          # 从所有 agent 移除 MCP 配置
codegraph uninit             # 删除单个项目的 .codegraph/ 索引

6. MCP 工具说明

CodeGraph 通过 MCP 暴露以下工具:

工具用途
codegraph_explore主力工具,一次返回多个相关符号的源码、调用路径、影响范围
codegraph_search按名称查找符号
codegraph_callers查找所有调用点(含回调注册)
codegraph_callees查找被调用方
codegraph_impact分析修改某符号的影响半径
codegraph_node获取单个符号详情、完整源码、调用链
codegraph_files查看已索引的文件结构
codegraph_status检查索引健康状态

按意图选工具:

  • 「X 是怎么工作的?」「X 怎么走到 Y?」→ codegraph_explore(通常一次就够)
  • 「X 在哪?」→ codegraph_search
  • 「谁调用了这个函数?」「改了会坏什么?」→ codegraph_callers
  • 「这个函数内部调了什么?」→ codegraph_nodeincludeCode: true
  • 读某个源文件 → codegraph_nodefile 路径(等同 Read,还带依赖信息)

7. 使用建议

  1. 结构性问题直接用 CodeGraph,不要再用 grep + Read 重建索引已有的信息
  2. 信任 AST 解析结果,不必用 grep 二次验证
  3. 编辑后注意陈旧提示——若响应开头有 ⚠️ Some files referenced below were edited since the last index sync…,列出的文件需用 Read 确认最新内容
  4. 未索引的项目:CodeGraph 会告知 inactive,需用户自行运行 codegraph init

几个设计原则值得了解:

  • 本地优先:索引存在 .codegraph/ 的 SQLite 里,不需要 API Key,不依赖外部服务
  • 确定性优于猜测:图谱来自 tree-sitter AST,合成边会明确标注为启发式推断
  • 一次调用返回足够上下文codegraph_explore 的设计目标是一次调用就给出答案
  • 框架感知:支持 17+ Web 框架的路由解析(Django、Flask、FastAPI、Express、Spring、Gin、Rails 等)

8. CLI 常用命令

1
2
3
4
5
6
codegraph init          # 初始化并构建索引
codegraph status        # 查看索引状态、待同步文件
codegraph sync          # 手动同步(通常不需要)
codegraph query ...     # 命令行查询
codegraph upgrade       # 检查并升级
codegraph serve --mcp   # 手动启动 MCP 服务(agent 会自动拉起)

9. 小结

CodeGraph 把 AI 编程助手从「在文件海洋里捞针」,变成「直接查询一张预先建好的代码知识图谱」。

  • 对比:无 CodeGraph 时 agent 靠 grep/Read 做发现(10~20+ 次调用);有 CodeGraph 时通常 1~4 次查询、接近零文件读取
  • 原理:tree-sitter 解析 → SQLite 存储 → 引用解析 + 框架感知 → MCP 暴露给 agent
  • 使用:安装 CLI → codegraph install 接入 agent → 项目里 codegraph init → 重启 agent

如果你已经在用 Cursor 或 Claude Code 写代码,花两分钟跑一遍安装流程,就能让 agent 在结构性问题上明显更高效。