知识图谱化
把代码/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 key 进行语义处理)。
- 每条边都有解释。 每个连接都标记为
EXTRACTED(在源码中显式存在)或INFERRED(由 graphify 解析得到),因此你能区分哪些是直接读取的,哪些是推断出来的。 - 不是向量索引。 没有嵌入,没有向量存储:是一个真实可遍历的图。提出问题、追踪两个事物之间的路径,或解释一个概念。
由 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 则追踪任意两个事物之间的连接方式。
它能做什么
开箱即用的能力:
| 能力 | 你获得的内容 |
|---|---|
| God 节点 | 连接最多的概念,让你看到一切流经何处 |
| 社区 | 图被拆分成子系统(Leiden 算法),并附有无 LLM 的标签 |
| 跨文件链接 | 通过 tree-sitter AST 解析约 40 种语言之间的 calls / imports / inherits / mixes_in |
| 查询、路径、解释 | 提出问题、追踪两个事物之间的路径、或解释一个概念,全部针对 graph.json |
| 理由与文档引用 | # NOTE: / # WHY: 注释和 ADR/RFC 引用成为一流节点,与代码关联 |
| 超越代码 | 文档、PDF、图片、视频/音频都能映射到同一个图中 |
| 本地优先 | 代码在本地用 tree-sitter 解析(无需 LLM,不会离开你的机器);仅文档/媒体的语义处理需要调用后端,且仅在你配置后端时才会调用 |
基准测试
| 基准 | 指标 | graphify | Field |
|---|---|---|---|
| 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% | 与稠密RAG持平 |
| 图谱构建 | 大模型信用消耗 | 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 提示。支持项目级安装的平台级命令也接受同样的标志,例如 graphify claude install --project 或 graphify codex install --project。
PowerShell 注意: 请使用
graphify .而非/graphify .— 前导斜杠在 PowerShell 中会被当作路径分隔符。
graphify: command not found?uv tool install/pipx install会将graphify命令放入其工具 bin 目录(~/.local/bin)。如果安装后 shell 立即找不到该命令(常见于全新的 macOS + zsh 环境),说明该目录尚未加入PATH:请运行uv tool update-shell(或pipx ensurepath),然后打开一个新终端。若使用普通pip,请将~/.local/bin(Linux)或~/Library/Python/3.x/bin(Mac)添加到 PATH,或运行python -m graphify。
使用
uvx/uv tool run而非安装? 请指定包名而非命令:uvx --from graphifyy graphify install。直接使用uvx graphify …会失败(No solution found … no versions of graphify),因为uv tool run将第一个单词视为包,而包名为graphifyy—graphify命令位于其内部。
Mac/Windows 上尽量避免使用
pip install。技能会在运行时从graphify-out/.graphify_python解析 Python 路径;若该路径指向的环境与pip安装包的环境不同,你将遇到ModuleNotFoundError: No module named 'graphify'。uv tool install和pipx install将包隔离到自己的环境中,完全避免了此问题。
Git 钩子与 uv tool / pipx:
graphify hook install会在安装时将当前解释器路径直接嵌入钩子脚本中,因此即使在 GUI git 客户端和 CI 运行器中~/.local/bin未加入 PATH,post-commit 钩子也能正确触发。若重新安装或升级 graphify,请重新运行graphify hook install以刷新嵌入的路径。
选择你的平台(20+ 个助手,点击展开)
| 平台 | 安装命令 |
|---|---|
| Claude Code (Linux/Mac) | graphify install |
| Claude Code (Windows) | graphify install(自动检测)或 graphify install --platform windows |
| CodeBuddy | graphify install --platform codebuddy |
| Codex | graphify install --platform codex |
| OpenCode | graphify install --platform opencode |
| Kilo Code | graphify install --platform kilo |
| GitHub Copilot CLI | graphify install --platform copilot |
| VS Code Copilot Chat | graphify vscode install |
| Aider | graphify install --platform aider |
| OpenClaw | graphify install --platform claw |
| Factory Droid | graphify install --platform droid |
| Trae | graphify install --platform trae |
| Trae CN | graphify install --platform trae-cn |
| Gemini CLI | graphify install --platform gemini |
| Hermes | graphify install --platform hermes |
| Kimi Code | graphify install --platform kimi |
| Amp | graphify amp install |
| Agent Skills(跨框架) | graphify install --platform agents(别名 --platform skills) |
| Kiro IDE/CLI | graphify kiro install |
| Pi coding agent | graphify install --platform pi |
| Cursor | graphify cursor install |
| Devin CLI | graphify devin install |
| Google Antigravity | graphify antigravity install |
Codex 用户还需在 ~/.codex/config.toml 的 [features] 下设置 multi_agent = true 以支持并行提取。CodeBuddy 使用与 Claude Code 相同的 Agent 工具和 PreToolUse 钩子机制。Factory Droid 使用 Task 工具进行并行子代理调度。OpenClaw 和 Aider 使用顺序提取(这些平台上并行代理支持仍处于早期阶段)。Trae 使用 Agent 工具进行并行子代理调度,且不支持 PreToolUse 钩子,因此 AGENTS.md 是始终启用的机制。
--platform agents(别名 --platform skills)针对通用跨框架 Agent-Skills 的位置:全局安装写入规范的用户全局目录 ~/.agents/skills/(由 npx skills 和符合规范的框架读取),项目安装(--project)写入 ./.agents/skills/。裸 graphify install 默认仅针对单一平台(Claude Code)— 当你希望技能能被任何读取 .agents/skills 的框架发现时,请使用具名 agents 平台。
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 服务(--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]" |
让您的 AI 助手始终使用图谱
在构建图谱之后,在项目中运行一次以下命令:
| 平台 | 命令 |
|---|---|
| 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 |
这会写入一个小的配置文件,告诉您的 AI 助手在代码库问题上咨询知识图谱,优先使用限定范围的查询(如 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,并安装一个 PreToolUse 钩子到 .codex/hooks.json,在每次 Bash 工具调用之前触发,实现与 Claude Code 相同的始终在线机制。
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)。
报告中包含什么
- 神节点(God nodes) — 项目中连接最多的概念。一切都通过这些节点流动。
- 意外连接 — 存在于不同文件或模块中事物之间的链接。按意外程度排序。
- “为什么” — 内联注释(
# 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 | 任意视频 URL(需要 uv tool install graphifyy[video]) |
代码在本地提取,无 API 调用(通过 tree-sitter 的 AST)。其他类型则通过您的 AI 助手的模型 API 处理。
桌面版 Google Drive 的 .gdoc、.gsheet 和 .gslides 文件是快捷指针,而非文档内容。要在无头提取中包含原生 Google Docs、Sheets 和 Slides,请安装并认证 gws CLI,然后运行:
uv tool install "graphifyy[google]" # 需要用于 Google Sheets 表格渲染
gws auth login -s drive
graphify extract ./docs --google-workspace
您也可以设置 GRAPHIFY_GOOGLE_WORKSPACE=1。Graphify 将快捷方式导出为 graphify-out/converted/ 下的 Markdown 伴生文件,然后提取这些文件。
常用命令
/graphify . # 为当前文件夹构建图谱
/graphify ./docs --update # 仅重新提取变更的文件
/graphify . --cluster-only # 仅重新运行聚类,不重新提取
/graphify . --cluster-only --resolution 1.5 # 更细粒度的社区
/graphify . --cluster-only --exclude-hubs 99 # 从神节点排名中抑制实用工具超级中心
/graphify . --no-viz # 跳过 HTML,只生成报告 + JSON
/graphify . --wiki # 从图谱构建一个 Markdown wiki
graphify export callflow-html # Mermaid 架构/调用流 HTML(如果安装了钩子,会在每次 Git 提交时自动重新生成)
/graphify query "what connects auth to the database?"
/graphify path "UserService" "DatabasePool"
/graphify explain "RateLimiter"
/graphify add https://arxiv.org/abs/1706.03762 # 获取论文并添加
/graphify add <youtube-url> # 转录视频并添加
graphify hook install # 在 Git 提交时自动重新构建
graphify merge-graphs a.json b.json # 合并两个图谱
graphify prs # PR 仪表盘:CI 状态、审查状态、工作树映射
graphify prs 42 # 深入分析 PR #42 及其图谱影响
graphify prs --triage # AI 对您的审查队列进行排序(使用配置的后端)
graphify prs --conflicts # 共享图谱社区的 PR——合并顺序风险
请参见下面的完整命令参考。
忽略文件
在项目根目录创建 .graphifyignore —— 语法与 .gitignore 相同,支持 ! 取反。
.gitignore 会被自动识别。 graphify 会读取每个目录下的 .gitignore。如果同时存在 .graphifyignore,两者会合并 —— .graphifyignore 中的模式会被最后评估,因此在冲突时(包括 ! 取反)会胜出。添加 .graphifyignore 只会排除更多文件;绝不会重新包含已被 .gitignore 排除的文件。子目录作用域规则与 git 相同 —— 忽略文件仅影响其自身子树。
# .graphifyignore
node_modules/
dist/
*.generated.py
# 仅索引 src/,忽略其他所有
*
!src/
!src/**
团队配置
graphify-out/ 应提交到 git,以便团队中的每个人都能拿到一份地图。
推荐的 .gitignore 追加项:
graphify-out/cost.json # 仅本地需要
# graphify-out/cache/ # 可选:提交以加速,跳过则保持仓库小巧
manifest.json现在可移植 —— 键以相对路径存储,并在加载时重新锚定,因此提交它是安全的,并可避免首次检出时完全重建。
工作流程:
- 一人运行
/graphify .并提交graphify-out/。 - 其他人拉取 —— 他们的助手会立即读取图谱。
- 运行
graphify hook install以在每次提交后自动重建(仅 AST,无 API 费用)。这还会设置一个 git 合并驱动程序,使得graph.json永远不会遗留冲突标记 —— 两个开发者并行提交时,他们的图谱会自动进行联合合并。 - 当文档或论文发生变更时,运行
/graphify --update刷新这些节点。
直接使用图谱
# 在终端中查询图谱
graphify query "展示认证流程"
graphify query "DigestAuth 与 Response 之间有何关联?" --graph graphify-out/graph.json
# 将图谱作为 MCP 服务器暴露(用于反复的工具调用访问)
python -m graphify.serve graphify-out/graph.json
python -m graphify.serve --graph graphify-out/graph.json # 也接受 --graph 标志
# 注册到 Kimi Code:
kimi mcp add --transport stdio graphify -- python -m graphify.serve graphify-out/graph.json
# 或者通过 HTTP 提供,使整个团队指向一个 URL(无需本地 graphify):
python -m graphify.serve graphify-out/graph.json --transport http --port 8080
python -m graphify.serve graphify-out/graph.json --transport http --host 0.0.0.0 --api-key "$SECRET"
MCP 服务器为你的助手提供结构化访问:query_graph、get_node、get_neighbors、shortest_path、list_prs、get_pr_impact、triage_prs。
共享 HTTP 服务器
--transport stdio(默认)为每个开发者生成一个本地服务器。--transport http 通过 MCP Streamable HTTP 传输协议提供相同的工具,因此一个共享进程即可为整个团队提供图谱服务 —— 客户端的 IDE MCP 配置指向 http://<host>:8080/mcp 而非本地运行 graphify。
| 标志 | 默认值 | 用途 |
|---|---|---|
--transport {stdio,http} | stdio | 要提供的传输协议 |
--host | 127.0.0.1 | HTTP 绑定主机(使用 0.0.0.0 可暴露到 localhost 之外) |
--port | 8080 | HTTP 绑定端口 |
--api-key | 环境变量 GRAPHIFY_API_KEY | 要求提供 Authorization: Bearer <key>(或 X-API-Key) |
--path | /mcp | HTTP 挂载路径 |
--json-response | 关闭 | 返回纯 JSON 而非 SSE 流 |
--stateless | 关闭 | 无会话状态(用于负载均衡 / CI 部署) |
--session-timeout | 3600 | 闲置状态会话的回收时间(秒)(0 表示禁用) |
默认的 127.0.0.1 绑定仅限回环接口。在共享主机上暴露时请同时设置 --host 0.0.0.0 和 --api-key。在容器中运行:
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"
WSL / Linux 提示: Ubuntu 自带的 Python 命令是
python3而非python。为避免冲突,请使用虚拟环境:python3 -m venv .venv && .venv/bin/pip install "graphifyy[mcp]"
环境变量
以下变量仅在无头 / CI 场景下提取(graphify extract)时才需要。在 IDE 内通过 /graphify 技能运行时,模型 API 由你的 IDE 会话提供 —— 无需额外密钥。
| 变量 | 用于 | 何时需要 |
|---|---|---|
ANTHROPIC_API_KEY | Claude (Anthropic) 后端 | --backend claude |
ANTHROPIC_BASE_URL | Anthropic 兼容的端点 URL(LiteLLM 代理、网关等) | --backend claude(默认:https://api.anthropic.com) |
ANTHROPIC_MODEL | Claude 后端的模型名称 —— 对于自定义端点,使用你的服务器暴露的模型名称/别名 | --backend claude(默认:claude-sonnet-4-6) |
GEMINI_API_KEY 或 GOOGLE_API_KEY | Google Gemini 后端 | --backend gemini |
OPENAI_API_KEY | OpenAI 或 OpenAI 兼容的 API | --backend openai(本地服务器接受任意非空值) |
OPENAI_BASE_URL | OpenAI 兼容的服务器 URL(llama.cpp、vLLM、LM Studio 等) | --backend openai(默认:https://api.openai.com/v1) |
OPENAI_MODEL | OpenAI 后端的模型名称 —— 对于自托管服务器,使用你的服务器暴露的模型名称/别名(请检查其 /v1/models 端点),例如 llama.cpp 的 LFM2.5-8B-A1B-UD-Q4_K_XL | --backend openai(默认:gpt-4.1-mini) |
DEEPSEEK_API_KEY | DeepSeek 后端 | --backend deepseek |
MOONSHOT_API_KEY | Kimi Code 后端 | --backend kimi |
OLLAMA_BASE_URL | Ollama 本地推理 URL | --backend ollama(默认:http://localhost:11434) |
OLLAMA_MODEL | Ollama 模型名称 | --backend ollama(默认:自动检测) |
GRAPHIFY_OLLAMA_NUM_CTX | 覆盖 Ollama KV 缓存窗口大小 | 可选 —— 默认自动调整大小 |
GRAPHIFY_OLLAMA_KEEP_ALIVE | Ollama 模型保持加载的分钟数 | 可选 —— 设为 0 可在每个块处理后卸载 |
AZURE_OPENAI_API_KEY | Azure OpenAI Service 后端 | --backend azure |
AZURE_OPENAI_ENDPOINT | Azure 资源端点 URL | --backend azure(与 API 密钥同时需要) |
AZURE_OPENAI_API_VERSION | Azure API 版本覆盖 | 可选 —— 默认 2024-12-01-preview |
AZURE_OPENAI_DEPLOYMENT 或 GRAPHIFY_AZURE_MODEL | Azure 部署名称 | 可选 —— 默认 gpt-4o |
AWS_* / ~/.aws/credentials | AWS Bedrock —— 标准凭据链 | --backend bedrock(无 API 密钥,使用 IAM) |
GRAPHIFY_MAX_WORKERS | AST 并行线程数 | 可选 —— 也可用 --max-workers 标志 |
GRAPHIFY_MAX_OUTPUT_TOKENS | 为密集语料提升输出上限 | 可选 —— 例如大文件设为 32768 |
GRAPHIFY_API_TIMEOUT | 每次调用的超时秒数(适用于 HTTP、claude-cli 和 Anthropic SDK 后端,默认 600) | 可选 —— 也可用 --api-timeout 标志 |
GRAPHIFY_MAX_RETRIES | 在放弃前重试被限速的 (429) 请求的次数(默认 6;遵循 Retry-After) | 可选 —— 如果组织限制严格(如 kimi)可增大;0 禁用 |
GRAPHIFY_FORCE | 即使节点数较少也强制重建图谱 | 可选 —— 也可用 --force 标志 |
GRAPHIFY_GOOGLE_WORKSPACE | 自动启用 Google Workspace 导出 | 可选 —— 设为 1 |
GRAPHIFY_TRIAGE_BACKEND | graphify prs --triage 的后端 | 可选 —— 根据可用的密钥自动检测 |
GRAPHIFY_TRIAGE_MODEL | 用于分类的模型覆盖 | 可选 —— 例如 claude-opus-4-7 |
GRAPHIFY_QUERY_LOG_ENABLE | 设为 1 以开启本地查询日志(位于 ~/.cache/graphify-queries.log,记录每个查询/路径/解释问题及语料路径)。默认关闭 —— 除非你主动选择,否则不会写入任何内容(#1797) | 可选 |
GRAPHIFY_QUERY_LOG | 启用查询日志并将其写入此路径(而非默认路径) | 可选 —— 除非设置此变量或 _ENABLE,否则关闭 |
GRAPHIFY_QUERY_LOG_DISABLE | 设为 1 以强制关闭查询日志(覆盖启用变量) | 可选 |
GRAPHIFY_QUERY_LOG_RESPONSES | 当日志启用时,同时记录完整的子图谱响应(默认关闭) | 可选 |
GRAPHIFY_MAX_GRAPH_BYTES | 覆盖 512 MiB 的 graph.json 大小上限 —— 例如 700MB、2GB 或纯字节数 | 可选 —— 适用于非常大的语料 |
GRAPHIFY_LLM_TEMPERATURE | 覆盖语义提取的 LLM 温度 —— 例如 0.7,或设为 none 以省略 | 可选 —— 对于 o1/o3/o4/gpt-5 推理模型会自动省略 |
隐私
- 代码文件 — 通过 tree-sitter 在本地处理。不会离开你的机器。纯代码语料无需 API 密钥 —
graphify extract完全离线运行。 - 视频/音频 — 通过 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)、通过标准 provider 链配置的 AWS 凭据 (Bedrock - 无需 API 密钥,使用 IAM),或claudeCLI 二进制文件 (Claude Code - 无需 API 密钥,使用你的 Claude 订阅)。--dedup-llm标志使用相同的密钥。 - 数据驻留 —
graphify extract会根据设置哪个 API 密钥自动检测使用哪个 provider(优先级:Gemini → Kimi → Claude → OpenAI → DeepSeek → Azure → Bedrock → Ollama)。对于有数据驻留要求的代码,使用--backend ollama(完全本地)或传递显式的--backend标志。Kimi (MOONSHOT_API_KEY) 会路由到中国的 Moonshot AI 服务器。 - 无遥测,无使用跟踪,无分析。
- 查询日志 — 每次
graphify query、graphify path、graphify explain和 MCPquery_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 的工具 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中 — 在~/.zshrc/~/.bashrc中添加~/Library/Python/3.x/bin(macOS) 或~/.local/bin(Linux) 到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。
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)以在重建节点更少时仍覆盖。
同一实体出现重复节点(幽灵重复) 幽灵重复(同一符号出现两次 — 一次来自带有源位置的 AST 提取,一次来自无位置的语义提取)现在会在构建时自动合并。如果你在 v0.8.33 之前构建的图中看到这个,请运行完全重新提取来清理:
graphify extract . --force
Ollama 超出 VRAM / 上下文窗口 KV 缓存窗口会自动调整大小,但对于你的 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 merge driver,自动合并 graph.json,这样冲突永远不会发生。
文档或 PDF 的提取返回空的节点/边 文档、PDF 和图片需要 LLM 调用 — 仅代码语料不需要密钥。检查你的 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 ./raw --update # 只重新提取变化的文件
/graphify ./raw --directed # 保留边的方向
/graphify ./raw --cluster-only # 在现有图上重新运行聚类
/graphify ./raw --no-viz # 跳过 HTML 可视化
/graphify ./raw --obsidian # 生成 Obsidian 库
/graphify ./raw --obsidian --obsidian-dir ~/vault # 写入已有 vault(不会覆盖你自己的笔记或 .obsidian 配置)
/graphify ./raw --wiki # 构建可供 agent 爬取的 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 # post-commit + post-checkout 钩子
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 + PreToolUse 钩子,位于 .codex/hooks.json (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 coding agent)
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 ./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 # 显示所有已注册 repo 及节点/边计数
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 # 强制指定后端和模型
社区命名: 在 agent(Claude Code、Gemini CLI)内部,agent 会自动为社区命名。当你运行裸 CLI 时,
cluster-only会使用配置的后端(内置或自定义 OpenAI 兼容提供商)自动命名——传递--no-label可保留Community N,或运行graphify label来按需(重新)生成名称。
了解更多
- 工作原理 — 提取流水线、社区检测、置信度评分、基准测试
- ARCHITECTURE.md — 模块分解,如何添加语言
- 可选集成 — Docker MCP Toolkit + SQLite
- The Memory Layer — 深入讲解 graphify 背后的理念与端到端架构的书籍
基于 graphify 构建:Penpax
Penpax 是构建在 graphify 之上的始终在线层——它将相同的图方法应用于你的整个工作生活:会议、浏览器历史、邮件、文件和代码,并在后台持续更新。
专为那些工作跨越数百个对话和文档、永远无法完全重建的人而设计。无云,完全本地运行。
免费试用即将上线。 加入候补名单 →
贡献指南
开发环境设置
该项目使用 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。

