code-review-graph:用代码智能图与 MCP,让 AI 代码审查平均省下 65 倍 token
【免费下载链接】code-review-graphLocal-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.项目地址: https://gitcode.com/GitHub_Trending/co/code-review-graph
AI 代码审查助手审一个 PR 时,习惯先重读半个代码库,上下文全是 token 开销。code-review-graph 的做法是把代码库先解析成持久化的代码智能图:Tree-sitter 解析出结构,存入 SQLite,再通过 MCP 只把回答问题所需的最小上下文交给 AI。在 flask 代码库上,全量读取需要 143,594 个 token,一次图回答只要 2,196 个,约省 65 倍。
三分钟跑起来:从安装到第一次图回答
pip install code-review-graph # 或 pipx install code-review-graph install # 自动检测你的 AI 编码工具并写入 MCP 配置 code-review-graph build # 把整个代码库解析成图这就是最短路径。install会自动检测你在用哪些 AI 编码工具(Codex、Claude Code、Cursor、Windsurf、Zed、Gemini CLI、Copilot 等 16 个平台),为每个平台写入 MCP 服务条目、钩子和规则文件指令;只配一个平台就加--platform cursor,用--dry-run可预览要写哪些文件。要求 Python ≥ 3.10,CLI 入口启动时会强制校验;uv 是可选的——uvx在 PATH 上时 MCP 配置优先用它,否则回退到直接调用code-review-graph命令。对使用者意味着:无论你用哪个编辑器或 CLI 助手,一条 install 全部配好,重启编辑器后对助手说 "Build the code review graph for this project" 即可。500 个文件的项目大约 10 秒出图,3,000 文件规模的冷构建实测约 40 秒;之后靠钩子和 watch 模式保持图是新鲜的。
它凭什么省下 65 倍 token:从影响范围分析到代码图增量更新
先看官方数字,全部来自针对 6 个真实开源仓库(fastapi、flask、gin、httpx、express、code-review-graph 自身)的自动评估运行器,合计 13 个提交,可用code-review-graph eval复现。docs/REPRODUCING.md 记录了完整步骤:所有配置固定上游 SHA,社区检测用固定随机种子,两次运行在不同机器上应得到相同数值。
- token 削减:每仓库 5 个自然语言问题,削减中位数约65×,范围36×–376×(fastapi 为 948,793 → 2,653);
- 影响精度:graph-derived 基准下 F1 平均0.693——该基准的真值来自同一张图,是循环上界,应视为上限而非"100% 召回";
- 多跳检索:11 个两跳任务(先混合搜索找锚点节点,再沿图遍历一跳)平均得分0.909。
机制是一条三步流水线:
- 解析:Tree-sitter 把每个文件解析为 AST,提取成节点(函数、类、导入)与边(调用、继承、测试覆盖),存入
.code-review-graph/里的 SQLite 数据库。覆盖 Python、JS/TS/TSX、Go、Rust、Java、C/C++、C# 等 30 余种语言,外加 Jupyter/Databricks Notebook。 - 影响范围分析(Blast Radius):文件变更后,图从变更文件出发沿调用/导入边做 BFS 展开(默认 2 层),找出所有可能受影响的调用方、依赖方与测试,算出 AI 应当读取的最小文件集。AI 不再扫描整个项目,只读这些文件。
- 最小返回:MCP 工具只返回这个切片。在本项目自己的仓库上,208,821 个源码 token 收敛到每次提问约 3,190 个。
图还必须保持新鲜,否则审查结论会悄悄过期。增量更新逻辑在 incremental.py:钩子或 watch 模式触发git diff找出变更文件,再用图里的导入/调用边定位全部依赖方,但只重新解析 SHA-256 哈希确实变化的文件——哈希没变的依赖方直接跳过。在 django(约 2,900 个文件)上实测:改动 2 个文件在钩子路径上约 2.5 秒完成重索引(其中约 1.4 秒是进程启动开销),空更新只需 1.4 秒。并行解析 worker 数由CRG_PARSE_WORKERS环境变量控制(默认取 CPU 核数与 8 的较小值),CRG_PARSE_EXECUTOR可显式指定process/thread执行器。对使用者意味着:边写代码边审查时,图始终与最新代码同步,结论不会基于旧结构。
按场景找功能:审查、体检、重构、搜索、导出
日常审查
detect-changes把 diff 映射到受影响的函数、执行流与测试缺口并给风险评分,--brief只打风险摘要 + Token Savings 面板,--base默认HEAD~1。- 斜杠命令:
build-graph建图、review-delta审上次提交以来的变更、review-pr完整 PR 审查。 get_review_context返回 token 优化审查上下文:max_files默认 25,源码片段共享 800 行预算。
架构体检
- Leiden 算法做代码社区检测(默认种子固定为 42,可用
CRG_LEIDEN_SEED覆盖),get_architecture_overview用detail_level="minimal"可把典型 600KB 的输出压到 5KB 以下。 - 枢纽/桥梁节点检测:按最大连接数与介数中心性找架构瓶颈;"意外连接"评分标记跨社区、跨语言、边缘到枢纽的耦合。
- 知识缺口分析:孤立节点、未测试热点、薄弱社区。
重构与死代码
- 重构预览覆盖重命名与死代码检测;应用时只做精确字符串替换(无正则、无 eval),并校验所有编辑路径都在仓库根内,预览 10 分钟过期。
- 大函数检测:找出超过行数阈值的函数/类。
语义搜索与嵌入
- 混合搜索:FTS5 关键词(BM25)+ 向量相似度结合,
semantic_search_nodes同时支持按标识符查和自然语言提问。 - 嵌入是可选能力:本地 sentence-transformers(默认模型
all-MiniLM-L6-v2)或云端端点,见"按需增强"。
导出与可视化
visualize支持html(D3 力导向交互图,带搜索与社区图例)、graphml(Gephi/yEd)、cypher(Neo4j)、obsidian、svg。wiki从社区结构生成 Markdown wiki;forget <path>无需完整重建即可把文件从图中移除。
命令与 MCP 工具速查:记住 8 条命令和 5 个工具就够
最常用的 CLI(完整参考见 docs/COMMANDS.md):
code-review-graph install # 自动检测并配置所有平台 code-review-graph build # 全量建图(可选 --skip-flows、--data-dir) code-review-graph update --brief # 增量更新 + 风险摘要与节省面板 code-review-graph status # 图统计信息 code-review-graph detect-changes # 带风险评分的变更影响分析(--base 默认 HEAD~1) code-review-graph watch # 文件变更时自动更新图 code-review-graph visualize # 生成交互式 HTML 图 code-review-graph serve # 启动 MCP 服务器(stdio;--http 走 localhost:5555)全部 30 个 MCP 工具都在 main.py 中以@mcp.tool()注册,建图之后 AI 助手会自己调用。高频的五个:
| 工具 | 何时用 |
|---|---|
get_minimal_context | 超紧凑上下文(约 100 token),助手优先调用它 |
get_impact_radius | 变更文件的影响范围(默认 2 层深度展开) |
detect_changes | diff → 受影响函数/流/测试缺口 + 风险评分 |
query_graph | 16 种查询模式:callers_of、callees_of、tests_for、inheritors_of 等 |
semantic_search_nodes | 按名称或自然语言语义做混合搜索 |
其余的 flows、communities、hubs、wiki、refactor 等不必逐记;serve --tools a,b,c(或CRG_TOOLS环境变量)可以只暴露你要的那几个。
按需增强:只装你用得到的可选依赖组
核心图存储是本地 SQLite,不需要任何外部服务。可选依赖组与 pyproject 中的[project.optional-dependencies]一一对应:
[embeddings]本地向量嵌入(sentence-transformers,默认all-MiniLM-L6-v2,CRG_EMBEDDING_MODEL可换模型)[google-embeddings]Google Gemini 嵌入(需GOOGLE_API_KEY)[communities]igraph 社区检测[enrichment]Jedi 增强的 Python 调用解析[eval]基准测试报告(matplotlib)[wiki]Ollama LLM 摘要[all]以上全部
OpenAI 兼容端点(官方 OpenAI、Azure,或自建网关 vLLM/LocalAI 等)无需额外安装,设好环境变量即可:
export CRG_OPENAI_BASE_URL=http://127.0.0.1:3000/v1 export CRG_OPENAI_API_KEY=sk-... export CRG_OPENAI_MODEL=text-embedding-3-small # 可选:CRG_OPENAI_DIMENSION 固定维度、CRG_OPENAI_BATCH_SIZE 调低批量然后给embed_graph传provider="openai"。base URL 指向 localhost 时会自动跳过云端出口警告。
⚠️ 模型选择:避免使用带
-preview/-beta/-exp的模型 ID——预览模型可能更换权重(维度变化会迫使全部节点重新嵌入)或被无预警弃用。推荐稳定 GA 模型:text-embedding-3-small/large、Qwen/Qwen3-Embedding-8B(vLLM/LocalAI 自托管)、gemini-embedding-001。
参与项目:从 clone 到第一次 pytest
git clone https://gitcode.com/GitHub_Trending/co/code-review-graph cd code-review-graph python3 -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" pytest测试套件在tests/目录,覆盖解析器、图、增量更新、社区检测、嵌入与 CLI;tests/fixtures/下提供 40 余种语言/框架的样例文件,验证新解析路径时直接复用。要加新语言:在code_review_graph/parser.py的EXTENSION_TO_LANGUAGE里补扩展名映射,并同步_CLASS_TYPES、_FUNCTION_TYPES、_IMPORT_TYPES、_CALL_TYPES四张节点类型表,附上测试 fixture 提交 PR。项目采用 MIT 许可证,放心 fork 与二次开发。
下一步,去你的目标仓库里跑一次build,然后问它第一个问题。
【免费下载链接】code-review-graphLocal-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.项目地址: https://gitcode.com/GitHub_Trending/co/code-review-graph
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考