graphify 导出与基准评测完全指南:从知识图谱到 Wiki、图数据库、SVG/GraphML 与 MCP 服务 📅 发布时间:2026/9/7 22:56:23 👁 浏览次数: graphify 导出与基准评测完全指南从知识图谱到 Wiki、图数据库、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/skills/agents/references/exports.md 展开系统讲解在完成知识图谱构建之后如何通过 export 子命令将graph.json定向输出为 Obsidian Wiki Markdown、Neo4j/FalkorDB 图数据库Cypher 脚本或直连推送、SVG、GraphML以及如何把图谱包装成可供 Claude Desktop 等智能体实时查询的 stdio MCP 服务并介绍大语料下用graphify benchmark量化“Token 压缩收益”的正确姿势。读完本文你将掌握 graphify 六种导出目标与基准评测的完整调用链、触发条件、默认参数与底层实现原理可直接照着命令落地。一、文档定位这些导出步骤在 graphify 全流程中的位置在 graphify 面向 Agent 的标准技能里导出与评测并不是独立存在的“功能展示”而是整条流水线检测 → 抽取 → 建图 → 标注 → 查询 → 导出靠后的几个条件性步骤。exports.md明确规定Load this when the user passed one of the export flags--wiki、--neo4j、--neo4j-push、--falkordb、--falkordb-push、--svg、--graphml、--mcpor when the corpus is large enough for the token-reduction benchmark.Each step runs only for its own flag.理解这句话是全篇的关键文档里的 Step 6bWiki、Step 7Neo4j、Step 7aFalkorDB、Step 7bSVG、Step 7cGraphML、Step 7dMCP、Step 8benchmark彼此独立、按旗标选择性执行。用户只在原始命令里传了--wiki就只跑 Wiki 导出绝不会顺带连 Neo4j 一起推--svg只生成 SVG。这种“一个旗标一个动作”的设计让 Agent 的输出完全可预期、可审计。同时要注意步骤编号的含义Step 6b 排在 Step 9cleanup之前专门利用了 cleanup 前的临时产物.graphify_labels.jsonStep 7d 的 MCP 服务消费的是最终产物graphify-out/graph.jsonStep 8 是唯一一个不靠旗标、而是靠语料规模触发的步骤total_words 5000。这些步骤编号与 extract、cluster、build 等流程共用一套“带字母的分段编号”6b、7a、7b…说明导出属于可在中间态插入的子流程而不是建图后才允许执行。二、Step 6b —— Wiki 导出--wiki旗标Wiki 导出生成的是面向知识检索的 Markdown 百科文章。文档强调两件事仅在原始命令显式给出--wiki时才执行必须在 Step 9cleanup之前运行因为 Wiki 渲染依赖.graphify_labels.json社区标注文件仍在graphify-out/下可用——cleanup 会把这些中间标注文件清走。命令非常简单graphify export wiki从源码看Wiki 渲染逻辑集中在 graphify/wiki.py其中_community_article(...)wiki.py为每个社区community渲染一篇聚合文章_god_node_article(...)wiki.py为图里的核心枢纽节点god node生成独立条目_safe_filename(name, limit200)负责把节点标签转成跨平台安全、且可作为 Markdown 链接目标的文件名清洗:/\|?*#%等非法字符并限长到 200_md_link(label, resolver)用“显示名 → 文件 slug”的解析表把节点互相链接成可导航的 wiki。换言之Wiki 导出会把一个大而全的graph.json摊成“以社区与核心符号为单位”的一组 Markdown 文件彼此用相对 Markdown 链接互相跳转——非常贴近开发者把代码库“维基化”之后再喂给检索/LLM 的使用场景。三、Step 7 —— Neo4j 导出与直连推送--neo4j/--neo4j-pushNeo4j 有两个工作模式代表两种落地姿势。模式一生成 Cypher 文件人工导入--neo4jgraphify export neo4j此模式只生成一份Cypher 文件源码层面由 graphify/export.py 的to_cypher()负责方便你随后用cypher-shell、Neo4j Browser 等工具手工灌库适合不希望 CLI 直连生产实例的场景。模式二直连推送--neo4j-push urigraphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD如果用户没有提供凭据Agent 应先向用户询问。默认值URI 默认bolt://localhost:7687用户默认neo4j幂等性内部使用 CypherMERGEMERGE (n:Label {id: $id}) SET n $props、MERGE (a)-[r:REL]-(b) SET r $props因此重复执行不会产生重复节点/边可以放心重跑。从 graphify/exporters/graphdb.py 的push_to_neo4j()可以看到底层实现细节def push_to_neo4j(G, uri, user, password, communitiesNone): try: from neo4j import GraphDatabase except ImportError as e: raise ImportError(neo4j driver not installed. Run: pip install neo4j) from e ... driver GraphDatabase.driver(uri, auth(user, password))需要说明的实现事实依赖pip install neo4j官方 Python Driver未安装时会明确报错提示安装节点属性只保留str/int/float/bool且不以_开头的键id作为主键并入属性节点file_type经_safe_label()清洗后作为 Neo4j 的Label仅保留字母数字下划线为空则回落为Entity社区 ID 以community属性写入边的关系类型由relation字段经_safe_rel()转成大写RELATION非法字符替换为_无法映射时回落到RELATED_TO_safe_label()/_safe_rel()本质上是防 Cypher 注入的白名单清洗而不是简单的字符串拼接后直接执行。推送成功后会返回{nodes: N, edges: M}计数。另外从 graphify/main.py 的帮助文本可以看到该子命令完整形态export neo4j emit Cypher or push to Neo4j [--graph PATH] [--push URI] [--user U] [--password P]也就是说还可以用--graph PATH指定要导出的图文件默认graphify-out/graph.json。四、Step 7a —— FalkorDB 导出与直连推送--falkordb/--falkordb-pushFalkorDB 是 OpenCypher 兼容的图数据库但和 Neo4j 在“如何装载脚本”上有根本差异。文档给出了清晰的取舍模式一生成 Cypher 文件--falkordbgraphify export falkordb文档特别提醒这些语句是 OpenCypher但 FalkorDB 的GRAPH.QUERY一次只执行一条语句没有 Neo4jcypher-shell那种批量脚本导入能力因此想“灌库”时不要依赖生成的脚本文件而应优先用--falkordb-push直连装载。--falkordb模式只在你想保留可移植的cypher.txt工件例如交付、归档、跨库审阅时才值得使用。模式二直连推送--falkordb-push urigraphify export falkordb --push falkordb://localhost:6379默认值与语义URI 默认falkordb://localhost:6379URI scheme 仅是提示性的——redis://localhost:6379或裸的localhost:6379写法同样可用解析时只取 host 与 port默认端口 6379认证是可选的仅当实例确实开了鉴权时才需要向用户索要凭据目标图名graph name默认graphify同样使用MERGE重复执行安全。底层实现见 graphify/exporters/graphdb.py 的push_to_falkordb()parsed urlparse(uri if :// in uri else fredis://{uri}) connect_user parsed.username or (user if password else None) connect_password parsed.password or (password or None) db FalkorDB(hostparsed.hostname or localhost, portparsed.port or 6379, usernameconnect_user, passwordconnect_password) graph db.select_graph(graph_name) # 默认 graphify ... graph.query(MERGE (n:%s {id: $id}) SET n $props, {id: node_id, props: props})值得展开的源码事实依赖pip install falkordbFalkorDB Python SDK连接用FalkorDB(host, port, username, password)非 Bolt 驱动只有 URI 中显式带凭据、或提供了 password 时才会发送认证信息否则匿名连接——因为 FalkorDB 默认无凭据运行硬传 Neo4j 风格的默认用户名会被当作未知 ACL 用户而拒绝FalkorDB 在同一个实例内用命名图区分数据集db.select_graph(graphify)选中目标查询经graph.query(cypher, params)执行没有 session 对象关系名/标签清洗_safe_rel/_safe_label与 Neo4j 路径完全一致防注入语义相同节点同样把社区 ID 写入community属性便于在 FalkorDB 里直接跑社区级 Cypher。五、Step 7b/7c —— SVG 与 GraphML 导出--svg/--graphml这两个格式适合“可视化/互操作”命令形态也最轻graphify export svg graphify export graphmlSVG输出单张矢量图graph.svg便于直接放进文档、网页或做静态快照。渲染实现位于 graphify/export.py 的to_svg()export svg的帮助文本为emit graph.svg [--graph PATH] [--labels PATH]。GraphML输出标准 XML 图格式*.graphml可被 Gephi、yEd、Cytoscape 等主流图分析/可视化工具读取用于做离线排版、社区可视化或算法分析。实现在 graphify/export.py 的to_graphml()。注意 export.py 内置了_strip_xml_illegal()之类的清洗确保节点属性里的非法 XML 字符不会让整个文件解析失败。顺带说明同属graphify export家族但不在本文旗标清单中的还有html交互式graph.html、callflow-html基于 Mermaid 的架构/调用流页面、obsidianObsidian vault 笔记 canvas等它们由 export 子命令统一调度帮助文本见 graphify/main.py。六、Step 7d —— 把图谱发布成 MCP 服务--mcp这是让其他 Agent 实时消费图谱的桥梁。命令用cat展开.graphify_python记录的绝对解释器路径来启动 stdio MCP 服务器$(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.json这条命令的意图是无论 graphify 装在哪一个 Python 环境尤其uv tool install场景都用写出这份图谱的那个解释器来启动服务避免“系统 python3 无法 import graphify”的经典踩坑。服务端会通过stdio暴露以下 7 个工具外加list_prs等工具名用途query_graph基于 BFS/DFS 检索图谱返回相关节点与边作为文本上下文get_node按 label 或 id 取某个节点的完整详情get_neighbors取某节点的全部直接邻居及边的细节get_community按社区 ID 取该社区全部节点god_nodes返回连接数最高的核心节点——图谱的“核心抽象”graph_stats汇总统计节点数、边数、社区数、置信度分布shortest_path求两点之间的最短路径这些工具的声明types.Tool(name..., description...)与分发表_handlers都能在 graphify/serve.py 里直接查到query_graph→_tool_query_graph、get_node→_tool_get_node……每个入口都有一段面向 Agent 的语义化描述例如god_nodes的 description 是 “Return the most connected nodes - the core abstractions of the knowledge graph.”说明这套工具集的设计目标就是让 LLM 通过工具描述即可正确选用。服务启动后可把它登记到Claude Desktop或任何 MCP 兼容的 Agent 编排器。登记时有两个硬性约束Claude Desktop 无法执行$(...)这类 shell 命令替换uv tool install安装后系统python3并不能 import graphify。因此必须把command设成cat graphify-out/.graphify_python打印出的绝对解释器路径args里用-m graphify.servegraph.json 的绝对路径{ 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(...)、get_neighbors(...)、shortest_path(...)等方式对知识图谱做实时问答而不必反复读取原始源码或整份报告——这正是 graphify “query, dont grep”理念在跨 Agent 协作上的延伸。七、Step 8 —— Token 缩减基准评测阈值total_words 5000最后一个条件步骤不靠旗标而是看语料规模graphify benchmark触发条件读取graphify-out/.graphify_detect.json里的total_words检测阶段统计的语料总词数当total_words 5000时执行graphify benchmark并把输出直接打印在对话里若total_words 5000则静默跳过。为什么要设这个阈值文档的措辞很关键——小语料下“the graph value is structural clarity, not token compression”图谱的价值在于结构化清晰而非 Token 压缩。只有当语料足够大把“全量语料塞进上下文”的成本显著高于“查图取子图”时评测压缩收益才有意义。底层评测逻辑位于 graphify/benchmark.py值得展开的实现事实Token 估算采用业界常见的经验换算_CHARS_PER_TOKEN 4即_estimate_tokens(text) max(1, len(text) // 4)查询侧开销由_query_subgraph_tokens(G, question, depth3)模拟真实用法对用户问题抽取检索词在图上做深度为 3 的 BFS把命中的子图节点/边形如NODE label、EDGE label --relation-- label拼成文本再估 Tokenbenchmark 内置了一批示例问题_SAMPLE_QUESTIONS如“如何工作”“核心抽象是什么”类用来对“直接读全语料”与“经图谱查子图”两种路线的 Token 消耗做对照测算为兼容 Windows 非 UTF-8 控制台cp1252输出用了_safe(unicode_char, ascii_fallback)处理制表符等字符不会因编码崩溃。评测结果的读法对比同一组问题上“全量语料 Token 数”与“图谱子图 Token 数”得到压缩比——这个数字可以直接放进 Agent 的聊天里向用户说明“为什么先graphify query再决定读哪些文件”在 Token 上是划算的。八、组合演练一次带全部导出的完整调用把全文串成一条可复现的命令链假设语料已经建图、输出目录为graphify-out/--wiki等旗标来自原始命令# 1. 仅在 --wiki 时执行且在 cleanup 前依赖 .graphify_labels.json 仍在 graphify export wiki # 2. --neo4j产出可移植 Cypher 文件 graphify export neo4j # --neo4j-push直连 Neo4j默认 bolt://localhost:7687默认用户 neo4j # graphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD # 3. --falkordb产出 cypher.txtFalkorDB 无法批量脚本导入仅作便携工件 graphify export falkordb # --falkordb-push直连 FalkorDB默认 falkordb://localhost:6379图名 graphify认证可选 # graphify export falkordb --push falkordb://localhost:6379 # 4. --svg / --graphml矢量图与互操作格式 graphify export svg graphify export graphml # 5. --mcp以写出本图谱的解释器启动 stdio MCP 服务 $(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.json # 6. 仅在 total_words 5000 时评测 Token 压缩收益结果直接贴回对话 graphify benchmark落地时把握三条原则即可旗标驱动用户给什么旗标就只跑对应步骤、顺序敏感Wiki 必须在 cleanup 前、MCP 必须在 graph.json 落盘后、规模敏感benchmark 受total_words阈值约束。这样从“代码/文档/配置/PDF → graph.json”再到“Wiki / 图数据库 / SVG / GraphML / MCP / 评测”的整条 graphify 价值链路就完整闭环了。延伸阅读想深入了解这些导出依赖的图谱结构与检测阶段产物可继续翻阅技能参考中的 extraction-spec 与 query想改写出更贴合自己场景的导出则可从 graphify/export.py、graphify/exporters/graphdb.py、graphify/wiki.py、graphify/serve.py 与 graphify/benchmark.py 入手。【免费下载链接】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),仅供参考