今日开源[第35期] Code-Review-Graph

Code-Review-Graph 项目分析报告

分析日期:2026-07-22


一、项目介绍

1.1 项目概述

Code-Review-Graph(CRG)是一个本地优先的代码智能图谱工具,专为 MCP 协议和 AI 编程助手设计。其核心 slogan 是 "Stop burning tokens. Start reviewing smarter."(停止浪费 token,让代码审查更智能)。它通过 Tree-sitter 将代码库解析为持久化的结构化知识图谱,让 AI 编程助手只读取真正需要的内容,在代码审查和大仓库场景下中位数可实现 82 倍 token 缩减,最佳场景可达 528 倍 $TRAE_REF

1.2 项目信息

项目 详情
项目名称 Code-Review-Graph
项目地址 https://github.com/tirth8205/code-review-graph
项目官网 https://code-review-graph.com
PyPI 包名 code-review-graph
作者 Tirth Kanani(GitHub: @tirth8205)
Stars 19,762(截至 2026 年 7 月)
Forks 2,107
当前版本 v2.3.7(2026 年 7 月 18 日发布)
开源协议 MIT License
主要语言 Python 100%
创建时间 2026 年 2 月 26 日
提交数 714 commits
Open Issues 74
仓库标签 ai-coding, claude, code-review, graphrag, knowledge-graph, llm, mcp, tree-sitter, static-analysis

1.3 项目示意图

项目 README 和文档中提供了丰富的可视化资源:

  • 工作原理流程图:展示从代码库 → Tree-sitter AST 解析 → 图谱构建(节点 + 边)→ MCP 查询的完整流程
  • 影响半径分析图(Blast-Radius):文件变更时追踪所有调用者、依赖项和测试,计算影响范围
  • 增量更新流程图:2900 文件项目重新索引不到 2 秒
  • Monorepo 场景图:27,700+ 文件中排除无关文件,仅保留约 15 个相关文件
  • 语言覆盖图:展示 35+ 种编程语言的支持状态
  • 基准测试数据图:6 个真实开源仓库的 token 节省对比
  • Token Savings 面板截图:终端中展示的 token 节省统计
  • 交互式可视化:D3.js 力导向图,支持搜索、社区切换、按度数缩放节点
  • diagrams/ 目录:9 个 Excalidraw 架构图源文件 + PNG 导出 + 44 秒演示 GIF
  • 多语言 README:支持英文、简体中文、日文、韩文、印地语五种语言

二、项目亮点

2.1 结构化图谱而非 RAG

CRG 的核心理念是结构化知识图谱,而非传统的 RAG(检索增强生成)。差异在于:

维度 RAG(检索增强生成) CRG(结构图谱)
核心问题 "哪里讨论了 X?" "谁调用 X?"
技术方案 文本分块 + 向量嵌入 Tree-sitter AST → 节点和边
查询方式 语义相似度搜索 图遍历(调用链、继承链)
准确性 相似度猜测 确定性图查询

RAG 回答"哪里讨论了 X",而 CRG 回答"谁调用 X"——这是图谱查询,不是相似度猜测 $TRAE_REF

2.2 影响半径分析(Blast-Radius)

文件变更时,图谱自动追踪所有调用者、依赖项和测试,计算"爆炸半径"。AI 只读取变更影响范围内的文件,而非整个代码库。这使得在 Monorepo 场景下,能从 27,700+ 文件中排除无关文件,仅保留约 15 个相关文件。

2.3 超大规模 Token 缩减

基于 6 个真实开源仓库(13 次提交)的自动化评估基准测试:

仓库 全量 Token 图谱 Token 缩减倍数
fastapi 951,071 2,169 528.4x
code-review-graph 208,821 2,495 93.0x
gin 166,868 1,990 91.8x
flask 125,022 1,986 71.4x
express 135,955 3,465 40.6x
httpx 89,492 2,438 38.0x

中位数 82x 缩减,多跳检索准确率 0.909(11 个任务中 10 个通过)$TRAE_REF

2.4 增量更新(<2 秒)

通过 SHA-256 哈希校验变更文件,仅重新解析变化部分。2900 文件项目重新索引不到 2 秒,无需每次全量重建。

2.5 35+ 语言支持 + 自定义扩展

语言类别 支持的语言
主流语言 Python, JavaScript/TypeScript/TSX, Go, Rust, Java, C/C++, C#, Ruby, Kotlin, Swift, PHP, Scala, Dart
脚本语言 R, Perl, Lua/Luau, Shell, PowerShell, Julia
领域语言 Solidity, GDScript, Verilog/SystemVerilog, SQL, Terraform/OpenTofu, Nix
前端框架 Vue/Svelte SFCs, Astro
笔记本 Jupyter/Databricks (.ipynb)
其他 Objective-C, Elixir, Zig, ReScript, VB.NET

支持通过 languages.toml 配置文件添加新语言,无需 fork 项目。

2.6 MCP 原生集成(30 个工具)

通过 FastMCP 框架暴露 30 个 MCP 工具 + 5 个 MCP 提示模板,原生集成到 AI 编程助手(Claude Code、Cursor、Windsurf、Codex、Zed、Continue、OpenCode、Gemini CLI、Qwen、Kiro、GitHub Copilot 等)。一条命令 code-review-graph install 自动检测并配置所有工具。

2.7 核心算法能力

功能 算法/技术 说明
社区检测 Leiden 算法 自动聚类相关代码,大型图自动调节分辨率
Hub/Bridge 检测 度中心性 + 介数中心性 发现架构热点和瓶颈节点
边置信度 三级评分 EXTRACTED / INFERRED / AMBIGUOUS,附带浮点分数
语义搜索 可选嵌入 支持 sentence-transformers、Google Gemini、MiniMax、OpenAI 兼容
风险评分 多维度评估 GitHub Action 集成,本地优先,源码不离开 CI runner

2.8 与同类工具的差异化优势

对比维度 CRG Serena claude-context repomix
技术方案 Tree-sitter AST → 结构图谱 LSP 符号检索 文本分块+向量嵌入 全量打包为单文件
持久化 SQLite 增量更新 语言服务器状态 向量数据库 无(每次重新生成)
外部依赖 核心零外部依赖 每种语言需语言服务器 嵌入服务+向量数据库 Node.js
审查聚焦 是(影响半径、风险评分、测试缺口) 通用编码工具包 搜索为主 上下文打包
Token 节省 中位数 82x 中等 中等 无节省

三、项目运行环境

3.1 基础要求

要求 说明
Python >= 3.10(支持 3.10/3.11/3.12/3.13)
包管理器 推荐 uv(可用 pippipx 备选)
操作系统 跨平台(Windows/Linux/macOS)
外部数据库 无(使用 SQLite 本地存储)
构建系统 Hatchling

3.2 核心依赖

依赖 版本 用途
mcp >= 1.0.0 MCP 协议实现
fastmcp >= 0.1.0 FastMCP 框架(MCP 服务器)
tree-sitter >= 0.23.0 代码 AST 解析
tree-sitter-language-pack >= 0.3.0 35+ 语言语法包
networkx >= 3.2 图算法(社区检测、中心性分析)
watchdog >= 4.0.0 文件变更监听

3.3 可选依赖

依赖组 用途
[embeddings] 本地向量嵌入(sentence-transformers + numpy)
[google-embeddings] Google Gemini 嵌入
[communities] 社区检测(igraph)
[enrichment] Python 调用解析增强(Jedi)
[eval] 评估基准测试(matplotlib)
[wiki] LLM 摘要生成 Wiki(ollama)
[dev] 开发工具(pytest, pytest-asyncio, ruff)

3.4 安装与运行步骤

# 方式一:uv 安装(推荐)
uv tool install code-review-graph

# 方式二:pip 安装
pip install code-review-graph

# 方式三:pipx 安装
pipx install code-review-graph

# 一键配置所有 AI 编程工具
code-review-graph install

# 首次构建图谱
code-review-graph build

# 启动守护进程(自动监听文件变更)
code-review-graph daemon start

# 启动 MCP 服务器
code-review-graph serve

# 可视化图谱
code-review-graph visualize

install 命令自动检测已安装的 AI 编程工具(Claude Code、Cursor、Windsurf、Codex、Zed、Continue、OpenCode、Gemini CLI、Qwen、GitHub Copilot 等),写入对应的 MCP 配置,并注入图谱感知指令。

3.5 数据存储

存储位置 内容
.code-review-graph/graph.db SQLite 图谱数据库(含 FTS5 全文索引)
~/.code-review-graph/registry.json 多仓库注册表
~/.code-review-graph/watch.toml 守护进程配置
.code-review-graphignore 排除规则(类似 .gitignore)

四、项目代码介绍

4.1 代码架构图

code-review-graph/
├── .github/                          # GitHub Actions(CI/CD、PR Review 工作流)
│   └── workflows/                    # 测试、发布、PR 审查工作流
│
├── code_review_graph/                # ⭐ 核心 Python 包
│   ├── __init__.py                   # 包初始化
│   ├── __main__.py                   # python -m 入口
│   ├── cli.py                        # CLI 命令行接口(67KB,最大模块)
│   ├── parser.py                     # Tree-sitter 解析器(语言支持、AST 提取)
│   ├── graph.py                      # 图谱构建与存储(NetworkX + SQLite)
│   ├── server.py                     # MCP 服务器(FastMCP 框架,30 个工具)
│   ├── analysis.py                   # 图分析(Hub/Bridge/异常检测,13KB)
│   ├── changes.py                    # 变更检测与影响分析(19KB)
│   ├── communities.py                # 社区检测(Leiden 算法,38KB)
│   ├── embeddings.py                 # 向量嵌入(45KB)
│   ├── enrich.py                     # 图增强(9KB)
│   ├── context_savings.py            # Token 节省估算(11KB)
│   ├── custom_languages.py           # 自定义语言支持(11KB)
│   ├── daemon.py                     # 后台守护进程(37KB)
│   ├── daemon_cli.py                 # 守护进程 CLI(9KB)
│   ├── event_resolver.py             # 事件解析器(4KB)
│   ├── config_keys.py                # 配置键常量(1KB)
│   ├── constants.py                  # 全局常量(2KB)
│   │
│   └── eval/                         # 评估基准测试框架
│       ├── configs/                  # 各仓库评估配置(YAML)
│       ├── runner.py                 # 评估执行器
│       └── benchmarks/               # 基准测试脚本
│
├── code-review-graph-vscode/         # VS Code 扩展
├── diagrams/                         # 架构图(Excalidraw 源文件 + PNG)
├── docs/                             # 文档(USAGE, COMMANDS, FAQ, TROUBLESHOOTING 等)
├── evaluate/results/                 # 评估结果数据
├── hooks/                            # 平台钩子(Codex, Claude 等)
├── scripts/                          # 辅助脚本
├── skills/                           # 技能定义(斜杠命令)
├── tests/                            # 测试套件
│   └── fixtures/                     # 测试固件(各语言示例文件)
│
├── pyproject.toml                    # 项目配置与依赖
├── uv.lock                           # 依赖锁定
├── action.yml                        # GitHub Action 定义
├── AGENTS.md / CLAUDE.md / GEMINI.md # AI 助手指令文件
├── CHANGELOG.md                      # 变更日志
├── LICENSE                           # MIT 许可证
└── README.md                         # 多语言项目说明

4.2 系统架构

┌─────────────────────────────────────────────────────┐
│                    AI 编程助手层                       │
│  Claude Code │ Cursor │ Windsurf │ Codex │ Gemini   │
└───────────────────────┬─────────────────────────────┘
                        │ MCP 协议(30 个工具)
┌───────────────────────┴─────────────────────────────┐
│                  MCP 服务层 (server.py)               │
│  FastMCP 框架 │ stdio 传输 │ Streamable HTTP 传输    │
└───────────────────────┬─────────────────────────────┘
                        │
┌───────────────────────┴─────────────────────────────┐
│                   核心引擎层                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐  │
│  │ 解析器    │  │  图谱    │  │   分析引擎        │  │
│  │ parser.py │→│ graph.py │→│ analysis.py       │  │
│  │ Tree-     │  │ NetworkX │  │ communities.py   │  │
│  │ sitter    │  │ + SQLite │  │ changes.py       │  │
│  └──────────┘  └──────────┘  └──────────────────┘  │
└───────────────────────┬─────────────────────────────┘
                        │
┌───────────────────────┴─────────────────────────────┐
│                   存储与基础设施层                      │
│  SQLite + FTS5 │ 文件监听(watchdog) │ 守护进程(daemon) │
└─────────────────────────────────────────────────────┘

4.3 核心模块介绍

模块 路径 功能
CLI 层 cli.py (67KB) 最大模块,包含所有 CLI 子命令:install、build、update、status、watch、visualize、detect-changes、serve、register、eval、daemon
解析器 parser.py Tree-sitter 核心引擎,管理 35+ 种语言语法,定义 EXTENSION_TO_LANGUAGE_FUNCTION_TYPES_IMPORT_TYPES_CALL_TYPES 等节点类型
图谱引擎 graph.py 基于 NetworkX + SQLite 的图谱存储。节点:函数、类、文件。边:CALLS、IMPORTS_FROM、INHERITS、TESTS_FOR
MCP 服务 server.py 基于 FastMCP,暴露 30 个 MCP 工具 + 5 个提示模板,支持 --tools 白名单过滤
图分析 analysis.py (13KB) Hub/Bridge 节点检测、异常连接检测、知识缺口分析、执行流追踪
社区检测 communities.py (38KB) Leiden 算法自动聚类,大社区自动递归分割
变更分析 changes.py (19KB) 文件变更检测、影响半径计算、风险评分、测试缺口分析
向量嵌入 embeddings.py (45KB) 支持本地/OpenAI/Gemini/MiniMax 四种 provider,嵌入函数签名
守护进程 daemon.py (37KB) 后台文件监听,自动触发增量更新,支持多仓库注册
Token 估算 context_savings.py (11KB) 计算全量读取 vs 图谱精准读取的 token 差值
自定义语言 custom_languages.py (11KB) 通过 languages.toml 扩展新语言支持

4.4 核心代码解析

4.4.1 Tree-sitter AST 解析流程

# parser.py 中的核心解析逻辑
# 1. 根据文件扩展名选择对应的 Tree-sitter 语法
EXTENSION_TO_LANGUAGE = {
    ".py": "python",
    ".js": "javascript",
    ".ts": "typescript",
    ".go": "go",
    ".rs": "rust",
    # ... 35+ 种语言的映射
}

# 2. 遍历 AST 提取代码实体
# 节点类型分类:
_FUNCTION_TYPES = {"function_definition", "method_definition", ...}
_CLASS_TYPES = {"class_definition", ...}
_IMPORT_TYPES = {"import_statement", "import_from_statement", ...}
_CALL_TYPES = {"call", "method_invocation", ...}

# 3. 构建节点 → 边关系:
# - 函数/方法 → 节点
# - 类 → 节点
# - 调用关系 → CALLS 边
# - 导入关系 → IMPORTS_FROM 边
# - 继承关系 → INHERITS 边
# - 测试覆盖 → TESTS_FOR 边

4.4.2 影响半径分析(Blast-Radius)

# changes.py 中的影响半径计算
# 当文件变更时:
# 1. 解析变更文件,提取变更的函数/类
# 2. 在图谱中查找所有调用者(callers)
# 3. 递归追踪调用链(可配置深度)
# 4. 查找相关测试文件(TESTS_FOR 边)
# 5. 计算"爆炸半径":所有受影响文件的并集
# 6. 输出最小上下文:仅将这些文件提供给 AI

# 效果示例(Monorepo 场景):
# 27,700+ 文件 → 仅保留约 15 个相关文件
# 全量 token: 951,071 → 图谱 token: 2,169(528x 缩减)

4.4.3 增量更新机制

# 增量更新流程(daemon.py + graph.py 协作)
# 1. 守护进程监听文件变更(watchdog)
# 2. 对变更文件计算 SHA-256 哈希
# 3. 与图谱中存储的哈希对比,仅处理变化文件
# 4. 移除旧节点和边,重新解析并插入新节点和边
# 5. 2900 文件项目重新索引不到 2 秒

4.4.4 社区检测(Leiden 算法)

# communities.py 中的社区检测
# 使用 Leiden 算法对代码图谱进行社区划分
# 核心流程:
# 1. 构建加权图(边权重反映调用频率)
# 2. Leiden 算法迭代优化模块度
# 3. 大社区自动递归分割(可配置分辨率参数)
# 4. 输出社区结构:每个社区代表一组紧密耦合的代码模块

# 应用场景:
# - 架构分析:了解代码库的模块化程度
# - 新人引导:快速理解代码组织
# - 重构辅助:识别跨社区的高耦合边

4.4.5 MCP 服务器 30 个工具

# server.py 基于 FastMCP 框架暴露的核心工具
# 工具分类:
# 查询类:
#   - get_function_info: 获取函数详情(参数、返回值、调用者)
#   - get_class_info: 获取类详情(方法、属性、继承链)
#   - get_callers: 获取调用者列表
#   - get_callees: 获取被调用者列表
#   - search_symbols: 全文搜索代码实体
#   - semantic_search: 语义搜索(需嵌入模块)

# 分析类:
#   - get_blast_radius: 计算文件变更的影响范围
#   - get_risk_score: 评估变更的风险等级
#   - get_test_gaps: 检测未覆盖的测试缺口
#   - get_communities: 获取社区检测结果
#   - get_hub_nodes: 获取架构热点节点

# 管理类:
#   - list_repositories: 列出已注册的仓库
#   - get_graph_status: 获取图谱构建状态
#   - rebuild_graph: 触发全量重建
#   - update_graph: 触发增量更新

4.4.6 边置信度评分机制

# 三级置信度评分,诚实标注推断 vs 确定边
# EXTRACTED (1.0): 直接从 AST 提取的确定性关系
#   - 静态调用:foo() 调用 bar()
#   - 明确导入:from module import Class
#   - 显式继承:class Child(Parent)

# INFERRED (0.5-0.9): 基于启发式算法推断的关系
#   - 动态分发:通过接口/抽象类的间接调用
#   - 鸭子类型:参数类型推断

# AMBIGUOUS (0.1-0.4): 不确定的关系
#   - 元编程:getattr()、反射等动态调用
#   - 字符串引用:通过字符串名称的调用

五、项目应用与评价

5.1 应用场景

场景 说明
AI 代码审查 最核心场景。PR 审查时只提供变更影响范围内的文件,大幅减少 token 消耗
大型/Monorepo 项目 价值最高。数千到数万文件的仓库中,AI 无法全量读取,图谱精准定位
架构分析 通过社区检测、Hub/Bridge 节点分析理解代码整体架构
新人入职引导 自动生成架构概览、Wiki、执行流,快速了解代码库
重构辅助 死代码检测、重命名影响预览、影响范围分析
CI/CD 集成 GitHub Action 在每次 PR 自动进行风险评分审查
多仓库管理 注册多个仓库,跨仓库搜索代码实体
AI 编程助手增强 30 个 MCP 工具无缝集成到 Claude Code、Cursor、Windsurf 等工作流

5.2 项目优点

  1. Token 节省效果显著:中位数 82x 缩减,最佳场景 528x,直接降低 AI 编程成本。
  2. 本地优先、隐私安全:零遥测,SQLite 本地存储,源代码不离开本地(云嵌入为可选)。
  3. 安装极简:一条命令 code-review-graph install 自动检测并配置所有 AI 编程工具。
  4. 增量更新高效:2900 文件项目重新索引不到 2 秒,无需每次全量重建。
  5. 语言覆盖广泛:35+ 种语言,支持通过 languages.toml 自定义扩展。
  6. MCP 生态原生:30 个 MCP 工具无缝集成到 AI 助手工作流,5 种提示模板开箱即用。
  7. 核心零外部依赖:不依赖外部数据库或云服务,可完全离线运行。
  8. 社区活跃:19.7K Stars,714 次提交,频繁更新(v2.3.7 距创建仅 5 个月)。
  9. 边置信度机制:诚实标注推断 vs 确定边,避免误导 AI 决策。
  10. 可复现基准测试:固定 SHA 种子,确定性评估,结果可复现验证。

5.3 项目不足

  1. 小仓库性价比低:几百个文件以下的项目,AI 直接读取可能更高效;单文件变更时图谱响应可能比原始 diff 更大。
  2. 调用解析精度有限:基于 AST 级别和启发式算法,不是编译器级别的。动态分发、元编程、鸭子类型可能产生 INFERRED/AMBIGUOUS 边。
  3. JS/Go 流检测不完善:入口点检测目前主要对 Python 框架模式可靠,JS/Go 的流检测召回率仅 33%。
  4. 向量嵌入深度受限:仅嵌入函数签名(约 10 tokens/节点),不嵌入函数体或文档字符串,语义搜索的深度有限。
  5. 关键词搜索排名偏弱:MRR(平均倒数排名)仅 0.35,不如专用搜索工具。
  6. 一次性查询不划算:首次构建需要约 10 秒(500 文件),但如果只问一次问题,不值得构建。
  7. Python 3.10+ 限制:对老项目有一定环境要求,部分旧系统可能不兼容。
  8. 版本依赖较新:tree-sitter >= 0.23.0 等底层依赖版本较新,可能与某些环境冲突。

参考来源

posted @ 2026-07-22 00:50  zhang-yd  阅读(5)  评论(0)    收藏  举报