RepoDaily · 2026-07-04 · Infrastructure / Runtime

graphify 评测:把任意文件夹变成可查询知识图谱的本地 GraphRAG 技能

#7 Infrastructure / Runtime Python +937 safishamsi/graphify 打开仓库

一个 Claude Code 技能兼 MCP 服务器,基于 tree-sitter 与 Leiden 社区发现,把代码、文档、PDF、图片、视频构建成可查询的知识图谱,并支持 stdio 与 HTTP 两种传输方式。

项目类型Infrastructure / Runtime
最适合希望在 Claude Code、Codex、Cursor、Gemini CLI 或任意 MCP 客户端中查询语言感知代码图谱,且不愿把源码发给第三方托管服务的工程师。
风险等级本地 stdio 分析风险较低;若按 Dockerfile 暴露 HTTP MCP 传输,风险为中等。
评估时间在中型仓库上跑通一次 extract 加 query 大约需要 30 到 60 分钟,额外 15 分钟接入 Claude Code 配置。

核心问题: 你是否需要一个基于 tree-sitter、可通过 MCP 被大模型查询的本地 GraphRAG 层,而不必自己写检索胶水代码?

Evaluation snapshot

Verdict:

Try it if

Skip it if

15-minute evaluation checks

验证范围

证据等级: L0最近复核: 2026-07-20产品模式: open_source

测试环境: 仅完成来源摘要复核;尚无 RepoDaily 运行测试环境。

已验证

  • 已复核 RepoDaily Brief 中记录的仓库声明和来源,包括文档中的本地优先架构与解析范围。
  • 已将 graphify 归入 Code Intelligence 试点的本地图检索场景。

未验证

  • RepoDaily 尚未安装 graphify,也未在试点仓库完成 extract-and-query 流程
  • parser 覆盖、图谱准确率、增量新鲜度、产物清理和 Agent 结果改善仍未验证
92/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 92/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
100证据质量

包含 6 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

100可安装/可试用性

检测到 6 个工作流步骤、5 个下一步动作,以及 4 个命令/安装信号。

68维护可信度

趋势热度为 +937 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

96生产准备度

采纳风险标记为 medium,并包含 7 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

90Agent / AI 适配度

文章正文和元数据中检测到 9 个 AI/Agent 相关信号。

项目概览

graphify 是一个 Python 工具,能够把源代码、SQL schema、R 脚本、Shell 脚本、文档、论文、图片、视频等文件夹内容,转换为可查询的知识图谱。其在 PyPI 上的包名为 graphifyy,版本 0.1.14,但用户面对的命令仍然是 graphify。项目定位为面向 Claude Code、Codex、OpenCode、Cursor、Gemini CLI 等 AI 编程助手的技能,同时也能作为 Model Context Protocol 服务器,支持 stdio 传输,或在安装 mcp extra 后从源码构建出 Streamable HTTP 传输。

graphify 与一般 RAG 封装的区别在于解析管线。它使用 tree-sitter 语法支持 Python、JavaScript、TypeScript、Go、Rust、Java、C、C++、Ruby、C#、Kotlin、Scala、PHP,从 AST 中抽取真实的调用与导入边,而不是按文本切块;再借助 graspologic 的 Leiden 社区发现对相关节点聚类,可选的 LLM 步骤会补充 AST 中不可见的语义概念(例如被模型归到整个仓库层面的项目级概念)。最终产物是一个 graph.json,下游 Agent 可用自然语言查询。

项目明确把自己定位为本地开发工具。SECURITY.md 写明,graphify 在图谱分析阶段不做任何网络调用,只有在用户主动通过 ingest 子命令提供 URL 时才会联网。它不会执行源码文件(tree-sitter 仅解析 AST,不使用 eval 或 exec),不在任何 subprocess 调用中使用 shell=True,也不存储凭据或 API key。对无法把自有源码送进托管检索 API 的团队来说,这种姿态正是其核心卖点。

成熟度是主要 caveat。包仍在 0.1.x,SECURITY.md 只把 0.1.x 列为受支持版本,CHANGELOG 显示管线核心部分仍在频繁改动,包括自然语言查询的 seed 选择、TS/JS 与 C# 成员调用解析、Obsidian canvas 导出器,以及在 update 与 watch 模式下对已删除文件的提取器对账逻辑。方向是连贯的,但表层仍在变动。

解决什么问题

  • LLM 编程 Agent 在大型仓库中会丢失结构上下文,容易把调用图压扁成文本块。
  • 朴素 RAG 按字符切块,丢弃了做影响分析时至关重要的 import、call、receiver-type 关系。
  • 托管型代码图谱服务需要把自有源码发到网络,对很多企业仓库是被禁止的。
  • 本地 grep/ripgrep 类 MCP 服务器不理解语言语义,无法回答类似 typed receiver 会调用哪个方法的问题。
  • PDF、论文、图片、视频等多模态输入很少能与源码共用同一查询入口,导致团队要维护多套索引。

工作原理

  1. 安装运行:PyPI 包名为 graphifyy,可执行命令为 graphify,pyproject.toml 中 requires-python 设为 >=3.10。
  2. 抽取:graphify extract 遍历目标文件夹,用对应 tree-sitter 语法解析每种支持语言,构建 networkx 调用与导入边图。
  3. 聚类:graspologic 运行 Leiden 社区发现,把相关节点分组,可选 LLM 步骤补充 AST 看不到的语义概念。
  4. 查询:graphify query 对图做按词 BFS seed 选择;近期 _pick_seeds 修复防止某个精确匹配词饿死其他查询词。
  5. 服务:graphify serve 把图作为 MCP 服务器暴露。stdio 模式不开启网络监听;HTTP 模式(通过 Dockerfile 路径)需要 API key 并可绑定 host。
  6. 导出:graphify export obsidian 把 graph.json 写成 Obsidian canvas 与知识图谱文件,近期修复同时在 to_obsidian 和 to_canvas 中过滤悬空社区成员。

集成面:graphify 接到哪里

  • Claude Code 技能:包内附带 skill.md(在 pyproject.toml 的 tool.setuptools.package-data 中声明),Claude Code 可直接加载。
  • MCP stdio 服务器:graphify serve 在默认传输下只通过 stdio 通信,不开启网络监听,依据 SECURITY.md。
  • MCP HTTP 服务器:Dockerfile 基于 python:3.12-slim 构建,安装 mcp extra(引入 mcp、starlette、uvicorn),运行 python -m graphify.serve 并带 --transport http 与可配置 --api-key。
  • 可选 Neo4j 后端:neo4j extra 允许把图持久化到 Neo4j,而不仅依赖本地 graph.json。
  • 可选 PDF 与 watch extra:pypdf 加 html2text 处理本地 PDF 摄取,watchdog 驱动实时 update 与 watch 模式,均不联网。

上手路径:来自源码包的具体命令

  • 本地技能安装:在 Python 3.10 及以上执行 pip install graphifyy(PyPI 名带双 y),随后使用 graphify 命令。
  • 一步到位安装:pip install graphifyy[all] 一次性拉取 mcp、neo4j、pypdf、html2text、watchdog。
  • 一次性分析:graphify extract <folder> 之后执行 graphify query "<自然语言问题>"。
  • 实时编辑循环:graphify watch 让 graph.json 随文件变化保持同步;近期修复在删除后会按仍在场的文件对账提取器源。
  • 容器化 HTTP 服务器:docker build -t graphify . 之后 docker run -p 8080:8080 -v "$(pwd)/graphify-out:/data" graphify /data/graph.json --transport http --host 0.0.0.0 --api-key "$SECRET"。

维护风险:CHANGELOG 透露了什么

CHANGELOG 显示这是一个正在持续加固的工具,而不是稳定的 1.0。近期未发布条目修复了 graphify export obsidian 在 to_canvas 中因社区成员 id 无对应节点而抛 KeyError 的崩溃(#1236 跟进),把 TS/JS 成员调用解析扩展到 const s = new Svc(); s.doThing() 以及返回闭包内的 typed-parameter 调用(#1630),并新增 C# receiver-typed 成员调用解析,使 recv.Method() 解析到 receiver 类型的方法,而不是匹配语料中任意同名方法(#1609)。

其中两个修复针对的是正确性而非打磨。BFS seed 多样性修复(#1596 / #1445)防止单个精确标签匹配劫持多词查询,此前会让探索塌缩到一个无关邻域;extract 崩溃修复(#1618)处理 source_file 等于扫描根的节点,此前会在所有 LLM 抽取成本已花完之后抛 ValueError: '.' has an empty name。两者都未被标记为 0.9.5 回归,但都说明真实语料的边界情况仍在被发现。

架构解读:解析、聚类与服务

管线分三层。解析层是 tree-sitter,字节切片以 errors="replace" 解码,使非 UTF-8 源码优雅降级而不是让抽取崩溃。图层是 networkx 加 graspologic,由 Leiden 社区发现对节点分组,可选 LLM 步骤补充语义概念;语义重映射逻辑 _semantic_id_remap 会跳过 source_file 等于扫描根的节点,因为它没有可重映射的 per-file 身份。

服务层承载了安全模型。serve.py 的 _load_graph 会捕获 json.JSONDecodeError 并打印恢复提示,而不是在 graph.json 损坏时崩溃。security.validate_url 把抓取限制为 http 与 https scheme,自定义 _NoFileRedirectHandler 会阻断 file:// 重定向。safe_fetch 流式读取并在 50 MB 中止,safe_fetch_text 在 10 MB 中止。对 MCP 面,security.validate_graph_path 解析路径并要求其位于 graphify-out/ 内,security.sanitize_label 会剥离控制字符、把标签截到 256 字符、在 pyvis 嵌入前对节点标签与边标题做 HTML 转义,并同样作用于 MCP 文本输出,使得来自用户可控源文件的节点标签无法破坏返回给 Agent 的文本格式。

谁适合关注

适合关注

  • 在私有 monorepo 上使用 Claude Code 或其他支持 MCP 的助手、且不能用托管代码图谱 SaaS 的团队。
  • 横跨 Python、TypeScript、Go、Rust、Java、C#、Kotlin、Scala、PHP、Ruby、C、C++ 的多语言仓库。
  • 希望把代码、SQL schema、R 脚本、PDF、论文、图片放进同一张图来查询的知识管理场景。
  • 任何希望在机器可查的 MCP 面之外,再得到一份人可审视的 Obsidian canvas 导出的用户。

可以先跳过

  • grep 已经能回答一切的单文件、单语言脚本场景。
  • 锁定在低于 3.10 的 Python 环境,因为 requires-python 设为 >=3.10。
  • 需要稳定 1.0 API 合同、才敢在 graph.json 格式之上搭建内部工具的团队。
  • 需要托管云控制面的场景;graphify 刻意 local-first,不提供托管层。

风险与注意事项

对 0.1.x 工具而言,其安全模型异常清晰,但管线核心仍在针对真实语料边界情况加固。

  • 版本为 0.1.14,SECURITY.md 仅把 0.1.x 列为受支持,graph.json 格式与 CLI 表层仍可能变动。
  • 近期修复触及正确性关键路径,包括 BFS seed 选择、TS/JS 与 C# 成员调用解析、以及 extract 阶段崩溃处理。
  • HTTP MCP 传输需要你自行提供并管理 API key,并正确绑定 host;配置不当会暴露图谱。
  • 可选 extra(neo4j、mcp、pypdf、html2text、watchdog)需单独安装,行为取决于用户实际拉取的 extra。
  • 图谱分析阶段不做网络调用;唯一可选联网路径是 ingest 子命令抓取用户主动提供的 URL。
  • URL 抓取被限制为 http 与 https scheme,自定义重定向处理器会阻断 file:// 目标。
  • 下载上限:safe_fetch 在 50 MB 中止,safe_fetch_text 在 10 MB 中止;非 2xx 响应抛 HTTPError 而非被当成内容。
  • MCP 路径校验要求图谱路径解析后位于 graphify-out/ 内,并要求该目录存在,阻断目录穿越。
  • sanitize_label 剥离控制字符、截到 256 字符、在 pyvis 嵌入前对标签与边标题做 HTML 转义,并同样作用于 MCP 文本输出,抵御来自节点标签的提示注入。
  • tree-sitter 字节切片以 errors="replace" 解码,使非 UTF-8 源码优雅降级;detect.py 中 os.walk 显式使用 followlinks=False。
  • 不对源码文件做 eval 或 exec,subprocess 调用不使用 shell=True,也不存储凭据或 API key。

替代方案比较

方案适用场景代价
Microsoft GraphRAG
当你想要一条面向文档、研究级的 GraphRAG 管线,并能接受更重的 LLM 驱动抽取步骤。开源(MIT),但规模化时 LLM 抽取成本显著。
LlamaIndex
当你需要覆盖面更广的索引与检索框架,有大量数据加载器,并希望挂接图存储。开源(MIT),embedding 与 LLM 成本取决于你的配置。
LangChain
当检索只是更大 Agent 编排的一部分,你需要通用的 chain 与工具抽象。开源(MIT),LLM 与 embedding 成本取决于所选供应商。
Sourcegraph Cody / Code Search
当你想要托管、Web 级的代码搜索与 AI 助手,并能把源码送到托管或自托管企业实例。商业产品,提供自托管企业版。

这个趋势说明了什么

替换内部编程 Agent 中的临时检索

在 Claude Code、Codex 或自建 MCP 客户端上搭内部 Agent 的团队,可把手写的 grep 加 embed 检索换成 graphify 的 tree-sitter 加 Leiden 图谱,直接拿到具备影响感知的答案。

在一个有代表性的服务上跑 graphify extract,然后问 Agent 一个 affected 类问题,例如某方法签名变化会影响哪些调用方,并与现有检索路径在同一查询上对比。

面向研究团队的混合媒体知识库

因为 ingest 接受代码、SQL schema、R 脚本、PDF、论文、图片、视频,研究团队可以把一个同时包含分析脚本和所引用 PDF 论文的项目目录交给 graphify,从同一个 MCP 客户端查询合并后的图。

把一个同时包含 R 分析脚本和它引用的 PDF 论文的目录交给 graphify,extract 后确认查询面能同时返回两种模态的节点。

用 Obsidian 做代码评审

Obsidian canvas 与知识图谱导出为评审者提供了社区与调用边的可视化地图,对在不熟悉仓库上做架构评审很有帮助。

把一个中型服务用 graphify export obsidian 导出到 Obsidian,检查社区方块是否对应真实子系统,而不是随机聚类。

下一步建议

在正式采纳前,先在一个真实仓库跑通一次 extract-query 循环

判断 graphify 最快的方式,是把它跑在一个你已经熟悉的仓库上,这样你能判断调用图与 Leiden 社区是否与你脑中的代码模型吻合。

  1. 在 Python 3.10 及以上执行 pip install graphifyy[all],一次性拿到 mcp、neo4j、pdf、watch extra。
  2. 在一个你熟悉的仓库上跑 graphify extract,确认 graphify-out/ 下生成了 graph.json。
  3. 向 graphify query 提三个逐步具体的问题,其中一个需要依赖 TypeScript、JavaScript 或 C# 的 receiver-typed 方法解析。
  4. 执行 graphify export obsidian 并在 Obsidian 中打开结果,可视化检查社区是否对应真实子系统。
  5. 如果计划以 HTTP 方式服务,先用非空 --api-key 构建 Dockerfile 镜像并绑定 127.0.0.1 测试,再考虑进一步暴露。

RepoDaily 判断

graphify 是少数真正交付语法感知图谱、而非提示词封装的技能型仓库。它的 tree-sitter 加 Leiden 管线、明确的 local-first 安全模型,以及 MCP 面使其成为 Claude Code 与其他支持 MCP 助手的可信检索层,前提是你接受 0.1.x 管线仍在加固,以及 HTTP 传输需要谨慎管理 key 与 host。

信息来源

Feedback

这页是否帮助你做出决定?

匿名反馈只用于判断内容是否真正有用。

报告过期或缺失的证据