项目快照:Graphify-Labs/graphify,约 105,922 个 Star,10,319 个 Fork;最新推送时间 2026-08-13T14:15:04Z。本文基于仓库公开资料撰写。

项目地址:https://github.com/Graphify-Labs/graphify · https://www.graphify.com

graphify 从代码、运行环境到实践流程的项目封面
graphify 的项目能力与实践流程示意。

项目速览(TL;DR)

graphify 是一个以 Python 编写的开源命令行工具,同时提供面向多种人工智能(Artificial Intelligence,AI)编程助手的 /graphify 技能。它的目标是把代码、文档、SQL 模式、配置文件以及 PDF、图片、视频等资料组织成可查询的知识图谱(Knowledge Graph),并通过图结构查询来替代单纯的文件搜索。

根据仓库资料,项目默认分支为 v8,当前 GitHub 元信息显示 Star 为 105922、Fork 为 10319,主要语言为 Python,许可证为 Apache-2.0。仓库中的 Python 包名称是 graphifyy,项目版本为 0.9.42;这些数值属于资料提供时的快照,使用时应以仓库和包管理平台的最新状态为准。

  • 代码解析:使用 tree-sitter 抽象语法树(Abstract Syntax Tree,AST)进行本地、确定性解析,不依赖语言模型。
  • 边的可解释性:连接带有 EXTRACTEDINFERRED 标记,用于区分源文件中的显式关系与图构建阶段推断的关系。
  • 输出结果:默认生成 graph.htmlGRAPH_REPORT.mdgraph.json
  • 查询方式:支持针对概念的 explain、两个节点之间的 path,以及面向自然语言问题的 query

定位与目标用户

本项目定位于“代码库及其关联资料的结构化理解”,重点不是生成代码,而是把跨文件、跨语言和跨资料类型的关系保存为可追踪的图。对需要理解既有系统边界、模块依赖、调用关系和设计依据的工程团队而言,图结构可以把分散在目录、注释、文档和会议资料中的信息放到同一查询对象中。

它的使用入口是人工智能编程助手技能和命令行工具。README 明确列出 Claude Code、Cursor、Codex、Gemini CLI、GitHub Copilot 等平台,以及其他平台;具体平台的安装细节不在所给资料中完整展开,使用者应以仓库最新 README 的安装章节为准。

典型使用问题

  • 某个类、函数或配置项由哪些文件引用,关系是显式提取还是名称解析得到。
  • 两个代码概念之间经过哪些模块连接,最短路径包含哪些跳数。
  • 一个项目中连接度最高的概念在哪里,哪些节点构成相对独立的社区或子系统。
  • 代码实现与 # NOTE:# WHY: 注释、ADR 或 RFC 引用之间是否存在可追踪关系。
  • 代码、文档、PDF、图片和视频资料如何汇入同一张图,而不必分别查找多个目录。

核心功能

graphify 的核心价值来自“解析、建图、解释、查询”四个环节的组合。代码路径以本地 AST 提取为基础;非代码资料的语义处理则依赖已配置的后端或人工智能助手,因此不同输入类型的隐私边界并不相同。

本地 AST 代码映射

代码文件首先由 tree-sitter 解析为语法树,项目根据语法结构提取函数、类、方法、导入、调用、继承和混入等关系。README 将该过程描述为本地、确定性且不需要语言模型,代码解析阶段不会把代码发送到外部服务。

依赖列表包含 Python、JavaScript、TypeScript、Go、Rust、Java、C、C++、Ruby、C#、Kotlin、Scala、PHP、Swift、Lua、Zig、PowerShell、Elixir、Objective-C、Julia、Verilog、Fortran、Bash 和 JSON 等 tree-sitter 语法包。README 提到跨约 40 种语言解析关系,但所给依赖清单只列出了其中明确声明的包,未列出的语言与版本应以仓库最新实现为准。

关系分类与可解释边

图中的边至少使用两类来源标记:EXTRACTED 表示关系在源文件中有明确依据,INFERRED 表示 graphify 通过解析结果和名称、引用等信息进行了解决或推断。这个标记不等同于业务正确性证明,而是帮助读者区分“源码直接写出”与“工具计算得到”的证据层级。

README 示例中,APIRouter 的连接包括 usesmethodimports 等关系;其中 .get()__init__.py 的示例边标记为 EXTRACTED,其他示例关系标记为 INFERRED。实际项目的节点数量、边数量和解析覆盖率没有在所给资料中给出。

查询、路径与节点解释

图生成后,完整结果保存到 graph.json,查询过程可以直接基于该文件,不需要重新读取原始文件。graphify explain "APIRouter" 用于查看单个节点的来源、社区、度数和连接;graphify path "FastAPI" "ModelField" 用于寻找两个概念之间的最短路径;graphify query "<question>" 则返回与自然语言问题相关的子图。

这种设计适合把“我想知道一个概念是什么”与“我想知道两个概念如何连接”分成不同操作。命令的完整参数、错误处理和查询语法未在资料中完整列出,不能据此推断更复杂的过滤、排序或权限参数。

社区、关键节点与多媒体资料

README 列出“God nodes”和“Communities”两项能力。前者用于展示连接最多的概念,后者使用 Leiden 社区发现方法拆分子系统,并声明标签生成不依赖语言模型;依赖文件将 graspologic 放在可选的 leiden extra 中,且该 extra 受 Python 版本条件约束。

对于文档、PDF、图片、视频和音频,README 说明语义处理使用人工智能助手的模型或配置的 API key。与代码 AST 解析不同,这一语义阶段不是默认意义上的完全本地处理;是否调用后端、使用哪种模型以及数据如何发送,取决于具体配置,所给资料没有提供统一的默认后端。

系统架构与关键模块

从打包配置可以确认,项目由命令行入口、图处理依赖、抽取器、导出器和可选服务组成。仓库资料没有提供完整的模块调用图,因此下述结构只描述配置中能够核查的边界,不把未公开的内部实现细节当作事实。

入口与数据流

  1. 通过 graphify 命令进入 graphify.__main__:main
  2. 执行安装或技能触发操作,使用人工智能编程助手运行 /graphify .
  3. 代码输入经过 tree-sitter 及对应语言包处理,生成节点和关系。
  4. 文档、PDF、图像、视频或音频输入进入语义处理路径;是否启用外部模型由后端配置决定。
  5. 图数据写入 graph.json,并生成可在浏览器打开的 graph.html 与摘要报告 GRAPH_REPORT.md
  6. 后续使用 explainpathquery 针对图文件查询。

图计算与解析组件

networkx 用于图结构处理,numpy 提供数值计算支持,rapidfuzz 用于模糊匹配相关能力。tree-sitter 主包版本约束为 >=0.23.0,<0.26,各语言包还有自己的版本范围,安装时应让包管理器按项目声明解析依赖。

Setuptools 配置声明了 graphifygraphify.extractorsgraphify.exporters 三个 Python 包。包数据中包含多个面向不同宿主平台的技能文件、参考资料和 always-on 注入块;这说明平台适配通过随包发布的资源文件完成,但资料没有给出每个平台的完整行为差异。

MCP 与容器服务

项目提供 graphify-mcp 入口,对应 graphify.serve:_mainmcp 可选依赖还声明了 starlette,Dockerfile 使用 .[mcp] 安装这组依赖,并以 Streamable HTTP transport 启动服务。

Dockerfile 使用 python:3.12-slim 作为基础镜像,容器暴露端口 8080,运行用户为非 root 的 graphify,UID 为 10001。运行时把宿主机的 graphify-out 挂载到容器的 /data,图文件不烘焙进镜像,而是通过运行参数从 /data/graph.json 读取。

依赖与运行环境

项目要求 Python >=3.10,构建系统使用 Setuptools,构建要求为 setuptools>=77。基础依赖和可选能力分开声明,因而只处理代码时不必默认安装 PDF、数据库、视频转写或模型后端相关组件。

类别 资料中声明的依赖 版本或条件 用途
图处理 networkxnumpyrapidfuzz networkx>=3.4numpy>=1.21rapidfuzz>=3.0 图结构、数值计算和匹配支持
语法解析 tree-sitter >=0.23.0,<0.26 AST 解析基础库
Python 语法 tree-sitter-python >=0.23,<0.26 Python 源码解析
构建 setuptools >=77 构建 Python 分发包
运行时 Python >=3.10 项目运行环境
测试与质量 pytestruffpyrightbandit 开发依赖,版本见 pyproject.toml 测试、格式与静态检查、安全检查

Python 3.13 下 leiden extra 的条件与 graspologic 相关,svg extra 对 Python 3.13 使用 numpy>=2.0。资料没有给出操作系统兼容性矩阵,也没有提供性能基准表的完整内容,因此不能从依赖声明推导项目可处理的仓库规模或运行时间。

快速开始:最小可运行示例

最小闭环由 CLI 安装、技能注册、项目扫描和结果验证构成。下面的命令来自 README,适合在本地测试目录中执行;命令不会自动替用户指定一个远程代码库。

安装与注册

Bash
uv tool install graphifyy
graphify install

README 同时给出 pipx install graphifyy 作为安装方式。graphify install 的作用是向人工智能编程助手注册技能;资料没有提供该命令的可选参数、覆盖策略和卸载命令。

运行项目扫描

Text
/graphify .

该命令应在已安装并支持相应技能的人工智能编程助手中执行,句点表示当前项目目录。README 的示例输出目录为 graphify-out/,生成三个文件:可在浏览器打开的 graph.html、摘要报告 GRAPH_REPORT.md 和完整图数据 graph.json

验证图文件与查询

Bash
graphify explain "APIRouter"
graphify path "FastAPI" "ModelField"
graphify query "where is request validation handled?"

其中前两条命令是 README 展示的查询形式,第三条使用 README 规定的 graphify query "<question>" 形式。验证时可以检查 graphify-out/graph.json 是否存在,并在浏览器中打开 graphify-out/graph.html;输出目录名称和文件名来自 README,不应据此假设其他输出文件一定存在。

配置说明

项目的主要配置入口是 pyproject.toml 中的项目元数据、依赖和 optional extras,而不是资料中未出现的环境变量文件。下表集中列出可核查的配置项;对于包管理器自动解析的字段,默认值并非项目显式设定,按要求标记为“未提供”。

字段名 类型 默认值 作用
project.name 字符串 graphifyy Python 分发包名称
project.version 字符串 0.9.42 资料中声明的项目包版本
requires-python 版本约束字符串 >=3.10 运行所需的 Python 最低版本
project.license 字符串 Apache-2.0 项目许可证标识
optional-dependencies.pdf 依赖数组 ["pypdf>=6.12.0", "markdownify"] 提供 PDF 处理相关可选依赖
optional-dependencies.neo4j 依赖数组 ["neo4j"] 声明 Neo4j 相关可选依赖
optional-dependencies.postgres 依赖数组 ["psycopg[binary]"] 声明 PostgreSQL 相关可选依赖
optional-dependencies.video 依赖数组 ["faster-whisper; python_version >= '3.11'", "yt-dlp>=2026.6.9"] 声明视频或音频处理相关依赖及 Python 条件
optional-dependencies.all 依赖数组 资料已列出,默认值未提供 集中声明多组可选能力

可选组还包括 mcpfalkordbwatchsvgofficegoogleopenaianthropicgeminiollamabedrocksqlterraformpascaldm 等。资料没有给出统一的 API 环境变量名称、模型名称、配置文件格式或后端选择优先级,官方仓库未提供该信息,建议以最新 README 为准。

进阶用法

进阶用法的重点是选择输入范围、查询方式和后端能力,而不是把所有 optional extras 一次安装。应先用本地代码解析建立基础图,再按实际资料类型增加 PDF、SQL、数据库、视频或模型相关依赖。

按问题选择查询命令

  • 使用 explain:当目标是理解一个节点的来源、社区、度数和关系列表。
  • 使用 path:当目标是解释两个概念之间的连接链路,README 示例返回最短路径及跳数。
  • 使用 query:当问题以自然语言表达,需要返回一个范围受限的相关子图。
  • 使用 graph.html:当需要交互式点击节点、过滤和搜索,而不是只看终端文本。
  • 使用 graph.json:当需要把同一份图数据保留给后续查询,避免每次重新读取源文件。

按资料类型安装扩展

PDF 处理对应 pdf extra,SQL 语法解析对应 sql extra,Terraform 对应 terraform extra,数据库连接则分别声明了 neo4jfalkordbpostgres。这些名称来自 pyproject.toml,但资料没有提供每个扩展的完整安装命令和端到端示例。

视频 extra 声明了 faster-whisperyt-dlp,其中 faster-whisper 只在 Python 版本不低于 3.11 时声明。是否下载外部媒体、如何鉴权以及如何处理版权内容,不能从依赖列表推导,使用时应仅处理拥有授权的资料。

容器化运行 MCP 服务

Text
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 "<你的-API-KEY>"

这是仓库 Dockerfile 注释中给出的构建和运行形式。占位符 <你的-API-KEY> 代表由使用者自行提供的访问密钥,不应把真实密钥写入镜像、代码仓库或公开日志;资料没有说明密钥的生成方式、长度要求和权限模型。

可观测性与运维

仓库资料明确给出的可观察产物是图文件、报告文件和终端查询结果,而不是一套指标、日志或追踪协议。运维时应把生成的 graph.json 视为主要数据资产,把 graph.html 视为浏览和诊断界面,把 GRAPH_REPORT.md 视为摘要材料。

本地运行检查项

  • 确认 Python 满足 >=3.10,并确认 CLI 可以执行。
  • 确认扫描目录中包含预期的代码、文档和配置,避免把不应处理的私密目录纳入输入范围。
  • 确认 graphify-out/graph.jsongraph.htmlGRAPH_REPORT.md 均按 README 预期生成。
  • 抽查节点的 Source、关系类型和 EXTRACTED/INFERRED 标记,避免把推断边直接当成源码事实。
  • 在修改代码或资料后重新运行扫描,并比较图文件和报告变化;资料未说明是否支持增量更新或后台监听。

容器运行检查项

Dockerfile 中服务端口为 8080,服务绑定地址为 0.0.0.0,因此部署到共享网络时应结合网络隔离和访问控制。Dockerfile 创建了非 root 用户,这是仓库中明确存在的容器安全措施,但不等于已经提供完整的身份认证、审计、限流或高可用能力。

资料没有提供健康检查端点、结构化日志字段、指标名称、备份策略、数据保留期限、并发上限或 SLA。官方仓库未提供该信息,建议以最新 README 和服务实现为准。

安全与合规边界

graphify 会处理代码、文档、PDF、配置和可能包含会议内容的媒体资料,因此安全边界首先取决于输入内容和语义后端。代码 AST 解析被 README 描述为本地处理;文档和媒体的语义阶段则可能使用人工智能助手模型或配置的 API key,不能把两者视为同一隐私等级。

授权、隐私与隔离要求

  • 仅扫描当前使用者拥有或已获授权处理的代码库、文档和媒体,不把第三方私有资料作为未经许可的输入。
  • 在启用语义后端前,确认组织的数据分类、跨境传输、供应商条款和保留策略允许发送对应内容。
  • 对配置文件、密钥文件、凭据、个人信息和生产数据进行范围控制;仓库资料没有提供自动脱敏能力,因此不能假设工具会自动移除敏感字段。
  • 运行 HTTP MCP 服务时,将端口 8080 放在受控网络中,并使用密钥占位参数对应的认证机制;不要把服务直接暴露给未授权网络。
  • 处理视频下载或转写时,只针对拥有相应访问和使用权的内容;资料没有提供绕过访问控制或版权限制的功能说明。

本项目资料没有显示其用于渗透、绕过检测、账号自动化或模型越狱。任何把图谱用于安全分析的行为,都应限定在授权环境中,并遵守组织的审计与数据处理要求;本文不提供面向未授权目标的攻击教程或绕过技巧。

许可证与商用条款

仓库包含 Apache License 2.0(Apache-2.0)许可证文本,且 pyproject.toml 的许可证字段为 Apache-2.0。该许可证文本授予在其条款约束下的复制、制作衍生作品、公开展示、公开表演、再许可和分发等版权许可,并包含相应的专利许可条款。

Apache-2.0 通常允许商业使用,但具体行为必须遵守仓库随附的 LICENSE 条款。分发原始作品或衍生作品时,LICENSE 明确要求向接收者提供许可证副本、对修改过的文件保留显著修改说明,并保留源代码中的版权、专利、商标和归属声明;若发行包包含 NOTICE 文件,还需按许可证要求保留其中适用的归属信息。

许可证不授予使用许可方商号、商标、服务标志或产品名称的权限,除非属于合理且惯常的来源描述。商用集成、再分发和品牌使用应以仓库 LICENSE、NOTICE 以及相关第三方依赖许可证为准;本文不替代法律意见。

局限性与已知限制

资料展示了能力边界,但没有提供完整的准确率、召回率、吞吐量、内存占用或大仓库性能数据。README 的 Benchmarks 表在所给内容中只有表头片段,不能据此补写任何性能结论。

  • AST 解析主要依赖语法树和静态关系,动态反射、运行时注册、字符串拼接形成的调用关系未在资料中承诺可以完整解析。
  • INFERRED 边是解析后解决或推断的结果,应结合源文件回看,不能与 EXTRACTED 边等同使用。
  • 文档、PDF、图片、视频和音频的语义处理需要人工智能助手模型或配置的 API key;这会引入外部后端选择和数据治理问题。
  • Leiden 能力声明为可选依赖,且 graspologic 的声明带有 Python 版本条件,因此社区发现不应视为所有安装形态中的无条件能力。
  • 项目虽声明支持多种语言和资料类型,但所给资料未提供逐语言测试覆盖、文件大小上限、二进制格式边界和失败恢复策略。
  • 资料没有提供默认环境变量、认证协议细节、服务健康检查、权限分级、并发限制或 SLA。

根据本文作者的经验判断,在动态语言、大量生成代码、复杂宏系统或强依赖运行时状态的项目中,图谱结果更适合做导航和证据索引,而不应替代编译器、测试套件、架构审查或人工代码审阅。

适合谁

当团队的主要问题是“已有资料分散且关系难以追踪”,而不是“缺少一个向量检索服务”时,graphify 的设计更匹配。以下信号可以帮助判断是否值得试用:

  • 团队需要理解多模块 Python、JavaScript、Go 或其他已声明 tree-sitter 语言组成的既有代码库,并希望看到跨文件导入、调用或继承关系。
  • 项目同时维护代码、设计文档、PDF、ADR/RFC、配置和 SQL 模式,需要将这些内容放入同一个查询视图。
  • 开发环境允许使用 Claude Code、Cursor、Codex、Gemini CLI、GitHub Copilot 或 README 列出的其他宿主平台。
  • 团队重视关系来源,愿意区分源码直接提取的 EXTRACTED 边和工具推断的 INFERRED 边。
  • 使用者接受先生成静态图文件,再通过 explainpathquery 查询,而不是要求资料变化后立即自动同步。

不适合谁

如果系统要求严格的实时同步、完整运行时语义或已验证的企业级服务指标,当前资料不足以证明 graphify 满足这些要求。以下信号表示应谨慎评估或选择其他已验证方案:

  • 组织禁止代码、文档或媒体离开本地环境,同时又必须使用外部语义模型处理非代码资料;README 没有承诺所有输入类型都能完全本地完成。
  • 团队需要明确的多租户权限、审计日志、健康检查、限流、SLA 或高可用保证,而仓库资料没有提供这些服务能力说明。
  • 项目的关键关系主要在运行时反射、动态加载、宏展开或数据库运行状态中产生,静态 AST 图无法单独作为完整事实来源。
  • 使用者只需要传统文件全文检索,且不需要节点解释、路径追踪或跨资料关系;此时引入图构建流程的收益可能不足。
  • 团队要求已公布的性能基准、规模上限或逐语言准确率,但当前提供的 README 片段没有完整 Benchmark 数据。

这里的判断不是对替代产品的排名。资料没有明确列出某个具体替代方案的能力或适用条件,因此不对未出现的产品进行对比。

常见问题与排查(FAQ / Troubleshooting)

安装后找不到 graphify 命令怎么办

先确认使用的是 README 给出的 uv tool install graphifyypipx install graphifyy,再确认对应工具的可执行目录已加入当前 shell 的 PATH。资料没有提供不同操作系统的 PATH 修复命令,因此具体处理应以所使用的 uv 或 pipx 文档及仓库最新说明为准。

为什么只解析代码时不需要 API key

README 将代码路径定义为 tree-sitter 本地 AST 解析,并明确说明不使用语言模型且不离开本机。API key 主要涉及文档、PDF、图片、视频和音频的语义处理;是否需要以及使用哪种后端,取决于所启用的资料类型和配置,统一默认值未提供。

如何判断一条关系是否来自源码

查看边上的来源标记:EXTRACTED 表示源文件中存在显式关系,INFERRED 表示由 graphify 解析后解决或推断。对于重要架构结论,应沿着节点的来源文件和行号回查,而不是只依据图上的边标签。

生成的三个文件分别做什么

graph.html 用于浏览器交互查看,README 描述其支持点击节点、过滤和搜索;GRAPH_REPORT.md 保存关键概念、连接和建议问题等摘要;graph.json 保存完整图数据,供后续查询使用。若输出目录或文件缺失,先检查扫描是否完成以及输入目录权限,具体错误信息和恢复机制未在资料中给出。

如何排查 MCP 容器无法访问

核对容器是否按 Dockerfile 示例映射了宿主端口 8080,并确认运行参数包含 /data/graph.json--transport http--host 0.0.0.0--port 8080。同时确认宿主机的 graphify-out/graph.json 已通过卷挂载出现在容器的 /data/graph.json,以及访问端使用了正确的 API key;仓库没有提供健康检查端点,不能据此构造额外探测命令。

项目是否提供性能上限或 SLA

所给 README 资料只露出 Benchmark 表的开始部分,没有完整指标;仓库资料也没有提供 SLA。任何关于可处理节点数、并发请求数、运行时延迟或生产可用性的结论,都应标注为未提供,不能从 Star、Fork 或依赖版本推算。

项目地址与资源

以下链接均出现在仓库资料或其 README 中,适合用于获取源码、文档、包信息和项目相关页面。

项目的许可文本位于仓库中的 LICENSE 文件,打包配置位于 pyproject.toml,容器化 MCP 服务的构建与启动方式位于 Dockerfile。版本、支持平台、扩展依赖和命令行为会随默认分支 v8 的后续提交变化,实际部署前应核对最新仓库资料。