发布时间: 2026年4月21日
项目地址: safishamsi/graphify
PyPI 包名: graphifyy
核心亮点: 🚀 71.5 倍 Token 节省
📹 视频讲解
一、项目概述
1.1 什么是 Graphify?
Graphify 是一个革命性的 AI 编码助手技能,由 Safi Shamsi 开发。它能将任意文件夹(代码、文档、论文、图片、视频)转换为可查询的知识图谱,帮助 AI 助手以前所未有的效率理解代码库结构。
🔥 核心亮点:与直接读取原始文件相比,每次查询 Token 消耗可降低 71.5 倍!
1.2 项目背景
Graphify 的诞生灵感来源于 Andrej Karpathy 的 /raw 文件夹工作流:
Andrej Karpathy 维护一个 /raw 文件夹,把论文、推文、截图和笔记都丢进去,然后用 LLM 编译成 wiki 导航。
他最后留下了一个挑战:“I think there is room here for an incredible new product instead of a hacky collection of scripts.”
Graphify 就是这个问题的答案。
1.3 解决的问题
| 传统 RAG 痛点 | Graphify 解决方案 |
|---|
| 上下文窗口有限 | 构建持久化知识图谱 |
| 暴力文本匹配效率低 | 图拓扑结构发现语义关联 |
| 缺乏全局系统级认知 | 跨文件隐性关系捕捉 |
| 每次查询都要重新读取 | 图查询 vs 全量文件读取 |
二、技术架构深度解析
2.1 核心技术栈
| 组件 | 技术选型 | 作用 |
|---|
| 图数据结构 | NetworkX | 构建、操作知识图谱 |
| 代码解析 | tree-sitter | 25+ 编程语言的 AST 解析 |
| 语义提取 | Claude | 从非结构化内容提取概念和关系 |
| 社区发现 | Leiden 算法 | 图拓扑聚类 |
| 视频转录 | faster-whisper | 本地音频转文字 |
2.2 两阶段提取策略
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| ┌─────────────────────────────────────────────────────────────────┐
│ 第一阶段:确定性 AST 提取 │
├─────────────────────────────────────────────────────────────────┤
│ ✅ tree-sitter 解析代码文件 │
│ ✅ 提取:类、函数、导入、调用图、docstring、注释 │
│ ✅ 无需 LLM,100% 确定性和可复现性 │
│ ✅ 覆盖:25+ 编程语言 │
│ │
│ 支持语言:Python, JavaScript, TypeScript, Go, Rust, Java, │
│ C, C++, Ruby, C#, Kotlin, Scala, PHP, Swift, Lua, Zig, │
│ PowerShell, Elixir, Objective-C, Julia, Verilog, SystemVerilog, │
│ Vue, Svelte, Dart 等 │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ 第二阶段:LLM 语义提取 │
├─────────────────────────────────────────────────────────────────┤
│ ✅ Claude 子代理并行处理文档、论文、图片 │
│ ✅ 提取:概念、关系、设计动机 │
│ ✅ 视频/音频:faster-whisper 本地转录 │
│ ✅ 缓存机制:SHA256 哈希,重复运行只处理变更文件 │
└─────────────────────────────────────────────────────────────────┘
|
2.3 核心处理流程
1
2
3
4
5
6
7
8
9
10
| ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ detect() │───▶│ extract() │───▶│ build_graph │───▶│ cluster() │
│ 文件检测 │ │ 提取节点边 │ │ 构建图 │ │ 社区发现 │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ export() │◀───│ report() │◀───│ analyze() │◀───│ (合并) │
│ 导出输出 │ │ 生成报告 │ │ 图分析 │ │ │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
|
2.4 核心模块职责
| 模块 | 行数 | 功能描述 |
|---|
extract.py | 3277 | 核心提取逻辑(最大模块) |
export.py | 1014 | 导出功能(HTML/JSON/维基) |
__main__.py | 1371 | CLI 入口 |
analyze.py | 540 | 图分析(God nodes 发现) |
detect.py | 510 | 文件检测 |
serve.py | 373 | MCP 服务器 |
build.py | 107 | 图构建 |
cluster.py | 137 | Leiden 社区检测 |
三、创新特性
3.1 图拓扑聚类(无 Embeddings)
关键创新:采用纯图拓扑结构的 Leiden 社区发现算法,完全不需要 Embeddings 和向量数据库!
1
2
3
| # 聚类基于边密度,而非语义相似度
# Claude 提取的 `semantically_similar_to` 边(标记 INFERRED)
# 直接影响社区检测,无需额外向量计算
|
这种设计带来了显著优势:
| 对比维度 | Graphify | 传统向量 RAG |
|---|
| 索引方式 | 图拓扑 | 向量 Embeddings |
| 跨文件关系 | ✅ 显式图边 | ❌ 隐式相似度 |
| 社区发现 | ✅ Leiden | ❌ 需要额外组件 |
| 部署复杂度 | 低(纯 Python) | 中(向量数据库) |
3.2 关系置信度标签
Graphify 引入了一套透明的关系标签系统:
| 标签 | 含义 | 示例 |
|---|
EXTRACTED | 源文件明确声明 | import requests → imports 关系 |
INFERRED | 合理推断(含置信度) | 共现上下文 → semantically_similar_to |
AMBIGUOUS | 不确定(需人工复核) | 在 GRAPH_REPORT.md 中标记 |
💡 设计理念:你永远知道哪些是”发现”的,哪些是”推断”的。
3.3 多模态统一处理
| 模态 | 处理方式 | 工具 |
|---|
| 代码 | tree-sitter AST | 确定性解析 |
| 文档/PDF | LLM 提取 | Claude |
| 图片/截图 | Vision API | Claude vision |
| 视频/音频 | Whisper 转录 | faster-whisper |
| 白板图/流程图 | Vision API | Claude vision |
3.4 输出成果
1
2
3
4
5
6
| graphify-out/
├── graph.html # 可交互图谱 - 浏览器打开,节点可点击、搜索、过滤
├── GRAPH_REPORT.md # God nodes、意外连接、建议提问
├── graph.json # 持久化图谱 - 数周后可查询,无需重新读取原始文件
├── wiki/ # 维基站(可选)
└── cache/ # SHA256 缓存 - 重复运行只处理变更文件
|
四、真实案例分析
4.1 httpx 代码库分析
对 httpx 库(Python HTTP 客户端)进行图谱构建:
1
2
3
| Corpus: 6 files · ~2,047 words
图谱: 144 nodes · 330 edges · 6 communities detected
提取质量: 53% EXTRACTED · 47% INFERRED · 0% AMBIGUOUS
|
God Nodes(核心抽象)
| 排名 | 节点 | 边数 |
|---|
| 1 | Client | 26 edges |
| 2 | AsyncClient | 25 edges |
| 3 | Response | 24 edges |
| 4 | Request | 21 edges |
| 5 | BaseClient | 18 edges |
意外发现的关系
1
2
3
4
5
| Timeout --uses--> URL [INFERRED]
Timeout --uses--> Headers [INFERRED]
Timeout --uses--> Cookies [INFERRED]
Timeout --uses--> BaseTransport [INFERRED]
Timeout --uses--> HTTPTransport [INFERRED]
|
这些「意外连接」揭示了代码库中隐藏的设计模式!
社区划分
| 社区 | 名称 | 节点数 | 内聚度 |
|---|
| 0 | Transport 层 | 8 | 0.11 |
| 1 | 配置层 | 9 | 0.13 |
| 2 | Client 层 | 3 | 0.12 |
| 3 | 数据模型层 | 3 | 0.11 |
| 4 | 异常处理 | 20 | 0.16 |
4.2 Karpathy 代码仓库分析
对 Andrej Karpathy 的 nanoGPT、minGPT、micrograd 等仓库进行分析:
1
2
3
4
| Corpus: 49 files · ~92,616 words
图谱: 285 nodes · 340 edges · 53 communities detected
提取质量: 81% EXTRACTED · 19% INFERRED · 0% AMBIGUOUS
Token 消耗: 6,000 input · 3,500 output
|
发现的关键概念
| 排名 | 节点 | 边数 |
|---|
| 1 | Value | 15 edges |
| 2 | Training Script | 11 edges |
| 3 | GPT | 9 edges |
| 4 | Layer | 8 edges |
| 5 | CharDataset | 7 edges |
揭示的跨仓库关系
1
2
3
4
5
6
7
8
| from_pretrained() --calls--> get_default_config()
nanoGPT/model.py → minGPT/mingpt/model.py
GPT Language Model (minGPT) --conceptually_related_to--> GPT Model Class
minGPT/mingpt/model.py → nanoGPT/model.py
CausalSelfAttention (minGPT) --conceptually_related_to--> CausalSelfAttention Module
minGPT/mingpt/model.py → nanoGPT/model.py
|
五、多平台支持
5.1 支持的平台一览
| 平台 | 安装命令 | Always-on 机制 |
|---|
| Claude Code | graphify install | PreToolUse hook + CLAUDE.md |
| Codex | graphify install --platform codex | PreToolUse hook + AGENTS.md |
| OpenCode | graphify opencode install | plugin + AGENTS.md |
| Cursor | graphify cursor install | Always-on rules |
| Gemini CLI | graphify gemini install | BeforeTool hook |
| VS Code Copilot | graphify vscode install | copilot-instructions.md |
| Aider | graphify install --platform aider | AGENTS.md |
| OpenClaw | graphify install --platform claw | AGENTS.md |
| Factory Droid | graphify install --platform droid | Task tool |
| Trae | graphify install --platform trae | Agent tool |
| GitHub Copilot CLI | graphify copilot install | global skill |
5.2 Always-on vs 显式触发
| 模式 | 机制 | 用途 |
|---|
| Always-on hook | 每次工具调用前注入 GRAPH_REPORT.md | 日常导航 |
/graphify query | 遍历 graph.json hop-by-hop | 精确问答 |
/graphify explain | 追踪节点间路径 | 关系追溯 |
/graphify path | 边级别详情(含置信度) | 深度分析 |
六、使用指南
6.1 快速开始
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 1. 安装
pip install graphifyy && graphify install
# 2. 在 AI 编码助手中执行
/graphify .
# 3. 查看输出
open graphify-out/graph.html # 交互图谱
cat graphify-out/GRAPH_REPORT.md # 分析报告
# 4. 持续更新
graphify update . # 增量更新
graphify watch . # 文件监控自动重建
|
6.2 排除不需要的文件夹
创建 .graphifyignore 文件:
# .graphifyignore
vendor/
node_modules/
dist/
*.generated.py
6.3 团队协作建议
1
2
3
4
5
6
7
8
9
| # .gitignore 建议
graphify-out/cache/ # 忽略缓存,提交图谱
# 推荐工作流
1. 一人运行 /graphify . 构建初始图谱,提交
2. 其他成员 pull 后 AI 助手立即获得上下文
3. 安装 post-commit hook:graphify hook install
4. 代码变更自动重建(AST 部分,无需 LLM)
5. 文档/论文变更后手动 /graphify --update
|
七、安全设计
7.1 安全机制
| 机制 | 实现 |
|---|
| URL 验证 | 只允许 http/https,_NoFileRedirectHandler 阻止 file:// 重定向 |
| 内容获取 | 大小限制 + 超时控制 |
| 图路径验证 | 必须解析到 graphify-out/ 内 |
| 节点标签 | 控制字符剥离、256 字符上限、HTML 转义 |
详见 SECURITY.md
八、发展现状
8.1 版本轨迹
- 最新版本:v0.4.23 (2026-04-18)
- 累计提交:145+ commits
- 活跃开发:几乎每天都有更新
- 国际支持:中、英、日、韩四国语言 README
8.2 近期亮点更新
| 版本 | 日期 | 亮点 |
|---|
| v0.4.23 | 04-18 | Go stdlib 导入修复、HTML 文件支持 |
| v0.4.21 | 04-17 | MDX 支持、跨文件调用扩展 |
| v0.4.20 | 04-17 | JS/MJS 导入修复 |
| v0.4.19 | 04-17 | Kiro 支持、Leiden 性能优化 |
| v0.4.15 | 04-15 | VS Code Copilot Chat 支持 |
| v0.4.13 | 04-14 | Verilog/SystemVerilog 支持 |
| v0.4.10 | 04-13 | Dart/Flutter、Blade 模板支持 |
九、总结与建议
9.1 项目优势
| 优势 | 说明 |
|---|
| 🚀 革命性效率 | 71.5x Token 节省 |
| 🔧 工程化完善 | 完善的测试覆盖、安全机制、缓存策略 |
| 🌐 多模态统一 | 代码、文档、图片、视频一站式处理 |
| 🤖 AI 原生 | 专为 AI 编码助手设计 |
| 📊 图拓扑优先 | 拒绝黑盒 Embeddings |
| 🔄 增量更新 | SHA256 缓存 + watch 模式 |
| 🎯 透明可追溯 | EXTRACTED/INFERRED/AMBIGUOUS 标签 |
9.2 适用场景
- ✅ 理解陌生代码库
- ✅ 大型遗留代码重构
- ✅ 团队知识共享
- ✅ 个人知识管理(Karpathy 风格)
- ✅ AI 编程助手增强
- ⚠️ 实时性要求极高的场景(需额外优化)
9.3 可改进之处
| 方向 | 建议 |
|---|
| 可视化 | 3D 图谱、多层钻取 |
| 协作 | 冲突解决、多人编辑 |
| 性能 | 更大规模代码库优化 |
| AI | 更智能的关系推断 |
参考资料
- GitHub 仓库:https://github.com/safishamsi/graphify
- Medium 文章:How to Use Graphify: Turn Any Folder Into a Knowledge Graph
- PyPI 包:
pip install graphifyy - codeKK 介绍:https://p.codekk.com/detail/python/safishamsi/graphify
本文由俺老猪 🐷 深度分析撰写,基于 GitHub 源码、Medium 原版文章及网络资料综合整理。