Graphify:为 AI 编程助手打造的开源代码知识图谱工具
开源项目 Graphify 通过 Tree-sitter 静态分析与 LLM 语义抽取,将代码仓库构建为可查询的知识图谱…
- 重要性
- 42
- 新颖性
- 50
- 影响面
- 38
- 可信度
- 55
- 实质性
- 55
Graphify 是一款面向 AI 编程助手的开源「技能(skill)」,旨在帮助 Claude Code、OpenAI Codex、OpenCode 等工具理解多模态代码仓库。它由开发者 Safi Shamsi 维护,采用 MIT 协议发布,底层依赖 NetworkX 与 Tree-sitter 等成熟开源库,GitHub 上已获得超过 3.7k 星标。
核心思路:用知识图谱替代向量检索
Graphify 的设计理念是将整个代码仓库——包括源代码、文档、研究论文与图表——转化为一棵可交互的知识图谱,既能回答「代码做了什么」,也能回答「为什么这样设计」。它不依赖向量嵌入,而是采用 Leiden 算法进行语义社区发现,输出可供开发者直接浏览的结构化结果。
主要能力
- 多模态抽取:解析 .py、.js、.go、.java 等代码、Markdown、PDF 与图片。Tree-sitter 负责提取 AST、调用图与文档字符串,LLM 负责从文本中抽取概念,视觉模型负责读图。
- 图谱构建:将所有节点与边合并为 NetworkX 图,再通过 Leiden 算法进行社区聚类。
- 关键节点与意外关联:识别高度数的「上帝节点(god nodes)」,并标记跨文件、跨领域的意外连接。
- 交互式输出:导出 graph.html(交互式可视化)、graph.json(可查询持久化图谱)以及 GRAPH_REPORT.md(人工可读审计报告)。
- 助手集成:内置 /graphify、/graphify query、/graphify path、/graphify explain 等命令,适配 Claude Code、Codex 与 OpenCode。
处理流水线
Graphify 的处理流程分为七个独立阶段:detect(收集文件)、extract(AST + LLM 抽取节点与边)、build(构建 NetworkX 图)、cluster(Leiden 社区聚类)、analyze(上帝节点与意外关联)、report(生成报告)、export(输出 HTML / JSON / Obsidian)。辅助模块包括 URL 抓取、语义缓存、输入校验、文件监听与 MCP 协议服务。
实测数据
项目附带可复现的测试语料:
- httpx(小规模):6 个 Python 文件,产出 144 个节点、330 条边、6 个社区。上帝节点为 Client、AsyncClient、Response、Request,并发现 DigestAuth → Response 的意外关联。
- Karpathy 混合语料:3 个 GPT 框架仓库 + 5 篇注意力论文 + 4 张图(约 52 个文件、约 9.2 万词),产出 285 个节点、340 条边、53 个社区。平均查询消耗约 1.7k tokens,而朴素方式约 123k tokens,压缩比达 71.5 倍。在约 50 万词的语料上,BFS 子图查询仍稳定在约 2k tokens,相对朴素方式约 67 万 tokens 的开销。
与相邻项目的对比
- Sourcegraph:擅长跨仓库代码搜索与导航,但本身不是知识图谱,设计语义能力有限。
- Code2Vec:提供函数级向量嵌入,适合检索与分类,但缺少图结构与多模态输入。
- Neo4j:通用图数据库,Cypher 查询强大,但不会从代码自动生成图谱。
隐私与安全
Graphify 不捆绑任何 LLM,仅使用开发者已在 AI 助手中配置的模型 API Key,且只传输文档的语义描述,不会发送原始源代码。URL 限定 http/https,下载设有大小与超时限制,输出路径进行包含性检查,节点标签经过 HTML 转义,以防范 SSRF、Cypher 注入与 XSS 等风险。项目不收集任何遥测数据,核心依赖均为宽松开源协议,适合商业使用。
