我用 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 总结

三件让我自己也意外的事

  1. L3 多跳问题,graph-RAG 评测真的赢了 +0.5(LLM-as-judge,10 道题里 4 道 L3)。不算碾压,但稳定为正。我把完整评测表挂在 README,自己复现一下不到 5 分钟。
  2. 可插拔得比我想象中干净GraphDatabaseClient 21 个方法,Neo4j 实现 + 内存实现 + Noop 兜底——切后端零感知。
  3. 没有任何内网依赖。这点强调一下:刻意排除了 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/

posted @ 2026-05-29 18:10  AI吗喽  阅读(20)  评论(0)    收藏  举报