--- name: graphify-analysis 调研笔记 description: Graphify v0.4.8 源码解析 + GitNexus 替换评估的完整调研记录 type: project --- ## 立项背景 2026-04-13 用户看到营销推文("Graphify 用 GraphRAG 技术……71.5 倍 Token 节省")后要求评估: 1. 这项目是不是噱头? 2. 要不要把工作看板的代码图谱(GitNexus)换成这个? ## 关键判断 **Graphify 本质**: tree-sitter AST + networkx + Leiden + 10 种导出 + 9 种 AI 平台集成脚本。 8,237 行 Python,**零 LLM 硬依赖**,"智能"部分委托给宿主 Agent(Claude Code / Codex / ...)。 **"GraphRAG" 营销**: 与微软原论文定义(LLM 抽实体+关系+写社区摘要)不符。Graphify 只做了社区检测这一步。 **"71.5× token 节省"**: = 整个语料 token 数 / 单次 BFS 子图 token 数。不含首次建图的 subagent token 成本。固定 5 个英文问题 + 子串匹配选起点。**数字成立但有水分**。 ## GitNexus vs Graphify 对比结论 | 维度 | GitNexus | Graphify | |---|---|---| | 规模 | 31,367 行 TS | 8,237 行 Py | | 类型系统 | symbol-table + type-env + type-extractors | 无 | | Python MRO | 有 (`mro-processor.ts`) | 无 | | 框架识别 | 有 (`framework-detection.ts`) | 无 | | 入口打分 | 有 (`entry-point-scoring.ts`) | 无 | | 跨文件 resolver | 完整 `resolvers/` 子系统 | 只 Python 130 行 | | 多项目 UI | Web @ 4090 | 每项目一目录 | | 诚信度标签 | 未知 | EXTRACTED/INFERRED/AMBIGUOUS | **GitNexus 在代码静态分析维度领先一个量级。不要替换。** ## 可从 Graphify 借鉴给 GitNexus 的 7 个点 1. 三档置信度标签 + `confidence_score`(Graphify `extract.py` / `report.py`) 2. Markdown 剥 YAML frontmatter 再哈希(`cache.py:10-17`)—— metadata 变更不触发重抽取 3. 论文启发式识别 `_looks_like_paper`(`detect.py:68`,13 条正则) 4. 敏感文件过滤 `_SENSITIVE_PATTERNS`(`detect.py:33-40`) 5. SSRF 防护整套(`security.py:14-90`) 6. 大社区 25% 自动拆分(`cluster.py:93`) 7. URL 分类抓取(`ingest.py`,297 行,twitter/arxiv/github/youtube/pdf/image/web) ## 技术亮点(Graphify 值得一看的 8 件事) 1. `LanguageConfig` dataclass 模式(`extract.py:24`)—— 13 语言共用 200 行通用 walker 2. SHA256 内容缓存 + Markdown frontmatter 剥离(`cache.py`) 3. Python 跨文件 `_resolve_cross_file_imports`(`extract.py:2110-2240`)—— 整个项目唯一真正跨文件推理 4. 单 HTML 交互图(`export.py:329`,内嵌 vis.js) 5. 9 平台集成脚本(`__main__.py:49-105`) 6. SSRF 防护默认开启 7. 大社区自动拆分(防 Leiden 退化) 8. 置信度三档 + 分数 ## 技术短板(9 条) 1. 22 语言"支持"不均匀 —— 只有 Python 做了跨文件 uses 推断 2. `_extract_python_rationale`(`extract.py:1011`)基于 docstring 的 heuristics 脆 3. 查询不是语义搜索,是子串 +1/+0.5 打分 4. `_make_id` 用 `[^a-zA-Z0-9]+` 正则 —— 中文标识符直接 collapse 成空串 5. 静态 AST 解析,看不穿 C++ 模板 / Python metaclass / JS Proxy 6. benchmark 71.5× 固定 5 个英文问题 7. 无类型系统 / 无 symbol table / 无 MRO 8. `_is_file_node` 启发式在非 Python 语言误伤 9. PyPI 名 `graphifyy`(两个 y,赶时间) ## 产出 - `public/index.html` — 单页深色主题报告(~600 行 HTML) - 本地快照: `graphify/` 子目录(v0.4.8, commit `04e2960`) - 部署目标: `https://graphify-analysis.kang-kang.com`(Coolify 静态) ## 用户决策记录 - **不换 GitNexus**(用户确认) - **立项并部署网页**(用户 2026-04-13 指示) - **子域名**: `graphify-analysis.kang-kang.com` - **可见性**: public(无密钥) - **部署方式**: Coolify + Dockerfile(nginx:alpine)