graphify 图库导出与基准压测完全指南:Wiki、Neo4j、FalkorDB、SVG/GraphML 与 MCP 实时查询服务
2026/9/8 21:34:11 网站建设 项目流程

graphify 图库导出与基准压测完全指南:Wiki、Neo4j、FalkorDB、SVG/GraphML 与 MCP 实时查询服务

【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify

在 graphify 的标准工作流(/graphify <path>及各平台 skill)中,建图完成之后还有一组"锦上添花"的可选步骤:把 graph.json 沉淀为 Agent 可爬取的 Wiki、推送到 Neo4j / FalkorDB 图数据库、导出可嵌入文档的 SVG 与可做可视化分析的 GraphML,或启动一个 MCP stdio 服务让其他 Agent 实时查询知识图谱,并配合 token 缩减基准来量化"图带来的上下文收益"。本文以仓库内用于生成各平台参考手册的共享片段 tools/skillgen/fragments/references/shared/exports.md 为主线,结合 cli.py、exporters/graphdb.py、serve.py、benchmark.py 的源码实现,逐条讲清每条导出命令的触发条件、命令形态、参数默认值与落地产物,读完即可在自己的项目上直接复现整条导出链路。

触发前提:只有显式传参才执行

这些步骤不是默认行为。参考文档开篇就给出了加载条件:只有当用户在某次命令中显式传入了--wiki--neo4j--neo4j-push--falkordb--falkordb-push--svg--graphml--mcp之一,或语料体量足够大(total_words超过 5,000)需要跑 token 缩减基准时,才进入对应的导出子步骤;每种子步骤只响应自己的 flag,一次无任何导出 flag 的默认运行会跳过全部导出。在 skill-agents.md 的使用示例中可以看到这些 flag 的典型组合:

/graphify <path> --neo4j-push bolt://localhost:7687 # push directly to Neo4j /graphify <path> --falkordb-push falkordb://localhost:6379 # push directly to FalkorDB /graphify <path> --wiki # build agent-crawlable wiki

从 CLI 入口看,导出动作统一收敛为graphify export <format>子命令。在 cli.py 中,export子命令的合法格式包括htmlcallflow-htmlobsidianwikisvggraphmlneo4jfalkordb,其余格式会打印完整用法后退出。默认读取graphify-out/graph.json,可选标签文件默认是graphify-out/.graphify_labels.json--graph--labels均可覆盖默认路径。

Step 6b:Wiki 导出(--wiki

当原始命令显式带--wiki时才执行。这一步必须在 Step 9(清理)之前运行,因为清理会移除仍被导出过程依赖的.graphify_labels.json

graphify export wiki

落地为graphify-out/wiki/目录。从 cli.py 的wiki分支可以看到两点关键行为:

  • 若缺少社区数据(.graphify_analysis.json缺失或为空),CLI 会拒绝导出以防数据丢失,提示先运行graphify extract .graphify cluster-only .
  • 产物由 wiki.py 的to_wiki()生成:index.md(Agent 入口目录,列出全部文章)+ 每个社区一篇<CommunityName>.md+ 每篇 god node 专文;to_wiki()会对社区成员列表做图内节点过滤,剔除已被去重/裁剪的悬空 ID,避免导出中途崩溃。

graphify export wiki结束后会输出两行提示:Wiki: N articles written to <out>/wiki/以及index.md -> agent entry point,指引 Agent 从wiki/index.md开始爬取。

Step 7:Neo4j 导出(--neo4j/--neo4j-push

Neo4j 有"生成文件"与"直推实例"两种模式,按传入的 flag 区分。

--neo4j:生成可手工导入的 Cypher 文件

graphify export neo4j

生成cypher.txt,随后用cypher-shell < graphify-out/cypher.txt导入。生成逻辑在 export.py 的to_cypher()中:每个节点一行MERGE (n:Type {id:..., label:...});,每条边先MATCH两端再MERGE关系(携带confidence属性)。采用MERGE意味着重复执行不会产生重复节点/边。值得注意的安全实现:节点标签与关系类型位于 Cypher 的标识符位置(不可转义),因此只允许[A-Za-z0-9_]字符并通过_cypher_label()做白名单清洗、非法值回退到Entity/RELATES_TO;字符串字面量则经_cypher_escape()处理引号、反斜杠与换行,防止恶意标签跳出语句边界注入新的 Cypher(源码注释标记为 F-008 防护)。

--neo4j-push <uri>:直推运行中的 Neo4j

graphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD

默认 URI 为bolt://localhost:7687,默认用户为neo4j。底层实现在 exporters/graphdb.py 的push_to_neo4j():它通过 Python driver(需先pip install neo4j)把节点props(附加community字段)以MERGE ... SET n += $props方式 upsert,边以MATCH + MERGE关联并携带属性,全程使用参数化查询与标签白名单防止 Cypher 注入;返回{"nodes": N, "edges": N}计数,CLI 会打印Pushed to Neo4j: ...

密码安全提示:CLI 参数解析(cli.py)优先读取NEO4J_PASSWORD环境变量(F-031 防护,避免密码出现在ps输出与 shell 历史中),显式的--password仅作覆盖。

Step 7a:FalkorDB 导出(--falkordb/--falkordb-push

FalkorDB 走 OpenCypher 兼容路径,但语义上与 Neo4j 有一个关键差异:

--falkordb:生成 Cypher 文件(谨慎使用)

graphify export falkordb

与 Neo4j 相同,该模式也是调用to_cypher()生成可移植的cypher.txt。但文档明确提醒:FalkorDB 的GRAPH.QUERY一次只执行一条语句,没有 Neo4jcypher-shell那样的批量脚本导入机制,因此文件产物主要用于保留可移植副本,加载图优先使用直推模式。CLI 在生成后也会打印同样的提示(cli.py)。

--falkordb-push <uri>:直推运行中的 FalkorDB

graphify export falkordb --push falkordb://localhost:6379

默认 URI 为falkordb://localhost:6379。底层实现在 exporters/graphdb.py 的push_to_falkordb():需要pip install falkordb。它只从 URI 提取 host/port,因此scheme 仅是提示性的——falkordb://localhost:6379redis://localhost:6379乃至裸写localhost:6379都等价(默认端口 6379);认证是可选的(FalkorDB 默认无凭据运行),仅当实例要求认证时才向用户询问,且会忽略 Neo4j 风格的默认用户名;目标图名默认为graphify,通过db.select_graph("graphify")选择。写入同样采用MERGE/SET,可安全重复执行。

Step 7b / 7c:SVG 与 GraphML 导出(--svg/--graphml

graphify export svg graphify export graphml
  • graphify export svg调用 export.py 的to_svg(),产物为graph.svg,可按社区着色。CLI 提示它"可嵌入 Obsidian、Notion、GitHub README"等 Markdown 环境。
  • graphify export graphml调用 export.py 的to_graphml(),产物为graph.graphml,面向 Gephi、yEd 等桌面可视化/分析工具。

导出路径上同样有健壮性处理:GraphML 序列化要求字符串必须是合法 XML 1.0,导出前会剥离控制字符(_strip_xml_illegal),否则单个含 ANSI 转义或换页符的标签会让整个导出在nx.write_graphml处抛ValueError中止(源码注释标记 #2897)。

Step 7d:MCP 实时查询服务(--mcp

这是让知识图谱"活起来"的一步——把建好的图暴露为 MCP 工具,供 Claude Desktop 或任何 MCP 兼容的 Agent 编排器实时查询:

$(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.json

graphify-out/.graphify_python是 skill 流程早期写入的绝对解释器路径(见 skill-agents.md),后续所有 Python 调用都应使用$(cat graphify-out/.graphify_python)而非裸python3,确保启用的是能 importgraphify的那套虚拟环境。该命令以 stdio 方式启动 MCP server。

从 serve.py 的list_tools()看,服务暴露的核心查询工具如下表:

工具作用关键入参
query_graph按自然语言/BFS/DFS 检索子图question(必填)、mode(bfs/dfs,默认 bfs)、depth(默认 3)、token_budget(默认 2000)、context_filter
get_node按 label/ID 取单节点全量细节label(必填)
get_neighbors取某节点全部直接邻居与边详情label(必填)、relation_filtertoken_budget
get_community按社区 ID 取社区全部节点community_id(必填)、token_budget
god_nodes返回连通度最高的核心抽象节点top_n(默认 10)
graph_stats节点/边/社区数与置信度分布摘要
shortest_path两概念间最短路径sourcetarget(必填)、max_hops(默认 8)、undirected

除工具外服务还暴露若干graphify://前缀的只读资源(reportstatsgod-nodessurprisesauditquestions,见 serve.py),并把.graphify_labels.json中的社区标签与GRAPH_REPORT.md一并纳入服务上下文。

接入 Claude Desktop:把以下片段合并进claude_desktop_config.json。注意两点约束——Claude Desktop 无法执行$(...)命令替换;且若 graphify 经由uv tool install安装,系统python3无法 import graphify。因此command必须指向cat graphify-out/.graphify_python打印出的绝对解释器路径

{ "mcpServers": { "graphify": { "command": "<absolute path from: cat graphify-out/.graphify_python>", "args": ["-m", "graphify.serve", "/absolute/path/to/graphify-out/graph.json"] } } }

配置完成后,Claude Desktop 或其他编排器里的 Agent 就能用query_graph/shortest_path等手段"即时提问",而不必反复对原始文件做 grep 或搬运大段GRAPH_REPORT.md

Step 8:Token 缩减基准(total_words > 5000时)

当 detect 阶段 输出的graphify-out/.graphify_detect.jsontotal_words大于 5,000时,运行:

graphify benchmark

把基准输出直接原样粘贴到对话中。若total_words <= 5000静默跳过——对小语料而言,图的价值在于结构清晰而非 token 压缩,刻意去压测反而制造噪音。CLI 的benchmark分支(cli.py)会自动从.graphify_detect.jsontotal_words并先做图文件大小上限校验。

基准的原理见 benchmark.py 的run_benchmark()

  • 语料 token 基线corpus_words来自 detect 结果(缺失时按节点数 × 50词粗估),按约 100 词 ≈ 133 token 折算成"朴素全量喂入"的corpus_tokens
  • 单次查询开销:对 5 个内置示例问题(认证如何工作、主入口在哪、错误如何处理、数据层与 API 的连接、核心抽象是什么),复用_query_graph_text的种子打分 + 3 层 BFS 子图,估算返回上下文 token 数;
  • 结论指标reduction_ratio = corpus_tokens / avg_query_tokens,打印形如Corpus: 8,123 words → ~10,830 tokens (naive)Avg query cost: ~412 tokensReduction: 26.3x fewer tokens per query的报告,并逐条列出每个示例问题的缩减倍数。

各导出形态速查表

触发 flag / 条件命令主要产物 / 落点关键默认值与约束
--wikigraphify export wikigraphify-out/wiki/index.md+ 社区/god node 文章依赖.graphify_analysis.json;须先于清理步骤执行
--neo4jgraphify export neo4jcypher.txtcypher-shell <导入)MERGE 幂等;标识符白名单清洗防注入
--neo4j-push <uri>graphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD直推实例默认bolt://localhost:7687/ 用户neo4j;需pip install neo4j;支持NEO4J_PASSWORD环境变量
--falkordbgraphify export falkordbcypher.txt(OpenCypher)GRAPH.QUERY单条执行,批量加载请用--push
--falkordb-push <uri>graphify export falkordb --push falkordb://localhost:6379直推实例scheme 仅提示(falkordb:///redis:/// 裸 host:port 均可);默认图名graphify;认证可选;需pip install falkordb
--svggraphify export svggraph.svg可按社区着色,内嵌 Obsidian/Notion/README
--graphmlgraphify export graphmlgraph.graphml面向 Gephi/yEd;导出前剥离非法 XML 控制字符
--mcp$(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.jsonstdio MCP server默认载入graphify-out/graph.json;Claude Desktop 需填绝对解释器路径
total_words > 5000graphify benchmark压测报告(直接粘贴进对话)数据源.graphify_detect.json;小语料静默跳过

源码级要点回顾

  • 命令分发:所有导出共用 cli.py 的export分支解析(--graph/--labels/--push/--user/--password),图统一从graph.json经 networkx 的node_link_graph重建;社区数据优先读.graphify_analysis.json,缺失时从节点上的community属性反推,保证 html/obsidian/wiki/svg/graphml/neo4j 不会静默产出残缺产物。
  • 社区标签依赖:wiki / obsidian / svg 等会消费.graphify_labels.json里的社区命名,这正是"wiki 须在清理前运行"的原因——标签文件是 LLM/人工整理的非可再生资产。
  • 幂等与安全:Neo4j / FalkorDB 写入一律MERGE/SETupsert;字符串经逐类转义、标签/关系类型经白名单化,与 Cypher 注入防护(F-008)和安全密码传递(F-031)共同构成导出链路的护栏。

至此,一份graphify-out/目录下的知识图谱便可以从"本地 JSON 产物"扩展为可被爬取的 Wiki、可被cypher-shell/图数据库承载的 OpenCypher 图、可嵌入文档的矢量图、可离线分析的 GraphML,以及能被任意 MCP Agent 实时问答的在线服务——配合graphify benchmark的量化结论,完整覆盖知识图谱的"导出—消费—度量"闭环。

【免费下载链接】graphifyTurn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.项目地址: https://gitcode.com/GitHub_Trending/graph/graphify

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询