我用 200 行代码做了个 Java 版 GraphRAG,把 plain-RAG 和 graph-RAG 摆到一个终端里 PK
我用 200 行代码做了个 Java 版 GraphRAG,把 plain-RAG 和 graph-RAG 摆到一个终端里 PK
一个周末项目,已开源:github.com/MarcelLeon/graph-rag-harness
起因:受不了 RAG Demo 的"演示腔"
最近调研 GraphRAG,看了一圈开源项目,发现一个共同的尴尬:
- 要么云原生重得离谱:Neo4j Cluster + Kafka + 一堆中间件,本地跑不起来;
- 要么 Notebook 一把梭:Python 脚本跑一遍很漂亮,挪到 Java 业务系统里全是坑;
- 要么演示得太"舒服":永远只展示 graph-RAG 答得多好,却不肯把 plain-RAG 摆旁边对比。
我想要的东西很朴素:
一个 Java Agent 能直接接的 GraphRAG SPI,本地 Ollama 就能跑,plain-RAG 和 graph-RAG 摆在同一个终端窗口里同问同答,让我自己判断"图"到底有没有用。
找不到,就自己写了一个:graph-rag-harness。
它长什么样
一个命令启动,一个问题,两个答案:
mvn -pl graph-rag-examples spring-boot:run \
-Dspring-boot.run.arguments="--mode=cli --variant=both"
> 如果 fact_user_activity_daily 明天加载失败,会影响哪些顶层指标?请追溯血缘。
[plain-RAG]
基于上下文,DAU 等指标可能受影响……(一段比较"散文"的回答)
[graph-RAG]
影响链路(DERIVED_FROM / FORMULA_USES / BELONGS_TO):
fact_user_activity_daily
↳ dwd_user_dau
↳ dws_active_user_summary
↳ KPI: DAU(执行层日报)
↳ KPI: 7DAU(增长团队周报)
差别一眼看清:graph 版本走的是显式关系链,不是 prose 总结。
三件让我自己也意外的事
- L3 多跳问题,graph-RAG 评测真的赢了 +0.5(LLM-as-judge,10 道题里 4 道 L3)。不算碾压,但稳定为正。我把完整评测表挂在 README,自己复现一下不到 5 分钟。
- 可插拔得比我想象中干净。
GraphDatabaseClient21 个方法,Neo4j 实现 + 内存实现 + Noop 兜底——切后端零感知。 - 没有任何内网依赖。这点强调一下:刻意排除了
com.kuaishou.*之类的内部 SDK,clone 下来开箱可跑,不需要 VPN,不需要私服。
它适合谁
- 想把 GraphRAG 接进已有 Java 业务的同学(Spring AI / LangChain4j 都能挂);
- 在为团队做RAG 选型、需要数据说服老板的同学;
- 想看一份真实 Ollama 评测报告而不是 ChatGPT 截图的同学;
- 单纯对 "graph 到底比 vector 好在哪" 这件事感兴趣的同学。
不适合谁(我也很诚实)
- 想要一键 SOTA 的同学:当前 L3 uplift +0.5,NORTH_STAR 目标是 ≥ +1.0,还在往前推;
- 追求 GPU 大模型方案的同学:默认 7-8B 本地 chat,强调"能跑起来 + 能对比";
- 不想看 Java 代码的同学:核心是 Java/Maven 工程,Python 用户可能水土不服。
写在最后
开源不是终点,开源只是一次邀请。我想做的事是把 "Java + GraphRAG + 可对比评测" 这条路修平一点,让后面想试的人不用再趟一次坑。
如果你点开 README 觉得还行,给个 Star 是对一个周末项目最大的鼓励 🌟
仓库:https://github.com/MarcelLeon/graph-rag-harness
Demo GIF(25 秒,真实 Ollama)、5 分钟快速跑通、完整评测报告,README 里都有。
顺便求个反馈:你在生产里用 GraphRAG 踩过哪些坑?评论区告诉我,下一轮迭代我把高频问题写成 ADR 收进
docs/decisions/。

浙公网安备 33010602011771号