开源项目第162期:code-review-graph — 给 AI 代码审查建一张代码结构地图,减少 82 倍 Token 消耗

开源项目第162期:code-review-graph — 给 AI 代码审查建一张代码结构地图,减少 82 倍 Token 消耗
引言“Stop burning tokens. Start reviewing smarter.”这是「每日一个开源项目」系列的第 162 篇。今天的项目是code-review-graph—— 一个为 AI 代码审查工具构建持久化代码结构图谱的本地工具通过 MCP 提供精准上下文减少无效 token 消耗。AI coding agent 在做代码审查时有一个隐藏的低效问题它不知道「改这个函数会影响哪些地方」所以只能读大量文件来建立上下文 —— 或者靠 grep 碰运气。code-review-graph 的解法是先把代码库解析成一张结构图函数、类、调用关系、继承、测试覆盖变更发生时直接查图算出「爆炸半径」只把真正相关的文件交给 AI 读。基准测试数据中位数 82 倍 token 减少最好情况fastapi 仓库528 倍。19,762 颗 Star创建于 2026 年 2 月支持 14 个 AI coding 平台。你会学到什么爆炸半径分析的工作原理从变更文件追踪到调用者、依赖者、测试Tree-sitter AST 解析 → SQLite 图谱 → MCP 工具链的完整架构增量更新机制为什么 2,900 个文件的仓库能在 2 秒内更新三层边置信度评分EXTRACTED/INFERRED/AMBIGUOUS的意义基准测试数字的诚实解读528x 是最好情况不是中位数前提知识使用过 Claude Code 或其他 AI coding 工具了解 MCPModel Context Protocol的基本概念基本了解静态分析和代码调用图项目背景概述code-review-graph简称 CRG是一个本地优先的代码智能工具核心功能用 Tree-sitter 解析代码库构建函数/类/导入/调用关系的结构图以 SQLite 文件存储在.code-review-graph/目录零网络依赖通过 MCP 服务器对外暴露 30 个工具AI assistant 可以查询「这次改动影响了哪些地方」支持增量更新变更时只重新解析变化的文件项目信息作者: tirth8205主语言: Python 3.10许可证: MIT版本: v2.3.6官网: code-review-graph.com项目数据⭐ GitHub Stars:19,762 Forks: 2,107 许可证: MIT 创建时间: 2026-02-26功能特性快速安装pipinstallcode-review-graph# 或pipx install code-review-graphcode-review-graphinstall# 自动检测所有已安装的 AI 平台写入 MCP 配置code-review-graph build# 解析代码库构建图谱三条命令完成设置。install自动检测本机安装了哪些 AI 工具为每个平台写入正确的 MCP 配置注入 graph-aware 指令到平台规则文件并安装对应的 hooks/skills。重启编辑器后向 AI 说Build the code review graph for this project支持的平台一次安装14 个平台同时生效Codex、Claude Code、CodeBuddy Code、Cursor、Windsurf、Zed、Continue、OpenCode、Antigravity、Gemini CLI、Qwen、Qoder、Kiro、GitHub Copilot。针对单个平台code-review-graphinstall--platformclaude-code code-review-graphinstall--platformcursor code-review-graphinstall--platformcodexToken Savings 面板┌─────────────────────── Token Savings ────────────────────────┐ │ Full context would be: 12,921 tokens │ │ Graph context used: 762 tokens │ │ Saved: 12,159 tokens (~94%) │ │ Breakdown: Functions 244 · Tests 191 · Risk 244 · Other 83 │ └──────────────────────────────────────────────────────────────┘通过detect-changes --brief或update --brief输出加--verify可以和 OpenAIcl100k_basetokenizer 对比校验。深度解析核心架构代码仓库 │ ▼ git ls-files只索引 tracked 文件 Tree-sitter 解析器 │ 提取函数/类/导入/调用/继承/测试 ▼ SQLite 图数据库 .code-review-graph/git 默认 ignore │ ├── MCP 服务器30 个工具 │ ↓ AI assistant 查询 │ get_impact_radius_tool │ get_review_context_tool │ detect_changes_tool │ ... │ └── CLI detect-changes --brief update --brief visualize ...图中的节点函数、类、文件、模块图中的边调用关系、导入关系、继承关系、测试覆盖关系爆炸半径分析这是 CRG 的核心概念。当一个文件发生变更时变更文件例如 auth/login.py 里的 login() 函数 ↓ 查图哪些函数直接调用了 login() ↓ 查图哪些函数调用了那些函数可配置深度默认 depth2 ↓ 查图哪些测试文件覆盖了这些函数 ↓ 输出这次变更的「爆炸半径」 这批函数/文件的最小集合AI 只读这个最小集合而不是扫描整个代码库。准确性说明README 里的诚实表述当前 recall1.0 是图导出的上界不是真实 recall —— ground truth 来自同一张图存在循环性偏差「co-change 模式」用 git 历史实际上同次 commit 修改了哪些文件作为独立 ground truth更诚实数字会更低爆炸半径分析刻意保守宁可多标几个文件也不漏掉可能受影响的依赖增量更新 2 秒文件保存hooks 触发 / watch mode / crg-daemon │ ▼ SHA-256 哈希检查哪些文件变了 │ ▼ 只对变更文件重新解析 │ ▼ 找到这些文件的依赖者标记需要更新的边 │ ▼ 图更新完成 典型数据2,900 个文件的仓库 2 秒完成增量更新 10 秒完成 500 个文件的初始构建三层边置信度图里的边调用关系等有三种置信度置信度含义EXTRACTED从 AST 直接解析出的明确调用高置信度INFERRED通过类型推断或语义分析推断的关系中置信度AMBIGUOUS动态调用、多态、难以静态分析的情况低置信度这个分层设计让 AI 在查询图时可以根据置信度过滤避免低质量的边引起误判。30 个 MCP 工具AI assistant 建立图谱后自动获得 30 个工具按用途分类上下文获取代码审查核心get_minimal_context_tool— 超压缩上下文约 100 tokens第一步调用get_impact_radius_tool— 变更文件的爆炸半径get_review_context_tool— 带结构摘要的 token 优化审查上下文detect_changes_tool— 风险评分变更影响分析图查询query_graph_tool— 查调用者/被调用者/测试/导入/继承traverse_graph_tool— BFS/DFS 自由遍历可配置深度和 token 预算semantic_search_nodes_tool— 按名称或语义搜索代码实体架构分析get_architecture_overview_tool— 从社区结构生成架构概览get_hub_nodes_tool— 找最高连接度节点架构热点get_bridge_nodes_tool— 通过介数中心性找架构瓶颈get_surprising_connections_tool— 检测意外的跨社区耦合get_knowledge_gaps_tool— 识别孤立节点、未测试热点、结构弱点其他refactor_tool— 重命名预览、死代码检测generate_wiki_tool— 从社区结构生成 Markdown wikicross_repo_search_tool— 跨所有注册仓库搜索工具过多时可以用CRG_TOOLS环境变量或--tools参数只暴露部分工具code-review-graph serve--toolsquery_graph_tool,detect_changes_tool,get_review_context_tool语言支持40 种语言/格式包括Python、JavaScript/TypeScript/TSX、Go、Rust、Java、C/C、C#、Ruby、Kotlin、Swift、PHP、Scala、Solidity、Dart、R、Elixir、Zig、Vue/Svelte、Jupyter/Databricks notebooks.ipynb等。不支持的语言可以通过.code-review-graph/languages.toml添加无需 fork[languages.erlang] extensions [.erl] grammar erlang function_node_types [function_clause] class_node_types [record_decl] import_node_types [import_attribute] call_node_types [call]CI 集成GitHub Actionon:pull_request:permissions:contents:readpull-requests:writejobs:review:runs-on:ubuntu-lateststeps:-uses:actions/checkoutv7-uses:tirth8205/code-review-graphv2.3.6with:github-token:${{secrets.GITHUB_TOKEN}}在 CI runner 本地构建和查询图谱源代码不发送到任何外部服务。每次 PR 生成一条带风险评分的置顶 commentpush 时原位更新。可选fail-on-risk输入作为合并门控。多仓库 Daemoncrg-daemonadd~/project-a--aliasproj-a crg-daemonadd~/project-b crg-daemon start crg-daemon status crg-daemon logs--repoproj-a-fcrg-daemon stop适合不支持 hooks 的编辑器Cursor、OpenCode 等。后台监控多个仓库文件变更每 30 秒健康检查自动重启挂死的 watcher 进程。配置存储在~/.code-review-graph/watch.toml。基准测试数据诚实解读README 里对基准数字的解读很罕见地诚实值得完整呈现仓库代码库 token图查询 token减少倍数fastapi951,0712,169528xcode-review-graph208,8212,49593xgin166,8681,99092xflask125,0221,98671xexpress135,9553,46541xhttpx89,4922,43838x中位数~82x528x 是最好情况fastapi最大的代码库不是典型值。中位数是 82x。整个代码库 token 是「没有工具的 agent 读所有源文件」的上界 —— 实际上一个合理的 agent 会 grep 关键词然后只读最匹配的文件。README 里专门设计了agent_baseline评测用 pure-python grep 找 top-3 文件对比图查询成本这才是更诚实的基线。小文件改动时图查询可能比直接读文件更贵结构元数据开销超过文件内容—— express 仓库的数字就说明了这一点。参考资源官方链接GitHub: tirth8205/code-review-graph官网: code-review-graph.comPyPI: code-review-graph基准测试复现: docs/REPRODUCING.mdDiscord: discord.gg/3p58KXqGFN总结code-review-graph 解决的是一个在 AI coding 场景里会随代码库变大而持续恶化的问题agent 不知道改了 A 会影响 B所以要么读很多无关文件要么靠 grep 碰运气。CRG 提前把「什么影响什么」建成图谱让 agent 能直接查。几个工程决策值得关注本地优先 零遥测图谱存 SQLite云端 embedding 是可选项默认不开CI runner 上也本地运行。代码不出机器。诚实的基准测试528x 标注为「最好情况」中位数 82x 才是主打数字recall1.0 明确标注为「图导出的上界存在循环性偏差」小文件改动可能净负 —— 这种程度的透明度在开发工具里罕见。增量更新优先初始构建是一次性成本之后的更新才是日常路径。2 秒完成增量更新意味着 hooks watch mode 可以真正做到「始终最新」而不是「手动触发一次」。对于中大型代码库几百到几千文件、频繁代码审查场景、或者经常遇到「改了这里会不会影响那里」问题的团队CRG 的 MCP 集成路径是目前最直接的解法之一pip installinstallbuild三步接入之后交给 agent 自动查询。探索 PrimeSkills —— 精选 AI agent 和技能工具每一个都经过真实工作流验证。没有炒作只有真正好用的工具。访问我的个人主页获取更多见解和有趣的产品。