
graphify 完整导出与基准实测Wiki、Neo4j、FalkorDB、SVG、GraphML、MCP 与 Token 缩减基准【免费下载链接】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/graphifygraphify 将代码库连同文档、SQL Schema、配置和 PDF构建为可查询的知识图谱后graphify/skills/amp/references/exports.md定义的是导出环节的操作手册按触发条件决定是否运行分别处理 Wiki、Neo4j、FalkorDB、SVG、GraphML 和 MCP 导出并附带一个针对语料库的 Token 缩减基准。读完本文你会清楚每种导出标志对应的命令、参数与默认值了解导出实现的关键机制MERGE upsert、标签防注入、环境变量传递密码并能把图谱接入 Claude Desktop 等 MCP 客户端做实时查询。触发条件与各步骤的依赖顺序导出流程中每一步只在自己的标志存在时执行。exports.md明确了触发集合用户传了--wiki、--neo4j、--neo4j-push、--falkordb、--falkordb-push、--svg、--graphml、--mcp中的某一项时加载对应流程语料库足够大时运行 Token 缩减基准。各步骤在整条构建流水线中的编号与依赖关系如下编号沿用 exports.md 原文步骤触发标志关键依赖Step 6b - Wiki--wiki必须在 Step 9cleanup之前运行此时.graphify_labels.json仍可用Step 7 - Neo4j--neo4j/--neo4j-push已构建的graphify-out/graph.jsonStep 7a - FalkorDB--falkordb/--falkordb-push已构建的graphify-out/graph.jsonStep 7b - SVG--svg已构建的graphify-out/graph.jsonStep 7c - GraphML--graphml已构建的graphify-out/graph.jsonStep 7d - MCP 服务器--mcpgraphify-out/graph.jsongraphify-out/.graphify_pythonStep 8 - 基准total_words 5000graphify-out/.graphify_detect.json中的total_words其中 Wiki 有明确顺序约束原文要求“Run this before Step 9 (cleanup) so.graphify_labels.jsonis still available”。社区标签文件是--labels的默认来源见下文 CLI 参数一节一旦被清理Wiki 文章就失去人工润色过的社区命名。Step 6b - Wiki 导出仅--wiki只有原始命令中显式带了--wiki才运行这一步graphify export wiki对应源码在 graphify/cli.py 的wiki分支实现入口是 to_wiki()签名接收图谱、社区映射、输出目录、社区标签、内聚度与 god nodes 数据。该分支有一个硬前置检查若.graphify_analysis.json缺失或为空直接报错退出并提示先运行graphify extract .或graphify cluster-only .重新生成社区数据以避免导出空 Wiki 造成数据损失若 analysis 中没有 god nodes则回退到现场调用god_nodes(G)计算产出为graphify-out/wiki/目录并打印wiki/index.md - agent entry point提示把index.md作为 agent 的入口页面。Step 7 - Neo4j 导出仅--neo4j或--neo4j-push--neo4j生成可手动导入的 Cypher 文件graphify export neo4j不连接任何实例写出graphify-out/cypher.txtCLI 的提示语是import with: cypher-shell graphify-out/cypher.txt。文件由 to_cypher() 生成首行为// Neo4j Cypher import - generated by /graphify节点标签取自file_type字段并经_cypher_label清洗属性值经_cypher_escape转义。--neo4j-push uri直推到运行中的 Neo4j 实例graphify export neo4j --push bolt://localhost:7687 --user neo4j --password PASSWORD默认 URI 为bolt://localhost:7687默认用户为neo4j凭据未提供时向用户询问使用 MERGE 语句可安全重跑不会创建重复节点/边。实现位于 push_to_neo4j()有几个值得注意的机制MERGE upsert节点写入是MERGE (n:{Filetype} {id: $id}) SET n $props边写入是MATCH (a {id: $src}), (b {id: $tgt}) MERGE (a)-[r:{REL}]-(b) SET r $props所以重跑是幂等的防 Cypher 注入节点标签经过_safe_label()只保留A-Za-z0-9_空则回落为Entity关系类型经过_safe_rel()统一为大写下划线形式空则RELATED_TO社区归属节点可携带community属性来源于graphify-out/.graphify_analysis.json的社区划分见 graphify/cli.py 中对 communities 的加载与回退重建逻辑属性白名单只有str/int/float/bool类型且不以_开头的属性才会写入图数据库依赖需要pip install neo4j否则抛出带安装提示的ImportError。返回值为推送数量统计例如终端输出Pushed to Neo4j: 1234 nodes, 5678 edges。Step 7a - FalkorDB 导出仅--falkordb或--falkordb-push--falkordb生成 Cypher 文件可移植工件graphify export falkordb原文给出的使用提示很关键生成的语句是 OpenCypher但 FalkorDB 的GRAPH.QUERY一次只能执行一条语句没有 Neo4jcypher-shell那样的批量脚本导入所以想真正把图谱加载进去应优先使用--falkordb-push只有想要可移植的cypher.txt工件时才用文件模式。CLI 侧的分支在 graphify/cli.py提示语与原文一致statements are OpenCypher ... load a graph with: graphify export falkordb --push falkordb://localhost:6379。--falkordb-push uri直推到运行中的 FalkorDB 实例graphify export falkordb --push falkordb://localhost:6379默认 URI 为falkordb://localhost:6379URI 的 scheme 只是信息性的——redis://localhost:6379甚至裸host:port如localhost:6379都等价因为实现里只解析 host 和 port默认端口 6379认证是可选的仅当实例要求鉴权时才向用户索取凭据目标具名图默认为graphify同一实例内按图名区分多份图谱同样使用 MERGE可安全重跑。实现位于 push_to_falkordb()与 Neo4j 路径的差异在 docstring 中列得很清楚用FalkorDB(host, port, username, password)连接而非 bolt driver具名图通过db.select_graph(graph_name)选择graph_name默认graphify查询走graph.query(cypher, params)没有 session 对象凭据处理上有个细节URI 内嵌的凭据优先于命令行参数只有提供了密码才发送用户名否则匿名连接避免把 Neo4j 默认的neo4j用户名发给 FalkorDB后者会拒绝未知 ACL 用户MERGE/SET 的 upsert 查询与 Neo4j 路径完全一致依赖pip install falkordb。集成路径的测试位于 tests/test_falkordb_integration.py。Step 7b / 7c - SVG 与 GraphML 导出SVG仅--svggraphify export svg写出graphify-out/graph.svgCLI 提示graph.svg written - embeds in Obsidian, Notion, GitHub READMEs。实现 to_svg() 支持社区着色默认画布figsize(20, 14)社区配色使用 HTML/SVG/Obsidian 导出器共享的COMMUNITY_COLORS调色板定义在 graphify/exporters/base.py。GraphML仅--graphmlgraphify export graphml写出graphify-out/graph.graphmlCLI 提示graph.graphml written - open in Gephi, yEd, or any GraphML tool。实现为 to_graphml()。两者都适合把图谱接入外部分析工具SVG 用于在文档/README 里内嵌可视化GraphML 用于 Gephi、yEd 等图分析软件做进一步社区发现或布局实验。Step 7d - MCP 服务器仅--mcp$(cat graphify-out/.graphify_python) -m graphify.serve graphify-out/graph.json这启动一个stdio MCP 服务器。从 graphify/serve.py 的工具注册表serve.py可以确认它暴露的 7 个工具工具作用query_graph按问题做子图查询serve.pyget_node取单个节点详情serve.pyget_neighbors取节点邻居serve.pyget_community取某个社区的成员serve.pygod_nodes取 god nodes高中心性枢纽节点serve.pygraph_stats图谱统计概览serve.pyshortest_path两节点间最短路径serve.py把它加入 Claude Desktop 或任何支持 MCP 的 agent 编排器其他 agent 就能实时查询这份图谱。在 Claude Desktop 中配置的三个坑原文特别解释了为什么配置模板长这样Claude Desktop 无法执行$(...)命令替换而在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] } } }服务器侧还有一些可配置细节从 serve.py 可以看到多项目上下文的 LRU 容量默认 8可用环境变量GRAPHIFY_MAX_CONTEXTS覆盖非法值回落 80/负值钳制为 1加载图谱前会做文件大小上限检查serve.py 的check_graph_file_size_cap并把edges键归一化为links后再解析对损坏的graph.json会明确报错退出。Docker 场景下的 MCP SQLite 部署另有专文 docs/docker-mcp-sqlite.md。Step 8 - Token 缩减基准仅当total_words 5000判断依据是graphify-out/.graphify_detect.json中的total_wordsgraphify benchmark规则大于 5,000 词才运行并把输出直接打印到聊天中total_words 5000时静默跳过——原文给出的理由是对小型语料图谱的价值在于结构清晰度而不是 Token 压缩。CLI 侧逻辑见 graphify/cli.py从.graphify_detect.json读取total_words作为corpus_words然后调用run_benchmark并打印。实现核心在 graphify/benchmark.pyToken 估算采用 4 字符 ≈ 1 token 的常规近似benchmark.py默认用 5 个样例问题认证流程、主入口、错误处理、数据层与 API 的连接、核心抽象分别执行 BFS 子图查询统计查询上下文的 Token 数benchmark.py返回corpus_tokens、avg_query_tokens、reduction_ratio与逐问题明细。导出 CLI 的通用参数源码级补充上面各步骤的命令都是最小形式。graphify export format在 graphify/cli.py 中统一解析参数完整形式为Usage: graphify export format html [--graph PATH] [--labels PATH] [--node-limit N] [--no-viz] callflow-html [GRAPH|DIR] [--graph PATH] [--labels PATH] [--report PATH] [--sections PATH] [--output HTML] [--lang auto|zh-CN|en] [--max-sections N] [--diagram-scale N] obsidian [--graph PATH] [--labels PATH] [--dir PATH] wiki [--graph PATH] [--labels PATH] svg [--graph PATH] [--labels PATH] graphml [--graph PATH] neo4j [--graph PATH] [--push URI] [--user U] [--password P] (or set NEO4J_PASSWORD instead of --password to keep it off argv) falkordb [--graph PATH] [--push URI] [--user U] [--password P] (or set FALKORDB_PASSWORD instead of --password to keep it off argv)几个默认值与行为要点默认输入--graph默认graphify-out/graph.json--labels默认graphify-out/.graphify_labels.json显式指定--graph后未显式指定的--labels/--report会自动改锚到该 graph 所在目录密码尽量不上 argvfalkordb 子命令优先读FALKORDB_PASSWORDneo4j 优先读NEO4J_PASSWORD环境变量显式--password会覆盖环境变量graphify/cli.py 的注释明确这是为了避免密码出现在ps输出和 shell 历史中缺失图谱的报错graph 文件不存在时打印error: graph not found: ... Run /graphify path first.并退出码 1社区数据回退.graphify_analysis.json是社区划分的权威来源但当它缺失例如 watch 重建路径未重新生成 analysis 侧车文件时CLI 会从节点属性上的community字段现场重建社区映射保证 wiki/svg/neo4j 等下游导出不会静默降级graphify/cli.py。小结把图谱交付出去的路径选择按 exports.md 的触发模型一次构建后你可以按消费方选择导出目标agent 入口选 Wikigraphify-out/wiki/index.md可视化嵌入选 SVG专业图分析选 GraphML图数据库查询选 Neo4j/FalkorDB文件模式留可移植工件push 模式进运行实例二者都幂等可重跑跨 agent 实时查询选 MCP stdio 服务器而语料超过 5000 词时用graphify benchmark量化图谱相对“全文塞进上下文”的 Token 节省。每个标志各自独立、互不依赖按需组合即可。【免费下载链接】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),仅供参考