CodeGraph:让 AI Agent 真正读懂你的代码

9 阅读8分钟

代码知识图谱引擎——把代码变成可查询、可追踪、可推理的结构化图谱

GitHubgithub.com/colbymchenr… 文档站colbymchenry.github.io/codegraph/ npmwww.npmjs.com/package/@co…


为什么需要 CodeGraph?

你一定经历过这些场景:

  • 重构前不敢动手——改一个函数,不知道下游有多少调用方,只能全局搜索字符串碰运气
  • AI Agent 瞎改代码——给 AI 一段源码,它不知道上下游依赖,改完引入一堆隐式 bug
  • grep / ripgrep 只能搜文本,搜不到"谁调用了这个接口的实现类"
  • IDE 的"查找引用"在跨框架(如 React Native Bridge)时彻底失效

CodeGraph 做的事情很简单:把你的代码解析成一棵知识图谱——函数、类、路由、组件都是节点,调用关系、导入依赖都是边。然后你就可以像查数据库一样查询代码。

它不是一个静态分析工具,而是一个为 AI Agent 设计的代码智能层

  • 20+ 语言自动识别,零配置
  • 框架感知:识别 14+ Web 框架的路由,链接 URL 到 Handler
  • 跨语言桥接:Swift↔ObjC、React Native Bridge、TurboModules 都能追踪
  • 100% 本地运行,SQLite 存储,无数据外泄

一句话总结grep 搜文本,IDE 跳定义,CodeGraph 追踪关系


5 分钟快速上手

安装

# npm 全局安装(需要 Node.js)
npm i -g @colbymchenry/codegraph

# 或零安装运行
npx @colbymchenry/codegraph

# macOS / Linux(无需 Node.js,自带运行时)
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh

# Windows PowerShell(无需 Node.js,自带运行时)
irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex

CodeGraph bundles its own Node runtime——无需编译、无需本地 Node.js,开箱即用。

初始化 + 索引

# 一步完成(推荐)
codegraph init -i

# 或分步执行
codegraph init          # 初始化(生成 .codegraph/ 目录)
codegraph index         # 全量索引

跑完这两步,你的代码已经是图谱了。试试:

codegraph query UserService          # 搜符号
codegraph callers createUser         # 查谁调用了它
codegraph impact TokenService        # 改它会影响谁

零配置——node_modules、dist、build、.gitignore 规则全部自动排除,无需手动设置。


核心概念:节点、边、图谱

理解 CodeGraph 只需三个概念:

概念说明示例
节点代码中的符号function createUserclass UserServiceroute GET /api/users
符号间的关系createUser 调用了 hashPasswordUserService 导入了 Database
图谱节点 + 边的集合存储在 .codegraph/codegraph.db(SQLite)

节点类型

类型说明
function独立函数
method类方法
class
interface接口
componentVue/React 组件
route框架路由
variable / constant变量与常量
import导入依赖
field类字段
type_alias类型别名
enum / enum_member枚举及成员

支持语言(20+)

TypeScript、JavaScript、Python、Go、Rust、Java、C#、PHP、Ruby、C/C++、Swift、Kotlin、Scala、Dart、Svelte、Vue、Lua/Luau、Liquid、Pascal/Delphi、Objective-C(部分)——基本覆盖主流语言。


实战场景

场景一:安全重构——改代码前先看影响范围

"我要改 TokenService 的接口,但不知道影响有多大。"

工作流impacttraceaffected

# 1. 看影响半径(谁会受影响,深度 3 层)
codegraph impact TokenService --depth 3

# 2. 追踪关键调用路径(从入口到目标,看具体怎么调过去的)
codegraph trace RequestHandler TokenService

# 3. 找到需要跑的测试
codegraph affected src/token-service.ts --quiet

如果走 CI,一行命令自动跑受影响的测试:

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

效果:不再"改一行炸一片",重构前心中有数。


场景二:AI Agent 接入——让 AI 真正理解代码上下文

"AI Agent 改代码总是漏掉依赖,怎么破?"

工作流:MCP 集成 → context / explore

第一步,把 CodeGraph 作为 MCP Server 接入你的 AI Agent:

# 启动 MCP 服务
codegraph serve --mcp

配置文件(以 ~/.codebuddy/mcp.json 为例):

{
  "mcpServers": {
    "codegraph": {
      "command": "codegraph",
      "args": ["serve", "--mcp"]
    }
  }
}

或用交互式安装自动配置:

codegraph install          # 交互式,自动检测已安装的 Agent
codegraph install --yes    # 非交互式

支持的 Agent:Claude Code、Cursor、Codex CLI、opencode、Gemini CLI、Kiro 等。

接入后,AI Agent 就能:

# "这个认证流程是怎么工作的?"——自动组合搜索+调用链+源码
codegraph context "用户认证流程" --max-nodes 20

# "看看这几个符号的源码和它们的关系"——多符号聚合浏览
codegraph explore UserService TokenService AuthMiddleware

# "改这个函数会影响谁?"——影响分析
codegraph impact createUser --depth 2

关键区别:没有 CodeGraph 时,AI Agent 只能 grep 搜文本或 Read 文件;有了 CodeGraph,AI 能理解调用链、依赖关系、影响范围——这才是真正的代码智能。


场景三:跨框架追踪——从 API 路由到数据库

"一个请求从 URL 进来,经过中间件、Controller、Service,最终到数据库,我想看完整链路。"

CodeGraph 的框架感知路由能力可以识别 14+ 框架的路由定义,把 URL 映射到 Handler:

框架识别模式
Expressapp.get()router.post()
NestJS@Controller + @Get/@Post、GraphQL @Resolver
FastAPI@app.get()@router.post()
Djangopath()re_path()
Spring@GetMapping@PostMapping
Railsget '/x', to: 'users#index'
Gin / chir.GET()router.HandleFunc()
更多Flask、Laravel、Drupal、Axum、ASP.NET、Vapor、SvelteKit...
# 追踪:从 HTTP 入口到数据库查询
codegraph trace "GET /api/users" DatabaseQuery

跨语言也没问题——React Native 项目中,JS 调用 NativeModules.X.fn(),CodeGraph 能追踪到原生端的 RCT_EXPORT_METHOD 或 TurboModule 实现:

边界桥接方式
Swift → ObjC@objc 自动桥接规则
React Native BridgeNativeModules.X.fn()RCT_EXPORT_METHOD
TurboModulesNative<X>.ts 规范接口 → 原生实现
Expo ModulesExpo DSL 解析 → 名称匹配
Fabric 视图JSX → Codegen 规范 → 约定名称后缀查找

效果:grep 做不到的跨语言、跨框架追踪,CodeGraph 可以。


CLI 命令速查

命令说明常用选项
codegraph init [-i]初始化项目-i 同时执行索引
codegraph index [--force] [--quiet]全量索引--force 强制重建
codegraph sync增量同步
codegraph status索引状态和统计
codegraph query <词>符号搜索--kind function/class/interface--limit N--json
codegraph callers <符号>查谁调用了它--limit N--json
codegraph callees <符号>查它调用了谁--limit N--json
codegraph trace <起> <止>追踪调用路径
codegraph impact <符号>变更影响分析--depth N(默认 2)、--json
codegraph affected <文件...>受影响的测试文件--stdin--filter GLOB--depth N
codegraph context <描述>为任务构建上下文--max-nodes N--format FMT
codegraph files项目文件结构--filter GLOB--max-depth N
codegraph serve --mcp启动 MCP Server
codegraph install交互式 Agent 安装--target--location--yes
codegraph uninit [--force]移除 .codegraph/--force 跳过确认

MCP 工具一览

MCP 工具对应 CLI说明
codegraph_searchquery按名称搜索符号,返回位置和签名
codegraph_contextcontext为任务构建上下文,组合 search + node + callers + callees
codegraph_trace追踪两个符号间的完整调用路径,每跳附带源码,能跟踪动态分发
codegraph_explore多符号源码聚合浏览,一次返回多个符号的源码 + 关系图
codegraph_callerscallers查找谁调用了指定符号
codegraph_calleescallees查找指定符号调用了谁
codegraph_impactimpact分析变更影响范围
codegraph_node获取符号详情(可含源码)
codegraph_filesfiles获取项目文件结构
codegraph_statusstatus查看索引状态

MCP 工具选择指南

你想做什么用哪个工具
"X 是怎么工作的?" / 架构理解codegraph_context
"X 怎么到达 Y?"codegraph_trace
浏览多个相关符号的源码codegraph_explore
按名称找符号codegraph_search
单跳调用链codegraph_callers / codegraph_callees
编辑前检查影响范围codegraph_impact
获取单个符号源码codegraph_node

进阶:自动同步与编程 API

三层同步机制

MCP Server 运行时,索引与代码始终一致:

层级机制说明
1文件监视 + 防抖原生 OS 事件,2 秒防抖窗口,批量编辑合并为一次同步
2过期标记返回未同步文件时加 ⚠️,提示 Agent 直接 Read
3连接时追赶重连时通过 (size, mtime) + 内容哈希补齐离线变更

环境变量:

变量说明默认值
CODEGRAPH_WATCH_DEBOUNCE_MS防抖窗口(ms)2000(范围 100~60000)
CODEGRAPH_NO_DAEMON禁用文件监视守护进程

手动同步(沙箱环境、CI 脚本化查询时):codegraph sync

编程 API(Node.js 库)

CodeGraph 可作为 Node.js 库直接使用:

import CodeGraph from '@colbymchenry/codegraph';

const cg = await CodeGraph.init('/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);

// 构建上下文
const context = await cg.buildContext('fix login bug', {
  maxNodes: 20,
  includeCode: true,
  format: 'markdown'
});

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

// 自动同步
cg.watch();   // 开启文件监视
cg.unwatch(); // 停止监视
cg.close();   // 关闭

可视化:让图谱"看得见"

CodeGraph 本质上是一个 SQLite 数据库(.codegraph/codegraph.db),没有内置可视化 UI。但这并不意味着你只能对着表格想象关系——以下 6 种方案从轻到重,按需选择:

方案速览

方案操作效果适合场景
1. SQLite 直接查DB Browser for SQLite 打开 .codegraph/codegraph.db查看 nodes/edges 表,写 SQL 查询关系临时探查、验证索引
2. 架构图生成用 architecture-diagram skill 生成 HTML/SVG✅ 已验证可行,静态架构图文档/分享
3. Graphviz/DOT从 SQLite 导出节点和边,生成 .dot 文件标准有向图,可交互缩放调用链可视化、论文/文档
4. D3.js 交互图写脚本读取 SQLite 生成力导向图可拖拽、缩放、悬停查看详情交互式探索、演示
5. Neo4j 导入导出为 CSV 导入 Neo4j专业图数据库可视化 + Cypher 查询复杂图谱分析、团队共享
6. JetBrains 插件安装 Code Graph 插件IDE 内调用关系可视化日常开发(注:与本项目不同)

方案 1:SQLite 直接查询(零依赖,最轻量)

# 安装 DB Browser for SQLite(或用 sqlite3 CLI)
# 打开数据库
sqlite3 .codegraph/codegraph.db

# 查看表结构
.schema

# 查看所有函数节点
SELECT name, kind, file_path FROM nodes WHERE kind = 'function' LIMIT 20;

# 查看某个函数的调用者
SELECT n.name, n.file_path
FROM edges e
JOIN nodes n ON n.id = e.source_id
WHERE e.target_id = (SELECT id FROM nodes WHERE name = 'createUser');

优点:零配置,立即可用,适合验证和调试。 缺点:纯文本/表格,没有图形化关系展示。

方案 2:架构图生成(已验证)

利用 AI Agent 的 architecture-diagram skill,输入 CodeGraph 的查询结果,自动生成 HTML/SVG 架构图:

# 1. 用 CLI 查询关系
codegraph impact UserService --depth 2 --json > impact.json

# 2. 让 AI Agent 根据查询结果生成架构图
# 效果:静态但美观的组件关系图,可直接在浏览器打开

优点:效果美观,适合文档和分享;已验证可行。 缺点:静态图,不可交互;需要手动更新。

方案 3:Graphviz/DOT(推荐,平衡效果与复杂度)

从 SQLite 导出数据,生成标准有向图:

# 导出节点和边为 DOT 格式(示例脚本逻辑)
# 1. 查询 nodes 表获取符号
# 2. 查询 edges 表获取调用关系
# 3. 生成 .dot 文件

生成的 .dot 文件示例:

digraph CodeGraph {
  rankdir=LR;
  node [shape=box, style=rounded, fontname="Arial"];

  // 节点
  UserService     [label="UserService\nclass"];
  createUser      [label="createUser\nmethod"];
  hashPassword    [label="hashPassword\nfunction"];
  Database        [label="Database\nclass"];

  // 边(调用关系)
  UserService -> createUser;
  createUser -> hashPassword;
  createUser -> Database;
}

用 Graphviz 渲染:

# 安装 Graphviz
# macOS: brew install graphviz
# Ubuntu: sudo apt install graphviz
# Windows: choco install graphviz

# 生成 SVG(可交互缩放)
dot -Tsvg codegraph.dot -o codegraph.svg

# 生成 PNG
dot -Tpng codegraph.dot -o codegraph.png

# 生成可交互的 HTML(用 xdot 或在线查看器)

优点:标准有向图,支持交互缩放(SVG);布局算法成熟;可编程批量生成。 缺点:大型项目节点多时需要过滤子图,否则图会过于密集。

方案 4:D3.js 交互图(最灵活)

写脚本读取 SQLite,生成力导向交互图:

// 核心思路:从 SQLite 导出 JSON,用 D3.js 力导向图渲染
// 1. 读取 nodes 和 edges
// 2. 构建 { nodes: [...], links: [...] } 数据结构
// 3. D3 forceSimulation 渲染
// 4. 支持拖拽、缩放、悬停查看详情、点击跳转源码

优点:完全可交互(拖拽、缩放、悬停、筛选);视觉效果最佳。 缺点:需要写前端代码;对大型项目需要做聚类/分层处理。

方案 5:Neo4j 导入(专业图数据库)

将 CodeGraph 数据导入 Neo4j,获得专业级图可视化 + Cypher 查询能力:

# 1. 从 SQLite 导出 CSV
sqlite3 .codegraph/codegraph.db -header -csv \
  "SELECT id, name, kind, file_path FROM nodes;" > nodes.csv

sqlite3 .codegraph/codegraph.db -header -csv \
  "SELECT source_id, target_id, kind FROM edges;" > edges.csv

# 2. 导入 Neo4j(neo4j-admin import 或 Cypher LOAD CSV)
# 3. 用 Neo4j Browser 可视化

优点:专业图数据库,Cypher 查询语言强大;团队共享。 缺点:需要安装和维护 Neo4j;导入流程需要脚本化。

方案 6:JetBrains 插件(IDE 内集成)

在 IntelliJ / WebStorm 等 IDE 中安装 Code Graph 插件,可在 IDE 内直接看到调用关系图。

⚠️ 注意:这是 JetBrains 生态的独立插件,与本文的 CodeGraph 项目不是同一个工具,但可以互补使用。

优点:零切换,IDE 内直接看。 缺点:不同项目,数据不互通;仅限 JetBrains IDE。

我的推荐

你的需求推荐方案
快速验证索引数据方案 1(SQLite 直接查)
写文档/博客配图方案 2(架构图)或方案 3(Graphviz)
日常探索调用关系方案 3(Graphviz),可控且效果好
做演示/交互式探索方案 4(D3.js)
团队共享/复杂分析方案 5(Neo4j)

常见问题

问题解决方案
error: unknown option '--exclude'CodeGraph 零配置,不支持 --exclude,自动排除 node_modules/dist/build 等
codegraph_status 不是命令命令是 codegraph status(空格分隔,不是下划线)
MCP 报 database is locked确认 WAL 模式:codegraph status 显示 Journal: wal。旧版本请重新安装
索引不完整运行 codegraph index --force 强制重建
查询无结果确认文件语言在支持列表中,且不在 .gitignore 排除目录内
可视化需求无内置可视化,参见可视化章节的 6 种替代方案
大型项目索引慢确认 node_modules 等大目录已排除;使用 --quiet 减少输出开销
MCP 连接失败确认项目已初始化/索引,检查 MCP 配置中的路径,命令行验证 codegraph serve --mcp
WSL2 上 WAL 模式无法启用常见于网络挂载路径,将项目移至本地磁盘
额外排除目录在项目 .gitignore 中添加即可。如需将默认排除的目录拉回索引,用否定语法:!vendor/
codegraph index 不支持 --exclude零配置设计,所有排除规则通过 .gitignore 管理