Graft
为 Claude Code、Cursor 等 AI 编码助手构建本地上下文图谱,减少 46% 工具调用、42% token 消耗的大型代码库理解引擎
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
为 Claude Code、Cursor 等 AI 编码助手构建本地上下文图谱,减少 46% 工具调用、42% token 消耗的大型代码库理解引擎
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你在一个拥有上万个文件、数百万行代码的老牌大型代码库中工作。当你让 AI 编码助手(Claude Code、Cursor Agent、Copilot)去理解某个功能模块时,它需要花大量 token 去"读代码"——而且读得越多,理解偏差越大,越容易产生幻觉(hallucination)。传统的做法是给 AI 塞大量 context,但 context 越长、成本越高、响应越慢。
Graft 解决的就是这个问题。它为大代码库构建一个"上下文图谱"(Context Graph),作为本地可再生的 markdown 文件夹缓存,让每个 AI 查询都基于代码库的真实结构来理解上下文,而不是靠喂大量原始代码。
Graft 官方横幅图,展示项目定位
AI 编码助手正在重塑软件开发的流程。但当它们面对真实的大代码库时,面临一个根本矛盾:代码库越大,AI 需要理解的上下文越多,但喂给 AI 的 token 越多,成本越高、幻觉越多、准确率越低。
这个矛盾在实践中表现为三种典型痛点:
Graft 正是为了解决这三点而诞生的。
Graft 的核心是一个代码理解引擎,它通过以下步骤为代码库建立结构化知识:
第一步:多语言语法解析。 Graft 使用 tree-sitter 作为底层解析器,支持 Python、TypeScript、Go、Java、Kotlin、PHP、Swift、R、JavaScript 等 10+ 种主流编程语言。它将代码解析为 AST(抽象语法树),从中提取函数定义、调用关系、模块导入等结构化信息。
第二步:构建上下文图谱。 基于 AST 分析结果,Graft 在本地生成一个 markdown 文件夹,其中每个文件对应代码库中的一个实体(函数、类、文件),文件之间通过链接相互关联。这本质上是一个代码库的"知识图谱",但用人类可读的 markdown 格式存储。
第三步:动态同步与增量更新。 Graft 不只是做一次性的索引。每次你运行 graft ask 提问时,它会检查代码变动,只重新索引变化的部分,确保本地缓存始终与代码库同步。
第四步:多 AI 模型适配。 Graft 不仅仅为 Claude 工作。它支持 Claude(Anthropic)、GPT-4o/GPT-4(OpenAI)、Gemini(Google)三大主流模型,以及 Codex、Cursor 内置模型。通过 graft ask <问题> 的命令行接口,用户无需改变现有工作流,即可将 Graft 的上下文优势注入到任何 AI 助手中。
根据项目 README 中披露的基准测试数据,在 SWE-bench 类型的任务中,使用 Graft 后的效果提升非常显著:
| 指标 | 原始 Claude Code | 加 Graft 后 | 提升幅度 |
|---|---|---|---|
| 工具调用减少 | 基准 | +46% | 减少近一半 |
| Token 节省 | 基准 | +42% | 成本大幅下降 |
| 时间节省 | 基准 | +60% | 开发效率提升 |
| 代码正确率 | 54% | 66% | 提升 12 个百分点 |
Graft CLI 终端交互界面,展示问答效果
这个数据来自真实代码库测试,正确率从 54% 提升到 66% 在 SWE-bench 评测中意味着从"表现一般"跃升到"相当不错"的水平。
场景一:大型遗留代码库改造。 许多公司的核心业务系统运行了十几年,代码规模达到数十万行。新来的开发者想要理解某个业务逻辑,需要花几周时间。Graft 让这个过程从"读代码"变成"问问题"——开发者可以直接问"Graft 这个模块是做什么的,它依赖哪些服务",Graft 基于上下文图谱给出精准回答。
场景二:AI Code Review 自动化。 Graft 提供了 GitHub App 集成(trailhq-graft),安装后可以在每个 PR 自动触发 blast-radius 分析——即分析这个 PR 会影响到哪些代码区域,并生成针对性的审查建议。这解决了 Code Review 中常见的"PR 改了 A 但可能影响 B"的问题。
场景三:跨模块代码理解。 当你需要在一个跨 5 个子项目的 monorepo 中追踪一个 API 的调用链时,Graft 的图谱可以清晰地展示调用路径,而不需要手动在多个仓库间跳转。
Graft 的技术选型非常务实:
项目源码结构清晰:核心逻辑分布在 src/ai/(AI 模型调用)、src/graph/(图谱构建)、src/ingest/(代码解析摄入)、src/search/(检索匹配)、src/ask/(问答逻辑)、src/blast/(PR 影响分析)、src/mcp/(MCP 协议支持)等模块中,架构分层合理,模块边界清晰。
安装方式:
npm install -g @nanonets/graft
graft init # 在代码库根目录初始化
graft ask "这个模块的入口函数是什么?"
环境要求: Node.js >= 20,Linux/macOS/Windows 均可运行。Dockerfile 使用 node:22-bookworm-slim 多阶段构建,体积控制在合理范围内。
需要注意的问题:
graft init 在大型代码库上可能需要数分钟。Graft 的出现代表了一个趋势:Context Engineering(上下文工程) 正在成为 AI 应用开发的新方向。
在 AI 原生应用(LLM App)领域,RAG(检索增强生成)已经是一种成熟范式。Graft 的创新在于:它将 RAG 的思路引入了代码理解领域——不是靠喂大量代码让 AI"自己理解",而是通过结构化图谱给 AI 提供"索引过的代码上下文"。这比直接塞代码更高效,也更不容易出错。
从市场角度看,Graft 对标的是 GitHub Copilot 的"代码补全"功能和 Cursor 的" codebase Q&A"功能,但它选择了独立工具的路线——不绑定任何 IDE,通过 CLI 广泛兼容。这一定位让它可以被集成到任何 AI 助手中,而不只是一个产品。
GitHub 上超过 5,400 的 stars,以及 16 个官方 topics(涵盖 AI Agents、Claude Code、Cursor、MCP、tree-sitter 等关键词)说明这个项目已经在开发者社区获得了广泛认可。NanoNets 这家专注 AI 基础设施的公司,通过 Graft 展示了他们在 context engineering 领域的深度积累。
Graft 是一个精准解决"大代码库 + AI 助手"这对矛盾的开源工具。它通过 tree-sitter 解析代码结构,构建本地可再生的 markdown 图谱,让 AI 每次查询都基于结构化上下文而非原始代码。实测效果:token 节省 42%、工具调用减少 46%、正确率提升 12 个百分点。对于在大型代码库工作的 AI 开发者来说,Graft 值得一试。
有无 Graft 的冷启动效果对比图