CodeGraph 使用教程:专为代码库打造的知识图谱

CodeGraph 使用教程:专为代码库打造的知识图谱

一、项目简介

CodeGraph 是一个本地优先的代码智能工具,专为 AI 编程助手设计。它的核心思想是:

与其让 AI 代理每次都用 grep/glob/Read 重新扫描文件,不如预先建好一张代码知识图谱,让代理直接查图作答。

github地址https://github.com/colbymchenry/codegraph

工作原理

  1. tree-sitter 解析代码生成 AST
  2. 提取所有符号(函数、类、方法、类型)和边(调用关系、导入、继承)
  3. 存入本地 SQLite 数据库(支持 FTS5 全文检索)
  4. 通过 MCP 协议、CLI 或 TypeScript 库暴露给 AI 代理

实测性能提升(7 个真实开源项目,每组 4 次运行取中位数)

项目 语言 成本 Token 用量 时间 工具调用次数
VS Code TypeScript ~1 万文件 省 26% 少 63% 快 20% 少 69%
Excalidraw TypeScript ~640 文件 省 40% 少 71% 快 41% 少 82%
Django Python ~3000 文件 多 10% 少 45% 慢 3% 少 64%
Tokio Rust ~790 文件 省 30% 少 69% 快 22% 少 71%
OkHttp Java ~645 文件 多 3% 少 32% 快 15% 少 60%
Gin Go ~110 文件 省 7% 少 35% 快 8% 少 38%
Alamofire Swift ~110 文件 省 38% 少 45% 快 6% 少 8%

平均:省 18% 成本 · 少 51% Token · 快 16% · 少 57% 工具调用

核心特点

  • 100% 本地运行 --- 数据不离机,无需 API Key,无外部服务
  • 零配置 --- 按文件扩展名自动识别语言
  • 20+ 种编程语言 --- TS/JS/Python/Go/Rust/Java/C#/PHP/Ruby/C/C++/Swift/Kotlin 等
  • 14 种 Web 框架路由识别 --- Express/Django/Spring/Laravel/Gin 等
  • 自动同步 --- 原生 OS 文件监听(FSEvents/inotify/ReadDirectoryChangesW),编辑后 2 秒内更新

二、安装方式

方式一:直接下载(无需 Node.js)

bash 复制代码
# 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.js 运行时,不需要提前安装 Node.js,在 Windows/macOS/Linux 的 x64 和 ARM64 架构上均可运行。

方式二:npm 安装(已有 Node.js)

bash 复制代码
# 全局安装
npm install -g @colbymchenry/codegraph

MCP添加到 ~/.claude.json(Claude Code):

json 复制代码
{
  "mcpServers": {
    "codegraph": {
      "type": "stdio",
      "command": "codegraph",
      "args": ["serve", "--mcp"]
    }
  }
}

添加自动允许权限到 ~/.claude/settings.json(可选):

json 复制代码
{
  "permissions": {
    "allow": [
      "mcp__codegraph__codegraph_search",
      "mcp__codegraph__codegraph_context",
      "mcp__codegraph__codegraph_callers",
      "mcp__codegraph__codegraph_callees",
      "mcp__codegraph__codegraph_impact",
      "mcp__codegraph__codegraph_node",
      "mcp__codegraph__codegraph_status",
      "mcp__codegraph__codegraph_files"
    ]
  }
}

方式三:安装器一键安装

bash 复制代码
npx @colbymchenry/codegraph

安装器会自动:

  • 检测你已安装的 AI 代理(Claude Code、Cursor、Codex CLI、opencode、Hermes Agent、Gemini CLI、Antigravity IDE、Kiro)
  • 询问是否把 codegraph 添加到 PATH
  • 询问是全局配置(所有项目)还是本地配置(当前项目)
  • 写入各代理的 MCP 服务器配置
  • 如果选 Claude Code,自动配置权限白名单

非交互模式(适合 CI/脚本):

bash 复制代码
codegraph install --yes                              # 自动检测代理,全局安装
codegraph install --target=cursor,claude --yes       # 指定代理
codegraph install --target=auto --location=local     # 本地安装
codegraph install --print-config codex               # 只打印配置片段,不写文件
参数 可选值 默认
--target autoallnone 或逗号分隔列表 交互提示
--location globallocal 交互提示
--yes 布尔值 每步提示
--no-permissions 布尔值,跳过 Claude 自动白名单 开启

安装完之后要重启 AI 代理(Claude Code / Cursor / Codex CLI 等),让其加载 MCP 服务器。


三、快速开始

初始化项目(构建)

安装完之后打开自己的项目目录,使用一行命令搞定项目初始化。

bash 复制代码
cd your-project
codegraph init -i

init 创建 .codegraph/ 目录;-i--index)同时构建初始索引。全局安装后只需在每个项目执行一次,无需重复安装 MCP 配置。

完成后,只要项目存在 .codegraph/ 目录,AI 代理就会自动使用 CodeGraph 工具。

接下来打开ClaudeCode直接对话即可使用CodeGraph分析项目,示例如下:

卸载方法

bash 复制代码
codegraph uninstall          # 从所有已配置代理中移除
codegraph uninit             # 移除当前项目的索引(保留代理配置)

四、核心概念

数据流水线

复制代码
源文件 → tree-sitter 解析(提取节点/边)
            ↓
      引用解析(导入关系、名称匹配、框架模式)
            ↓
      图查询(调用者、被调用者、影响范围)
            ↓
      上下文构建(Markdown/JSON 输出给 AI)

知识图谱结构

节点类型(NodeKind): filemoduleclassstructinterfacetraitprotocolfunctionmethodpropertyfieldvariableconstantenumenum_membertype_aliasnamespaceparameterimportexportroutecomponent

边类型(EdgeKind): contains(包含)、calls(调用)、imports(导入)、exports(导出)、extends(继承)、implements(实现)、references(引用)、type_of(类型关系)、returns(返回)、instantiates(实例化)、overrides(重写)、decorates(装饰)

动态调度桥接

静态 tree-sitter 解析无法追踪动态调用,CodeGraph 通过合成器(Synthesizer)桥接这些边界:

  • 回调/观察者模式
  • EventEmitter 事件
  • React setStaterender(React 重渲染)
  • JSX 子组件(render → 子组件)
  • Django ORM 描述符

所有合成边带有 provenance: 'heuristic' 标记及 metadata.synthesizedBy 字段,AI 可以清晰识别。


五、CLI 命令参考

基础命令

bash 复制代码
codegraph                         # 运行交互式安装器
codegraph install                 # 运行安装器(显式)
codegraph uninstall               # 从代理中移除 CodeGraph

项目管理

bash 复制代码
# 初始化项目
codegraph init [path]             # 初始化(--index 或 -i 同时建索引)
codegraph uninit [path]           # 移除项目索引(--force 跳过确认)

# 建立/更新索引
codegraph index [path]            # 全量索引(--force 强制重建,--quiet 减少输出)
codegraph sync [path]             # 增量更新(只处理变更的文件)

# 查看状态
codegraph status [path]           # 显示节点/边/文件数量和 SQLite 后端信息

查询命令

bash 复制代码
# 搜索符号
codegraph query <search>          # 搜索符号(--kind 过滤类型,--limit 限制数量,--json 输出 JSON)

# 示例:
codegraph query UserService --kind class --limit 10
codegraph query handleRequest --json
bash 复制代码
# 调用关系
codegraph callers <symbol>        # 查找调用该函数的位置(--limit,--json)
codegraph callees <symbol>        # 查找该函数调用了什么(--limit,--json)
codegraph impact <symbol>         # 分析修改该符号会影响哪些代码(--depth,--json)
bash 复制代码
# 文件结构
codegraph files [path]            # 显示文件结构(--format,--filter,--max-depth,--json)

# 上下文构建
codegraph context <task>          # 为 AI 构建上下文(--format,--max-nodes)

codegraph affected --- CI 利器

根据变更文件,追踪依赖关系,找出受影响的测试文件:

bash 复制代码
codegraph affected src/utils.ts src/api.ts          # 直接传文件名
git diff --name-only | codegraph affected --stdin   # 从 git diff 管道输入
codegraph affected src/auth.ts --filter "e2e/*"     # 自定义测试文件 glob
参数 说明 默认值
--stdin 从标准输入读取文件列表 false
-d, --depth <n> 最大依赖追踪深度 5
-f, --filter <glob> 自定义测试文件 glob 自动检测
-j, --json 输出 JSON false
-q, --quiet 只输出文件路径 false

CI 脚本示例:

bash 复制代码
#!/usr/bin/env bash
AFFECTED=$(git diff --name-only HEAD | codegraph affected --stdin --quiet)
if [ -n "$AFFECTED" ]; then
  npx vitest run $AFFECTED
fi

启动 MCP 服务器

bash 复制代码
codegraph serve --mcp

一般由 AI 代理自动启动,无需手动执行。


六、MCP 工具详解

当 CodeGraph 作为 MCP 服务器运行时,向 AI 代理暴露以下 10 个工具:

按名称在整个代码库搜索符号,支持全文检索(FTS5)。

使用场景: 当你知道函数/类的名字但不知道在哪个文件时。

codegraph_context --- 上下文构建(建议SubAgent中调用)

基于任务描述构建相关代码上下文,内部组合了 search + node + callers + callees,一次调用完成。

使用场景: 让 AI 理解某个功能区域的全貌。

codegraph_trace --- 调用链追踪

追踪两个符号之间的调用路径("X 是如何到达 Y 的"),每一跳都内联显示函数体,能跨越动态调度边界(回调、React 重渲染、接口实现)------这是 grep 无法做到的。

使用场景: 理解代码流程,例如"请求是如何到达数据库的"。

复制代码
示例流程(Excalidraw):
mutateElement → triggerUpdate → [callback] triggerRender
  → [react-render] render → [jsx] StaticCanvas → renderStaticScene

codegraph_callers --- 调用者查询

查找哪些地方调用了某个函数。

使用场景: 修改函数前,了解所有调用方以评估影响。

codegraph_callees --- 被调用者查询

查找某个函数调用了哪些函数。

使用场景: 理解函数的依赖关系。

codegraph_impact --- 影响分析

分析修改某个符号后,会影响哪些代码(BFS 广度优先搜索)。

使用场景: 重构前的安全评估,避免意外破坏其他功能。

codegraph_node --- 符号详情

获取某个特定符号的详细信息,可选择附带源代码。

使用场景: 查看函数签名、文档或源码。

codegraph_explore --- 多符号探索(建议SubAgent中调用)

一次调用返回多个相关符号的源码(按文件分组)以及它们之间的关系图。

使用场景: 当需要同时理解多个相关符号时,避免多次单独调用。

codegraph_files --- 文件结构

获取已索引的文件结构(比文件系统扫描快得多)。

使用场景: 快速了解项目文件布局。

codegraph_status --- 索引状态

查看索引健康状况和统计数据,包括待同步文件列表。

使用场景: 确认索引是否是最新的。


工具选用指南

AI 代理会根据任务自动选择工具,以下是选择逻辑:

任务类型 推荐工具
搜索某个类/函数的位置 codegraph_search
了解某个功能区域 codegraph_context
追踪代码执行流程(X 如何到达 Y) codegraph_trace
查找谁调用了某个函数 codegraph_callers
查找某函数调用了什么 codegraph_callees
修改前评估影响范围 codegraph_impact
查看单个符号的详情/源码 codegraph_node
同时查看多个相关符号 codegraph_explore
了解文件结构 codegraph_files
确认索引状态 codegraph_status

七、支持的编程语言

语言支持完全自动,根据文件扩展名识别,无需任何配置

语言 文件扩展名 支持状态
TypeScript .ts, .tsx 完整支持
JavaScript .js, .jsx, .mjs 完整支持
Python .py 完整支持
Go .go 完整支持
Rust .rs 完整支持
Java .java 完整支持
C# .cs 完整支持
PHP .php 完整支持
Ruby .rb 完整支持
C .c, .h 完整支持
C++ .cpp, .hpp, .cc 完整支持
Objective-C .m, .mm, .h 部分支持(类、协议、方法、属性、导入;.mm 可能解析不完整)
Swift .swift 完整支持
Kotlin .kt, .kts 完整支持
Scala .scala, .sc 完整支持(含 Scala 3 枚举)
Dart .dart 完整支持
Svelte .svelte 完整支持(含 Svelte 5 runes,SvelteKit 路由)
Vue .vue 完整支持(含 <script setup>,Nuxt 路由/API/中间件)
Liquid .liquid 完整支持
Pascal / Delphi .pas, .dpr, .dpk, .lpr 完整支持(含 DFM/FMX 表单文件)
Lua .lua 完整支持(函数、方法、局部变量、require 导入)
Luau .luau 完整支持(含类型别名、Roblox instance-path require

八、框架路由识别

CodeGraph 能识别 Web 框架的路由文件,并将 URL 模式与处理函数关联。查询控制器的调用者时,可以看到绑定它的 URL 路由。

框架 识别的路由形式
Django path()re_path()url()include()(CBV .as_view()、虚线路径)
Flask @app.route('/path', methods=[...]),Blueprint 路由
FastAPI @app.get(...)@router.post(...) 等所有标准方法
Express app.get(...)router.post(...) 含中间件链
NestJS @Controller + @Get/@Post/...、GraphQL @Resolver@MessagePattern@SubscribeMessage
Laravel Route::get()Route::resource()Controller@action、元组语法
Drupal *.routing.ymlhook_* 实现
Rails get '/x', to: 'users#index'=> 语法
Spring @GetMapping@PostMapping@RequestMapping
Gin / chi / gorilla mux r.GET(...)router.HandleFunc(...)
Axum / actix / Rocket .route("/x", get(handler))
ASP.NET [HttpGet("/x")] 属性
Vapor app.get("x", use: handler)
React Router / SvelteKit 路由组件节点

九、iOS/React Native 混合开发支持

真实的 iOS 和 React Native 项目往往跨越多种语言,静态解析在每个语言边界处断裂。CodeGraph 通过桥接合成器跨语言连接这些调用链。

边界类型 JS/Swift 侧 原生侧 桥接方式
Swift → ObjC Swift obj.foo(bar:) ObjC 选择子 -fooWithBar: @objc 自动桥接规则(含 Cocoa 介词前缀)
ObjC → Swift ObjC [obj fooWithBar:] Swift @objc func foo(bar:) 反向桥接名称候选
RN Legacy Bridge JS NativeModules.X.fn(...) ObjC RCT_EXPORT_METHOD / Java @ReactMethod 解析宏/注解,构建 JS 名称 → 原生方法映射
RN TurboModules JS import M from './NativeM' 原生实现匹配 Codegen Spec Native<X>.ts Spec 接口为基准
RN 原生 → JS 事件 JS NativeEventEmitter.addListener('e', cb) ObjC/Swift/Java sendEvent("e", ...) 以字面量事件名为键的跨语言事件通道
Expo Modules JS requireNativeModule('X').fn(...) Swift/Kotlin Module { Name("X"); ... } 解析 Expo DSL 字面量
Fabric View Components JSX <MyView /> TS Codegen Spec + 原生实现类 Spec → component 节点,基于约定的名称+后缀查找
Paper Legacy View Managers JSX <MyView /> ObjC RCT_EXPORT_VIEW_PROPERTY 同 Fabric,Paper 声明同样生成节点

所有合成边带有 provenance: 'heuristic' 标记,metadata.synthesizedBy 字段指明桥接类型(如 swift-objc-bridgern-event-channel)。


十、自动同步机制

CodeGraph 提供三层自动同步,确保 AI 代理永远不会读取到过期数据:

第一层:文件监听 + 防抖自动同步

codegraph serve --mcp 启动时会开启原生文件监听:

  • macOS → FSEvents
  • Linux → inotify
  • Windows → ReadDirectoryChangesW

每次源文件创建/修改/删除后,经过 2000ms 防抖窗口合并批量操作,自动触发增量同步。

复制代码
代理修改 src/Widget.ts
  → 监听器触发(通常 <100ms)
  → 2000ms 防抖等待
  → 同步运行,Widget.ts 的节点和边进入索引
  → 下一次代理查询即可看到更新

调整防抖时间:

bash 复制代码
CODEGRAPH_WATCH_DEBOUNCE_MS=5000   # 设为 5 秒,适合批量写入场景

范围限制:[100ms, 60s]

第二层:文件过期提示横幅

在 2 秒防抖窗口内,如果 MCP 工具响应引用了还未重新索引的文件,响应头部会显示警告:

复制代码
⚠️ 以下文件在上次索引后被修改,codegraph 的相关记录可能已过期:
  - src/Widget.ts(800ms 前修改,待同步)
请直接 Read 这些文件以获取最新内容。
以下其余内容是最新的。

AI 代理会读取这个提示并直接 Read 对应文件,避免静默地使用过期数据。

第三层:连接时追赶同步

每次 MCP 服务器(重新)连接时,CodeGraph 先做一次快速文件系统对比(size + mtime 预筛,再做内容哈希),将未在上次会话中同步的变更全部吸收,再响应第一个查询。

手动同步的适用场景

极少数情况下才需要手动运行 codegraph sync

  • 运行在沙箱环境,文件监听被禁用
  • 设置了 CODEGRAPH_NO_DAEMON=1
  • CI 脚本中,需要在脚本开始前确保索引是最新的

十一、作为库使用

CodeGraph 可作为 TypeScript/JavaScript 库集成到你自己的工具中:

typescript 复制代码
import CodeGraph from '@colbymchenry/codegraph';

// 初始化(新项目)或打开(已有索引)
const cg = await CodeGraph.init('/path/to/project');
// 或
const cg = await CodeGraph.open('/path/to/project');

// 全量索引
await cg.indexAll({
  onProgress: (p) => console.log(`${p.phase}: ${p.current}/${p.total}`)
});

// 搜索符号
const results = cg.searchNodes('UserService');

// 查找调用者
const callers = cg.getCallers(results[0].node.id);

// 构建 AI 上下文
const context = await cg.buildContext('修复登录 Bug', {
  maxNodes: 20,
  includeCode: true,
  format: 'markdown'
});

// 影响分析
const impact = cg.getImpactRadius(results[0].node.id, 2);

// 文件监听
cg.watch();   // 开启自动同步
cg.unwatch(); // 停止监听

// 关闭连接
cg.close();

十二、配置说明

CodeGraph 是零配置工具 --- 无需任何配置文件,按文件扩展名自动识别语言。

默认排除的目录

以下目录开箱即用自动跳过(即使不在 .gitignore 中):

  • Node.jsnode_modulesdistbuild.next
  • Python.venv__pycache__
  • Rusttarget
  • iOS/macOSPods.build
  • PHPvendor

自定义排除

把你不想索引的目录加入 .gitignore

gitignore 复制代码
/logs/
/tmp/

强制包含被排除的目录

.gitignore 中使用否定规则:

gitignore 复制代码
!vendor/my-local-lib/   # 把 vendor 下的某个本地库纳入索引

文件大小限制

超过 1MB 的文件会自动跳过(生成的 bundle、压缩的 JS、vendor 文件)。

数据存储位置

每个项目的数据存储在项目根目录的 .codegraph/codegraph.db(SQLite 数据库)。数据不会离开你的机器。


十三、故障排除

"CodeGraph not initialized" 错误

原因: 项目未初始化。

解决:

bash 复制代码
cd your-project
codegraph init -i

索引速度很慢

原因: 大型目录(如 node_modules)未被排除。

解决:

  1. 确认 node_modules 等目录在 .gitignore
  2. 使用 --quiet 参数减少输出开销
  3. 运行 codegraph status 查看已索引的文件数量

MCP 报 database is locked

原因: 通常是旧版本(< 0.9)安装的问题。

解决:

bash 复制代码
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh

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

# 或通过 npm
npm i -g @colbymchenry/codegraph@latest

如果 codegraph status 显示 Journal: 不是 wal,说明当前文件系统不支持 WAL 模式(常见于网络共享目录和 WSL2 /mnt 路径)。把项目(含 .codegraph/ 目录)移到本地磁盘。


MCP 服务器无法连接

排查步骤:

  1. 确认项目已初始化:codegraph status
  2. 验证 MCP 配置文件中的路径
  3. 命令行测试:codegraph serve --mcp(看是否能正常启动)

符号缺失 / 找不到函数

可能原因及解决:

  1. 文件刚保存,还在等待同步 --- 等 2 秒后重试,或执行 codegraph sync
  2. 文件语言不支持 --- 查看支持语言表格
  3. 文件被 .gitignore 排除 --- 检查 .gitignore 规则
  4. 文件在默认排除目录中 --- 如 node_modulesdistvendor

查看当前索引状态

bash 复制代码
# CLI 方式
codegraph status

# 在 AI 代理会话中(MCP 工具 codegraph_status 输出示例):
## CodeGraph Status
节点数:9,289 | 边数:47,832 | 文件数:643
SQLite 后端:native (better-sqlite3)
Journal: wal

### Pending sync:
- src/Widget.ts(1200ms 前修改)

如果没有 ### Pending sync: 部分,说明索引是最新的。


附录:支持的 AI 代理

代理 安装器支持
Claude Code 含自动权限白名单
Cursor 含工作目录修复
Codex CLI TOML 配置格式
opencode JSONC 格式,保留用户注释
Hermes Agent 支持
Gemini CLI 支持
Antigravity IDE 支持
Kiro 支持

本文档基于 CodeGraph 仓库代码及官方文档整理,当前版本参考 v0.9.7(2026-05-28)。


  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创 🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

资料白嫖,技术互助

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Unity系统学习专栏 入门级 本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 进阶级 计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 难度偏高 分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区 互助/吹水 数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能 Unity查漏补缺 针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺
相关推荐
DataX_ruby821 小时前
2026年数据中台平台成熟度排名
大数据·人工智能·数据治理·数据中台
AI科技星1 小时前
数术工坊:投影秘籍
人工智能·线性代数·架构·概率论·学习方法
qcx231 小时前
【AI daily 2026-06-10】RAG 2026 已进入“Agentic RAG“时代
人工智能·ai·llm·agent·agi
学Linux的语莫1 小时前
DeepAgents Skills :掌握 Agent 的可复用专业能力
ai·skill·deepagent
十六年开源服务商1 小时前
2026数字艺术展示网站策划全攻略
大数据·人工智能
有Li1 小时前
HOI-Brain:从fMRI中准确提取带符号高阶交互用于脑疾病诊断的多通道
论文阅读·人工智能·交互·文献·医学生
RSTJ_16251 小时前
PYTHON+AI LLM DAY SEVENTY-TWO
人工智能
weixin_422329311 小时前
企业级 RAG 系统实战详解
ai·rag
Stick_ZYZ1 小时前
A2A:让 Agent 从单兵作战走向团队协作
java·开发语言·网络·人工智能·python·ai