知识图谱化
把代码/SQL/文档/脚本目录转成可查询知识图谱的 Agent 技能,多 Agent 通用
其他语言版本
🇺🇸 English | 🇨🇳 简体中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇩🇪 Deutsch | 🇫🇷 Français | 🇪🇸 Español | 🇮🇳 हिन्दी | 🇧🇷 Português | 🇷🇺 Русский | 🇸🇦 العربية | 🇮🇷 فارسی | 🇮🇹 Italiano | 🇵🇱 Polski | 🇳🇱 Nederlands | 🇹🇷 Türkçe | 🇺🇦 Українська | 🇻🇳 Tiếng Việt | 🇮🇩 Bahasa Indonesia | 🇸🇪 Svenska | 🇬🇷 Ελληνικά | 🇷🇴 Română | 🇨🇿 Čeština | 🇫🇮 Suomi | 🇩🇰 Dansk | 🇳🇴 Norsk | 🇭🇺 Magyar | 🇹🇭 ภาษาไทย | 🇺🇿 Oʻzbekcha | 🇹🇼 繁體中文 | 🇵🇭 Filipino | 🇮🇱 עברית
在 AI 编码助手中输入 /graphify,它就会将你的整个项目(代码、文档、PDF、图片、视频)映射成一个知识图谱,让你可以通过查询代替在文件里 grep。
- 免费、完全本地的代码映射。 代码通过 tree-sitter AST 解析:确定性的,不依赖 LLM,数据不会离开你的机器。(文档、PDF、图片和视频会使用你助手的模型,或配置的 API 密钥,进行一次语义分析。)
- 每个连接都有解释。 每条边都被标记为
EXTRACTED(显式存在于源码中)或INFERRED(由 graphify 解析得出),这样你就能区分哪些是直接读取的,哪些是推断的。 - 不是向量索引。 没有嵌入,没有向量存储:而是一个你可以直接遍历的真实图谱。你可以提问、追踪两个概念之间的路径,或者解释某一个概念。
希望这个功能始终开启,在你的代码、文档和会议中后台自动更新,而不仅仅是按需运行?这正是我们在 graphify.com 上正在构建的产品。你可以在那里加入等候列表。
由 graphify 映射的 FastAPI 代码库。每个节点是一个概念,颜色表示检测到的社区,整个图谱可以在 graph.html 中点击交互。
快速开始(30 秒):
uv tool install graphifyy # 安装 CLI(或:pipx install graphifyy)
graphify install # 向你的 AI 助手注册技能
然后,在你的 AI 助手中输入:
/graphify .
完成。你会得到三个文件:
graphify-out/
├── graph.html 在浏览器中打开——可点击节点、筛选、搜索
├── GRAPH_REPORT.md 高亮摘要:核心概念、意外的连接、建议的问题
└── graph.json 完整图谱——无需重新读取文件即可随时查询
支持 Claude Code、Cursor、Codex、Gemini CLI、GitHub Copilot 等 15 多个平台——选择你的平台。
实际效果
图谱构建完成后,你就可以通过查询代替阅读文件。以下是在上述 FastAPI 代码库上运行 graphify 的真实输出:
$ graphify explain "APIRouter"
Node: APIRouter
Source: routing.py L2210
Community: 2
Degree: 47
Connections (47):
--> RequestValidationError [uses] [INFERRED]
--> Dependant [uses] [INFERRED]
--> .get() [method] [EXTRACTED]
<-- __init__.py [imports] [EXTRACTED]
...
$ graphify path "FastAPI" "ModelField"
Shortest path (3 hops):
FastAPI --uses--> DefaultPlaceholder <--references-- get_request_handler() --references--> ModelField
每条边都带有一个置信度标签(EXTRACTED = 源码中显式存在,INFERRED = 通过解析推导得出),因此你可以区分出哪些是直接读取的,哪些是推断的。graphify query "<question>" 针对自然语言问题返回一个范围化的子图,graphify path A B 则追踪任意两个概念之间的连接方式。
功能介绍
开箱即用的能力:
| 能力 | 作用 |
|---|---|
| 中心节点 | 显示连接最多的概念,让你了解一切通过什么流转 |
| 社区 | 将图谱划分为子系统(Leiden 算法),并生成不依赖 LLM 的标签 |
| 跨文件链接 | 通过 tree-sitter AST 解析约 40 种语言中的 calls / imports / inherits / mixes_in |
| 查询、路径、解释 | 提问、追踪两个事物之间的路径或解释一个概念,全部基于 graph.json |
| 设计文档引用 | # NOTE: / # WHY: 注释以及 ADR/RFC 引用会成为一级节点,链接到相关代码 |
| 超越代码 | 文档、PDF、图片、视频/音频都能映射到同一个图谱中 |
| 本地优先 | 代码在本地通过 tree-sitter 解析(无需 LLM,数据不离开机器);仅文档/媒体的语义分析会调用后端,且仅在配置了 API 密钥时进行 |
基准测试
| 基准测试 | 指标 | graphify | 对比 |
|---|---|---|---|
| LOCOMO (n=300) | recall@10 | 0.497 | mem0 0.048, supermemory 0.149 |
| LOCOMO (n=300) | 问答准确率 | 45.3% | supermemory 49.7%, mem0 27.3% |
| LongMemEval-S (n=50) | 问答准确率 | 76% | 与 dense RAG 持平 |
| 图构建 | LLM 消耗 | 0 | 大多数系统按 token 计费 |
所有系统均在相同框架下使用相同模型和预算运行,由一位评审员进行评分,并经过第二位评审员的盲验(一致性 90.6%,Cohen’s kappa 0.81)。完整的各系统表格、代码智能结果及复现命令:BENCHMARKS.md。
先决条件
| 要求 | 最低版本 | 检查命令 | 安装方式 |
|---|---|---|---|
| Python | 3.10+ | python --version | python.org |
| uv (推荐) | 任意 | uv --version | curl -LsSf https://astral.sh/uv/install.sh | sh |
| pipx (备选) | 任意 | pipx --version | pip install pipx |
macOS 快速安装(Homebrew):
brew install python@3.12 uv
Windows 快速安装:
winget install astral-sh.uv
Ubuntu/Debian:
sudo apt install python3.12 python3-pip pipx
# 或安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
安装
官方包: PyPI 上的包名为
graphifyy(双 y)。PyPI 上的其他graphify*包与本项目无关。CLI 命令仍然为graphify。
步骤 1 — 安装包:
# 推荐(隔离环境;如果之后找不到 'graphify' 命令,请运行:uv tool update-shell):
uv tool install graphifyy
# 备选方案:
pipx install graphifyy
pip install graphifyy # 可能需要设置 PATH — 见下方说明
步骤 2 — 向你的 AI 助手注册技能:
graphify install
就这样。打开你的 AI 助手并输入 /graphify .
若要将助手技能安装到当前仓库而非你的用户配置中,请添加 --project:
graphify install --project
graphify install --project --platform codex
项目范围的安装会写入当前目录下,例如 .claude/skills/graphify/SKILL.md 或 .agents/skills/graphify/SKILL.md(外加一个技能按需加载的 references/ 附加文件),并输出一个 git add 提示,列出
Codex 使用
$graphify而不是/graphify。
可选扩展(仅安装你需要的)
| 扩展 | 功能 | 安装命令 |
|---|---|---|
pdf | PDF 提取 | uv tool install "graphifyy[pdf]" |
office | .docx 和 .xlsx 支持 | uv tool install "graphifyy[office]" |
google | Google Sheets 渲染 | uv tool install "graphifyy[google]" |
video | 视频/音频转录(faster-whisper + yt-dlp) | uv tool install "graphifyy[video]" |
mcp | MCP stdio 服务器 | uv tool install "graphifyy[mcp]" |
neo4j | Neo4j 推送支持 | uv tool install "graphifyy[neo4j]" |
falkordb | FalkorDB 推送支持 | uv tool install "graphifyy[falkordb]" |
svg | SVG 图导出 | uv tool install "graphifyy[svg]" |
leiden | Leiden 社区检测(仅 Python < 3.13) | uv tool install "graphifyy[leiden]" |
ollama | Ollama 本地推理 | uv tool install "graphifyy[ollama]" |
openai | OpenAI / OpenAI 兼容 API | uv tool install "graphifyy[openai]" |
gemini | Google Gemini API | uv tool install "graphifyy[gemini]" |
anthropic | Anthropic Claude API(--backend claude,使用 ANTHROPIC_API_KEY) | uv tool install "graphifyy[anthropic]" |
bedrock | AWS Bedrock(使用 IAM,无需 API 密钥) | uv tool install "graphifyy[bedrock]" |
azure | Azure OpenAI Service(--backend azure,使用 AZURE_OPENAI_API_KEY + AZURE_OPENAI_ENDPOINT) | uv tool install "graphifyy[openai]" |
sql | SQL 模式提取 | uv tool install "graphifyy[sql]" |
postgres | 实时 PostgreSQL 内省(--postgres DSN) | uv tool install "graphifyy[postgres]" |
dm | BYOND DreamMaker .dm/.dme AST 提取(如果没有匹配你平台的 wheel,可能需要 C 编译器 + python3-dev) | uv tool install "graphifyy[dm]" |
terraform | Terraform / HCL .tf/.tfvars/.hcl AST 提取 | uv tool install "graphifyy[terraform]" |
pascal | Pascal / Delphi .pas/.dpr/.dpk/.inc AST 提取(更准确的 calls/inherits 边;如果没有该扩展,会回退到正则提取器) | uv tool install "graphifyy[pascal]" |
chinese | 中文查询分词(jieba) | uv tool install "graphifyy[chinese]" |
all | 以上所有 | uv tool install "graphifyy[all]" |
让你的助手始终使用知识图谱
在构建完图谱后,在项目中运行一次该命令:
| 平台 | 命令 |
|---|---|
| Claude Code | graphify claude install |
| CodeBuddy | graphify codebuddy install |
| Codex | graphify codex install |
| OpenCode | graphify opencode install |
| Kilo Code | graphify kilo install |
| GitHub Copilot CLI | graphify copilot install |
| VS Code Copilot Chat | graphify vscode install |
| Aider | graphify aider install |
| OpenClaw | graphify claw install |
| Factory Droid | graphify droid install |
| Trae | graphify trae install |
| Trae CN | graphify trae-cn install |
| Cursor | graphify cursor install |
| Gemini CLI | graphify gemini install |
| Hermes | graphify hermes install |
| Kimi Code | graphify install --platform kimi |
| Amp | graphify amp install |
| Agent Skills(跨框架) | graphify agents install(别名 graphify skills install) |
| Kiro IDE/CLI | graphify kiro install |
| Pi coding agent | graphify pi install |
| Devin CLI | graphify devin install |
| Google Antigravity | graphify antigravity install |
这会写入一个小的配置文件,告诉你的助手在回答代码库问题时优先查阅知识图谱,倾向于使用范围查询(如 graphify query "<question>")而不是阅读完整报告或直接 grep 原始文件。
- 钩子平台(Claude Code、Gemini CLI):在搜索类工具调用前自动触发一个钩子(在 Claude Code 上,还会在通过 Read/Glob 工具逐个读取源文件之前触发),引导助手走向图谱路径。
- 指令文件平台(Codex、OpenCode、Cursor 等):持久化的指令文件(
AGENTS.md、.cursor/rules/等)提供相同的优先查询指导。
GRAPH_REPORT.md 仍然可用于进行广泛的架构审视。
CodeBuddy 与 Claude Code 做了两件相同的事:写入 CODEBUDDY.md 部分,告诉 CodeBuddy 在回答架构问题前先读取 graphify-out/GRAPH_REPORT.md,并安装 PreToolUse 钩子(.codebuddy/settings.json),在 Bash 搜索命令和文件读取前触发,引导使用 graphify query 替代。
Codex 写入 AGENTS.md,这实际上是该平台上承载始终开启的图谱引导的机制。graphify codex install 还会在 .codex/hooks.json 中注册一个 PreToolUse 钩子(graphify hook-check),但该条目故意是一个无操作:Codex Desktop 拒绝在 PreToolUse 上使用 hookSpecificOutput.additionalContext,因此在那里发出引导会破坏 Bash 工具调用。与 Claude Code 不同(其钩子 graphify hook-guard 执行引导),在 Codex 上,钩子会触发但有意不做任何事,而 AGENTS.md 是始终开启的机制。
Kilo Code 将 Graphify 技能安装到 ~/.config/kilo/skills/graphify/SKILL.md,并将原生 /graphify 命令安装到 ~/.config/kilo/command/graphify.md。graphify kilo install 还会写入 AGENTS.md 以及一个原生的 tool.execute.before 插件(.kilo/plugins/graphify.js + .kilo/kilo.json 或 .kilo/kilo.jsonc 注册),因此 Kilo 通过原生的 .kilo 配置获得相同的始终开启的图谱提醒行为。
Cursor 写入 .cursor/rules/graphify.mdc 并设置 alwaysApply: true,因此 Cursor 会自动将其包含在每次对话中,无需钩子。
要一次性从所有平台移除 graphify:graphify uninstall(添加 --purge 可同时删除 graphify-out/)。或者使用每个平台的命令(例如 graphify claude uninstall)。
报告内容
- 神节点——项目中连接最多的概念。所有内容都通过这些节点流动。
- 意外连接——存在于不同文件或模块中的事物之间的链接。按意外程度排序。
- “为什么”——内联注释(
# NOTE:、# WHY:、# HACK:)、文档字符串以及来自文档的设计理由会被提取为单独的节点,链接到它们所解释的代码。 - 建议问题——4-5 个图谱特别适合回答的问题。
- 置信度标签——每个推断的关系都标记为
EXTRACTED、INFERRED或AMBIGUOUS。你始终清楚哪些是发现的,哪些是猜测的。
支持的文件类型
| 类型 | 扩展名 |
|---|---|
| 代码(36 种 tree-sitter 语法) | .py .ts .mts .cts .js .jsx .tsx .mjs .go .rs .java .c .cpp .cc .cxx .h .hpp .cu .cuh .metal .rb .cs .kt .kts .scala .php .swift .lua .luau .toc .zig .ps1 .psm1 .psd1 .ex .exs .m .mm .jl .vue .svelte .astro .groovy .gradle .dart .v .sv .svh .sql .f .f90 .f95 .f03 .f08 .pas .pp .dpr .dpk .lpr .inc .dfm .lfm .lpk .sh .bash .json .dm .dme .dmi .dmm .dmf .sln .slnx .csproj .fsproj .vbproj .xaml .razor .cshtml(.dm/.dme 需要 uv tool install graphifyy[dm];.mts/.cts 复用 TypeScript 语法,.cc/.cxx 以及 CUDA 的 .cu/.cuh 和 Metal 的 .metal 复用 C++ 语法) |
| Salesforce Apex | .cls .trigger(基于正则表达式;类、接口、枚举、方法、触发器、SOQL/DML 边) |
| Terraform / HCL | .tf .tfvars .hcl(需要 uv tool install graphifyy[terraform]) |
| MCP 配置 | .mcp.json mcp.json mcp_servers.json claude_desktop_config.json — 提取服务器节点、包引用、环境变量要求 |
| 包清单 | apm.yml pyproject.toml go.mod pom.xml — 每个包(按名称)一个规范包节点,加上 depends_on 边,因此从多个清单中引用的包是一个单一枢纽 |
| 文档 | .md .mdx .qmd .html .txt .rst .yaml .yml(markdown 中的 [text](./other.md) 链接和 [[wikilinks]] 成为文档之间的 references 边) |
| Office 文档 | .docx .xlsx(需要 uv tool install graphifyy[office]) |
| Google Workspace | .gdoc .gsheet .gslides(可选加入;需要 gws 认证和 --google-workspace;Sheets 需要 uv tool install graphifyy[google]) |
.pdf | |
| 图片 | .png .jpg .webp .gif |
| 视频/音频 | .mp4 .mov .mp3 .wav 等(需要 uv tool install graphifyy[video]) |
| YouTube / 网址 | 任意视频 URL(需要 uv tool install graphifyy[video]) |
代码提取在本地完成,无需API调用(通过tree-sitter分析AST)。其他所有操作都通过你的AI助手模型API进行。
Google Drive桌面版的.gdoc、.gsheet和.gslides文件是指向内容的快捷方式,而非实际文档内容。要在无头提取中包含原生Google文档、表格和幻灯片,请安装并认证gws CLI,然后运行:
uv tool install "graphifyy[google]" # needed for Google Sheets table rendering
gws auth login -s drive
graphify extract ./docs --google-workspace
你也可以设置GRAPHIFY_GOOGLE_WORKSPACE=1。Graphify会将快捷方式导出为Markdown sidecar文件,存放在graphify-out/converted/目录下,然后提取这些文件。
常用命令
/graphify . # build graph for current folder
/graphify ./docs --update # re-extract only changed files
/graphify . --cluster-only # rerun clustering without re-extracting
/graphify . --cluster-only --resolution 1.5 # more granular communities
/graphify . --cluster-only --exclude-hubs 99 # suppress utility super-hubs from god-node rankings
/graphify . --no-viz # skip the HTML, just the report + JSON
/graphify . --wiki # build a markdown wiki from the graph
graphify export callflow-html # Mermaid architecture/call-flow HTML (auto-regenerates on every git commit if hook is installed)
/graphify query "what connects auth to the database?"
/graphify path "UserService" "DatabasePool"
/graphify explain "RateLimiter"
/graphify add https://arxiv.org/abs/1706.03762 # fetch a paper and add it
/graphify add <youtube-url> # transcribe and add a video
graphify hook install # auto-rebuild on git commit
graphify merge-graphs a.json b.json # combine two graphs
graphify prs # PR dashboard: CI state, review status, worktree mapping
graphify prs 42 # deep dive on PR #42 with graph impact
graphify prs --triage # AI ranks your review queue (uses whatever backend is configured)
graphify prs --conflicts # PRs sharing graph communities — merge-order risk
请参阅下面的完整命令参考。
忽略文件
在项目根目录创建.graphifyignore文件——语法与.gitignore相同,支持!否定。
.gitignore会被自动遵守。 graphify会读取每个目录中的.gitignore文件。如果同时存在.graphifyignore,两者会合并——.graphifyignore中的模式会最后评估,因此在冲突时优先(包括!否定)。添加.graphifyignore只会排除更多文件,不会重新包含已被.gitignore排除的文件。子目录作用域与git相同——忽略文件只影响其自身的子树。
当被git忽略的生成或转译代码需要包含在图谱中时,传递--no-gitignore给graphify extract。这会禁用.gitignore和.git/info/exclude;但.graphifyignore仍然生效。
# .graphifyignore
node_modules/
dist/
*.generated.py
# only index src/, ignore everything else
*
!src/
!src/**
团队设置
graphify-out/目录应提交到git,这样团队中的每个人都能从图谱开始。
推荐的.gitignore添加项:
graphify-out/cost.json # local only
# graphify-out/cache/ # optional: commit for speed, skip to keep repo small
manifest.json现在是可移植的——键以相对路径存储,并在加载时重新锚定,因此提交它是安全的,避免了首次检出时的完全重建。
工作流程:
- 一人运行
/graphify .并提交graphify-out/。 - 所有人拉取——他们的助手立即读取图谱。
- 运行
graphify hook install以在每次提交后自动重建(仅AST,无API成本)。这还会设置一个git合并驱动,确保graph.json不会留下冲突标记——两个开发者并行提交时,他们的图谱会自动合并。 - 当文档或论文发生变化时,运行
/graphify --update来刷新这些节点。
直接使用图谱
# query the graph from the terminal
graphify query "show the auth flow"
graphify query "what connects DigestAuth to Response?" --graph graphify-out/graph.json
# expose the graph as an MCP server (for repeated tool-call access)
python -m graphify.serve graphify-out/graph.json
python -m graphify.serve --graph graphify-out/graph.json # --graph flag also accepted
# register with Kimi Code:
kimi mcp add --transport stdio graphify -- python -m graphify.serve graphify-out/graph.json
# or serve over HTTP
---
## 隐私
- **代码文件** — 通过 tree-sitter 在本地处理。所有操作均不离开你的机器。纯代码语料库无需 API 密钥 — `graphify extract` 完全离线运行。在混合仓库中,添加 `--code-only` 可仅索引代码,跳过那些原本需要 LLM 处理的文档/PDF/图片。
- **视频 / 音频** — 使用 faster-whisper 在本地转录。所有操作均不离开你的机器。
- **文档、PDF、图片** — 发送至你的 AI 助手进行语义提取(通过 `/graphify` 技能,使用你 IDE 会话当前运行的任何模型)。无头模式下的 `graphify extract` 需要 `GEMINI_API_KEY` / `GOOGLE_API_KEY`(Gemini)、`MOONSHOT_API_KEY`(Kimi)、`ANTHROPIC_API_KEY`(Claude)、`OPENAI_API_KEY`(OpenAI)、`DEEPSEEK_API_KEY`(DeepSeek)、运行中的 Ollama 实例(`OLLAMA_BASE_URL`)、通过标准供应商链提供的 AWS 凭证(Bedrock - 无需 API 密钥,使用 IAM),或 `claude` CLI 二进制文件(Claude Code - 无需 API 密钥,使用你的 Claude 订阅)。`--dedup-llm` 标志使用相同的密钥。
- **数据驻留** — `graphify extract` 根据设置的 API 密钥自动检测使用哪个供应商(优先级:Gemini → Kimi → Claude → OpenAI → DeepSeek → Azure → Bedrock → Ollama)。对于有数据驻留要求的代码,请使用 `--backend ollama`(完全本地)或传递显式的 `--backend` 标志。Kimi(`MOONSHOT_API_KEY`)会路由至中国的 Moonshot AI 服务器。
- **无遥测**、无使用跟踪、无分析。
- **查询日志** — 每次 `graphify query`、`graphify path`、`graphify explain` 和 MCP `query_graph` 调用都会以 JSON Lines 格式记录到 `~/.cache/graphify-queries.log`(时间戳、问题、语料库、返回的节点、时长)。完整子图响应**默认不存储**。设置 `GRAPHIFY_QUERY_LOG_DISABLE=1` 可退出记录,或设置 `GRAPHIFY_QUERY_LOG=/dev/null` 可在不禁用代码路径的情况下静默记录。
---
## 故障排除
**安装后出现 `graphify: command not found`**
CLI 已安装,但其 bin 目录不在 shell 的 `PATH` 中。根据你的安装方式选择修复方法:
- **uv**(`uv tool install graphifyy`):命令被放置在 uv 的 tool bin 目录(`~/.local/bin`)中,新的 macOS/zsh 设置通常不会将该目录加入 `PATH`。运行 `uv tool update-shell`,然后打开新终端。(使用 `uv tool dir --bin` 查找该目录。)
- **pipx**(`pipx install graphifyy`):运行 `pipx ensurepath`,然后打开新终端。
- **pip**(`pip install graphifyy`):pip 将脚本安装到用户 bin 目录,该目录可能不在 `PATH` 中——将 `~/Library/Python/3.x/bin`(macOS)或 `~/.local/bin`(Linux)添加到 `~/.zshrc`/`~/.bashrc` 的 `PATH` 中,或直接运行 `python -m graphify`。
**`uvx graphify …` 或 `uv tool run graphify …` 无法解析 `graphify`**
PyPI 包名为 `graphifyy`;`graphify` 只是它提供的命令。`uv tool run` 将第一个词视为**包名**,因此会查找名为 `graphify` 的包,并报告 `No solution found … no versions of graphify`。显式指定包名:`uvx --from graphifyy graphify install`(等同于 `uv tool run --from graphifyy graphify install`)。或者一次性安装 `uv tool install graphifyy`,然后直接调用 `graphify`。
**`uv run --with graphifyy python -m graphify` 静默运行旧版本**
`uv run` 使用你的**系统** Python,因此如果系统中也存在旧版 `graphifyy`(例如之前 `pip install graphifyy` 过),Python 会优先在 `sys.path` 中找到该副本,而 `--with graphifyy` 不会覆盖它。它不会报错,但你会得到**旧版本**的行为——例如,`OPENAI_BASE_URL` 等环境变量覆盖会被静默忽略,因此请求会命中默认端点,并以 401 错误(看起来像密钥无效)失败。特征是在日志中看到 `warning: skill is from graphify <newer>, package is <older>` 这行——这意味着加载了不同的安装版本,而不仅仅是过时的 skill。检查实际加载的是哪个副本:
```bash
python -c "import graphify; print(graphify.__file__)"
然后直接运行已安装的命令(它会使用 uv 管理的副本),或删除旧的系统副本:
uvx --from graphifyy graphify extract . --backend openai # 显式指定包名
pip uninstall graphifyy # 或移除旧的系统安装
python -m graphify 有效但 graphify 命令无效
你的 shell 的 PATH 不包含该命令安装到的 bin 目录。建议使用 uv tool install / pipx install 而非普通 pip,然后运行 uv tool update-shell / pipx ensurepath 并打开新终端(参见上面的安装说明)。
在 PowerShell 中 /graphify . 导致“路径未被识别”
PowerShell 将开头的 / 视为路径分隔符。在 Windows 上请使用 graphify .(不带斜杠)。
使用 --update 或重建后图中的节点变少
如果重构删除了文件,旧节点会残留。传递 --force(或设置 GRAPHIFY_FORCE=1)可在重建后节点数减少时强制覆盖。
extract 退出并显示“extraction was incomplete … refusing to overwrite”
当提取过程崩溃或遍历无法完整读取语料库时,此次运行的结果会小于完整结果,因此 graphify extract 拒绝用部分结果覆盖现有更大的图(以保护你的 graph.json)。修复底层故障后重新运行,或传递 --allow-partial 强制覆盖。
图中同一实体存在重复节点(幽灵重复) 幽灵重复(同一符号出现两次——一次来自 AST 提取并带有源位置,另一次来自语义提取且不带位置)现在在构建时自动合并。如果你在 v0.8.33 之前构建的图中看到此问题,请运行完整重新提取以清理:
graphify extract . --force
Ollama 显存不足 / 超出上下文窗口 KV-cache 窗口会自动调整大小,但可能对你的 GPU 来说过大。减小它:
GRAPHIFY_OLLAMA_NUM_CTX=8192 graphify extract ./docs --backend ollama --token-budget 4000
LLM returned invalid JSON / Unterminated string 警告
模型的 JSON 响应达到了输出 token 限制,导致字符串被截断。graphify 会自动恢复(它会拆分片段并重新提取两半,同时过大的单个文档会先按标题/段落边界切片,以确保整个文件仍被覆盖),因此这些警告只是噪音,不会造成数据丢失。为减少此类问题,可提高输出上限或缩小每个片段的输出:
GRAPHIFY_MAX_OUTPUT_TOKENS=16384 graphify extract . --mode deep # 提升上限
graphify extract . --mode deep --token-budget 4000 # 更小的输入片段 -> 更小的输出
对于像 OpenRouter 这样的云网关,建议使用 --backend openai(设置 OPENAI_BASE_URL)而非 Ollama 桥接——这是更干净的 OpenAI 兼容路径。如果模型有其自身的最大输出上限,降低 --token-budget 是可靠的手段。
图 HTML 太大,无法在浏览器中打开(>5000 节点) 跳过 HTML 生成,直接使用 JSON:
graphify cluster-only ./my-project --no-viz
graphify query "..."
两个开发者同时提交后,graph.json 出现冲突标记
运行 graphify hook install——它会设置一个 git 合并驱动程序,自动对 graph.json 进行联合合并,从而避免冲突。
提取文档或PDF时返回空节点/边
文档、PDF和图像需要调用LLM——纯代码语料库不需要API密钥。请检查你的API密钥是否已设置,且后端是否正确:
ANTHROPIC_API_KEY=sk-... graphify extract ./docs --backend claude
IDE中提示技能版本不匹配
你安装的graphify版本与技能文件不同。请更新:
uv tool upgrade graphifyy
graphify install # 覆盖技能文件
每次执行graphify extract后Claude Code提示缓存失效
Graphify会将输出文件(graph.json、graphify-out/)写入工作区。如果这些路径没有被忽略,每次写入都会使Claude Code的提示缓存失效,导致下一轮以缓存写入速率强制重新上传。将它们添加到.claudeignore中:
# .claudeignore
graph.json
graphify-out/
完整命令参考
/graphify # 对当前目录执行
/graphify ./raw # 对特定文件夹执行
/graphify ./raw --mode deep # 更具侵略性的关系提取
graphify extract ./raw --code-only # 仅索引代码——本地AST,无需API密钥(跳过文档/PDF/图像);这是一个`extract`标志,而非技能标志
/graphify ./raw --update # 仅重新提取已更改的文件
/graphify ./raw --directed # 保留边的方向
/graphify ./raw --cluster-only # 对现有图重新运行聚类
/graphify ./raw --no-viz # 跳过HTML可视化
/graphify ./raw --obsidian # 生成Obsidian仓库
/graphify ./raw --obsidian --obsidian-dir ~/vault # 写入现有仓库(从不覆盖你自己的笔记或.obsidian配置)
/graphify ./raw --wiki # 构建可供代理爬取的Markdown Wiki
/graphify ./raw --svg # 导出graph.svg
/graphify ./raw --graphml # 导出供Gephi / yEd使用
/graphify ./raw --neo4j # 为Neo4j生成cypher.txt
/graphify ./raw --neo4j-push bolt://localhost:7687
/graphify ./raw --falkordb # 为FalkorDB生成cypher.txt
/graphify ./raw --falkordb-push falkordb://localhost:6379
/graphify ./raw --watch # 文件变化时自动同步
/graphify ./raw --mcp # 启动MCP stdio服务器
/graphify add https://arxiv.org/abs/1706.03762
/graphify add <video-url>
/graphify add https://... --author "Name" --contributor "Name"
/graphify query "what connects attention to the optimizer?"
/graphify query "..." --dfs --budget 1500
/graphify path "DigestAuth" "Response"
/graphify explain "SwinTransformer"
graphify save-result --question "Q" --answer "A" --nodes Foo Bar --outcome useful # 记录问答结果(工作记忆;outcome可选值为useful|dead_end|corrected)
graphify reflect # 将graphify-out/memory/中的结果聚合到reflections/LESSONS.md
graphify reflect --if-stale # 当LESSONS.md已比所有输入更新时,不执行任何操作(每次会话运行成本低)
graphify reflect --out docs/LESSONS.md # 将教训文档写入其他位置
graphify reflect --graph graphify-out/graph.json # 按社区分组教训,并写入工作记忆叠加层(.graphify_learning.json)
# 该叠加层用preferred/tentative/contested标记节点(基于时间衰减,带有来源说明);
# graphify explain / query 会显示"Lesson:"提示,并在源文件移动后标记"code changed — re-verify"
graphify uninstall # 一次性从所有平台移除
graphify uninstall --purge # 同时删除graphify-out/
graphify uninstall --project --platform codex # 仅移除项目级安装文件
graphify hook install # 提交后+检出后钩子
graphify hook uninstall
graphify hook status
# 始终开启的助手说明 - 平台相关
graphify claude install # CLAUDE.md + PreToolUse钩子(Claude Code)
graphify claude uninstall
graphify codebuddy install # CODEBUDDY.md + PreToolUse钩子(CodeBuddy)
graphify codebuddy uninstall
graphify codex install # AGENTS.md + .codex/hooks.json中的PreToolUse钩子(Codex)
graphify opencode install # AGENTS.md + tool.execute.before插件(OpenCode)
graphify kilo install # 原生Kilo技能 + /graphify命令 + AGENTS.md + .kilo插件
graphify kilo uninstall
graphify cursor install # .cursor/rules/graphify.mdc(Cursor)
graphify cursor uninstall
graphify gemini install # GEMINI.md + BeforeTool钩子(Gemini CLI)
graphify gemini uninstall
graphify copilot install # 技能文件(GitHub Copilot CLI)
graphify copilot uninstall
graphify aider install # AGENTS.md(Aider)
graphify aider uninstall
graphify claw install # AGENTS.md(OpenClaw)
graphify claw uninstall
graphify droid install # AGENTS.md(Factory Droid)
graphify droid uninstall
graphify trae install # AGENTS.md(Trae)
graphify trae uninstall
graphify trae-cn install # AGENTS.md(Trae CN)
graphify trae-cn uninstall
graphify hermes install # AGENTS.md + ~/.hermes/skills/(Hermes)
graphify hermes uninstall
graphify amp install # 技能文件(Amp)
graphify amp uninstall
graphify agents install # ~/.agents/skills/ + AGENTS.md(跨框架;别名:graphify skills)
graphify agents uninstall
graphify kiro install # .kiro/skills/ + .kiro/steering/graphify.md(Kiro IDE/CLI)
graphify kiro uninstall
graphify pi install # 技能文件(Pi编码代理)
graphify pi uninstall
graphify devin install # 技能文件 + .windsurf/rules/graphify.md(Devin CLI)
graphify devin uninstall
graphify antigravity install # .agents/rules + .agents/workflows(Google Antigravity)
graphify antigravity uninstall
graphify extract ./docs # 无头LLM提取,用于CI(无需IDE)
graphify extract ./docs --backend gemini # 显式后端:gemini, kimi, claude, openai, deepseek, ollama, bedrock, 或 claude-cli
graphify extract ./docs --backend gemini --model gemini-3.1-pro-preview
graphify extract ./docs --backend ollama # 本地Ollama(设置OLLAMA_BASE_URL / OLLAMA_MODEL)——无需API密钥进行回环
OPENAI_BASE_URL=http://localhost:8080/v1 OPENAI_MODEL=my-model graphify extract ./docs --backend openai # 任何兼容OpenAI的服务器(llama.cpp, vLLM, LM Studio)
ANTHROPIC_BASE_URL=http://localhost:4000 ANTHROPIC_MODEL=my-model graphify extract ./docs --backend claude # 任何兼容Anthropic的端点(LiteLLM代理、网关)
GRAPHIFY_OLLAMA_NUM_CTX=32768 graphify extract ./docs --backend ollama # 覆盖KV缓存窗口(默认自动调整大小)
GRAPHIFY_OLLAMA_KEEP_ALIVE=0 graphify extract ./docs --backend ollama # 每个块后卸载模型(在小GPU上节省VRAM)
graphify extract ./docs --backend bedrock # 通过IAM使用AWS Bedrock——无需API密钥,使用AWS凭证链
graphify extract ./docs --backend claude-cli # 通过Claude Code CLI路由——无需API密钥,使用你的Claude订阅
graphify extract ./docs --backend azure # Azure OpenAI(设置AZURE_OPENAI_API_KEY + AZURE_OPENAI_ENDPOINT)
graphify extract ./docs --max-workers 16 # AST并行度(也可用GRAPHIFY_MAX_WORKERS)
graphify extract --postgres "postgresql://user:pass@host/db" # 直接内省实时PostgreSQL模式
graphify extract ./my-workspace --cargo # 直接内省Rust Cargo工作区依赖
graphify extract ./docs --token-budget 30000 # 针对本地/小型模型使用更小的语义块
graphify extract ./docs --max-concurrency 2 # 更少的并行LLM调用(对本地推理有用)
graphify extract ./docs --api-timeout 900 # 针对慢速本地模型使用更长的HTTP超时(默认600秒)
graphify extract ./docs --google-workspace # 提取前通过gws导出.gdoc/.gsheet/.gslides
graphify extract ./src --no-gitignore # 包含git忽略的源文件;仍遵循.graphifyignore
graphify extract ./docs --mode deep # 通过扩展系统提示进行更丰富的语义提取
graphify extract ./docs --no-cluster # 仅原始提取,跳过聚类
graphify extract ./docs --timing # 将各阶段耗时打印到stderr(也适用于cluster-only)
graphify extract ./docs --force # 即使新图节点数更少也覆盖graph.json(重构后或清除重复项时使用)
graphify extract ./docs --dedup-llm # 对模糊实体对使用LLM裁决(使用相同API密钥)
graphify extract ./docs --global --as myrepo # 提取并注册到跨项目全局图中
GRAPHIFY_MAX_OUTPUT_TOKENS=32768 graphify extract ./docs --backend claude # 针对密集语料库提高输出上限
graphify export callflow-html # graphify-out/<project>-callflow.html
graphify export callflow-html --max-sections 8 # 限制生成的架构部分数量
graphify export callflow-html --output docs/arch.html
graphify export callflow-html ./some-repo/graphify-out
graphify global add graphify-out/graph.json --as myrepo # 将项目图注册到~/.graphify/global-graph.json
graphify global remove myrepo # 从全局图中移除项目
graphify global list # 显示所有已注册仓库及节点/边计数
graphify global path # 打印全局图文件路径
graphify prs # PR仪表盘:CI、审查、工作树、图影响
graphify prs 42 # 深入分析PR #42
graphify prs --triage # AI分类排名(从环境自动检测后端)
graphify prs --worktrees # 工作树 → 分支 → PR映射
graphify prs --conflicts # 共享图社区的PR(合并顺序风险)
graphify prs --base main # 仅筛选针对特定基础分支的PR
graphify prs --repo owner/repo # 针对不同GitHub仓库运行
GRAPHIFY_TRIAGE_BACKEND=kimi graphify prs --triage # 使用特定后端进行分类
graphify clone https://github.com/karpathy/nanoGPT
graphify merge-graphs a.json b.json --out merged.json
graphify --version # 打印已安装版本
graphify watch ./src
graphify check-update ./src
graphify update ./src
graphify update ./src --no-cluster # 跳过重新聚类,仅写入原始AST图
graphify update ./src --force # 即使新图节点数更少也覆盖
graphify cluster-only ./my-project
graphify cluster-only ./my-project --graph path/to/graph.json # 自定义图位置
graphify cluster-only ./my-project --max-concurrency 16 --batch-size 200 # 并行社区标记(大型图)
graphify cluster-only ./my-project --resolution 1.5 # 更多、更小的社区
graphify cluster-only ./my-project --exclude-hubs 99 # 从分区中排除p99度节点
graphify cluster-only ./my-project --no-label # 保留"Community N"占位符
graphify cluster-only ./my-project --backend=gemini # 社区命名使用的后端
graphify cluster-only ./my-project --backend=gemini --model gemini-2.5-pro # 特定模型
graphify label ./my-project # 使用配置的后端(重新)命名社区
graphify label ./my-project --backend=openai --model gpt-4o # 强制使用特定后端和模型
社区名称: 在代理内部(Claude Code、Gemini CLI),代理会自行命名社区。当您运行裸 CLI 时,
cluster-only会使用配置的后端(内置或自定义 OpenAI 兼容提供商)自动命名它们 — 传递--no-label以保留Community N,或运行graphify label按需(重新)生成名称。
了解更多
- 工作原理 — 提取管道、社区检测、置信度评分、基准测试
- ARCHITECTURE.md — 模块分解,如何添加语言
- 可选集成 — Docker MCP Toolkit + SQLite
- The Memory Layer — 关于 graphify 背后理念与端到端架构的书籍
graphify Enterprise
graphify Enterprise 是在 graphify 之上构建的始终在线层,将相同的图方法应用于您整个工作上下文:会议、文件、文档和代码,并在后台持续更新。
专为那些工作跨越数百个对话和文档、永远无法完全重建的人员和团队而设计。
在 graphify.com 加入等候名单。 免费试用即将推出。
贡献指南
开发环境搭建
该项目使用 uv 进行开发工作流。安装一次后,执行:
git clone https://github.com/safishamsi/graphify.git
cd graphify
git checkout v8 # 活跃开发分支
# 创建项目虚拟环境并安装 graphify + 所有额外依赖 + 开发组
#(pytest)。uv 默认安装开发依赖组;传递 --no-dev 可跳过。
uv sync --all-extras
验证可编辑安装:
uv run graphify --version
uv run python -c "import graphify; print(graphify.__file__)"
运行测试
uv run pytest tests/ -q # 运行全套测试
uv run pytest tests/test_extract.py -q # 单个模块
uv run pytest tests/ -q -k "python" # 按名称过滤
macOS 注意:测试套件同时包含
sample.f90和sample.F90测试夹具。在大小写不敏感的 HFS+ / APFS 文件系统上会产生冲突。如果需要同时测试两个 Fortran 变体,请在 Linux 或 Docker 容器中运行。
Git 工作流
- 活跃开发在
v8分支上进行。 - 提交风格:
fix: <description>/feat: <description>/docs: <description> - 在提交 PR 之前,运行
uv run pytest tests/ -q并确认测试通过。 - 为任何新的语言提取器,将测试夹具文件添加到
tests/fixtures/,并将测试添加到tests/test_languages.py。
贡献内容
实践示例是最有用的贡献。在真实语料上运行 /graphify,将输出保存到 worked/{slug}/,撰写一份诚实的 review.md,涵盖图正确和错误的地方,然后提交一个 PR。
提取错误 — 提交一个 issue,附上输入文件、缓存条目(graphify-out/cache/)以及遗漏或错误的内容。
查看 ARCHITECTURE.md 了解模块职责以及如何添加语言。

