Spring Boot + RAG 实战:多知识库 RAG 系统

Spring Boot + RAG 实战:多知识库 RAG 系统

👉一键直达

👉一键获取《JavaAI应用开发实战》代码仓库

👉一键获取访问密码

当前以下视频系列课程正持续更新中:

  • 《做实验学 Elasticsearch》
  • 《小编说 ES 教程》
  • 《Java AI 应用开发实战》
  • …… 更多内容陆续上线中!

💡 为什么值得订阅?

所有资料均由小编精心整理,保证代码可运行、可调试,省去你东拼西凑的时间成本,专注核心技能提升。

把公司所有文档一股脑塞给大模型,美其名曰“让它自己学”。

这就是典型的“知识污染”问题。

今天这节课,咱们就用纯Spring Boot+LangChain4j,搭一个多知识库隔离的 RAG 系统:你问差旅政策,它绝不碰考勤制度。

准备好了吗?咱们开工!


很多同学一听 “RAG” 就头大,觉得高深莫测。其实啊,它就干三件事,我管它叫 “存、找、答”

  1. 存(Store):把你的文档切成小段(Chunk),每一段变成一串数字向量(Embedding),存进“向量数据库”。
  2. 找(Retrieve):用户问问题,我们也把问题变成坐标,去库里找最近的几段——就像在地图上搜“附近好吃的”,返回 Top 3。
  3. 答(Generate):把找到的这几段原文 + 用户问题,一起喂给大模型,让它组织语言回答。

关键来了:你怎么告诉 AI “今天只准访问 handbook 这个库”?
答案就是——路由(Routing)


咱们来看整个请求是怎么流动的。记住这张图,后面代码你就全懂了:

Spring Boot + RAG 实战:多知识库 RAG 系统

你看, 参数就是门牌号
Controller 收到请求,立刻去找 Registry:“嘿,给我 对应的那一套工具!”
Registry 从启动时就建好的 Map 里拿出对应的 EmbeddingStore、Augmentor……
Service 拿着这套工具干活,LLM 最后只看到“员工手册”里的内容。


全程,policy 的数据连门都没进!


豆包 大模型 教程

第一步:配置文件 —— 给知识库“分家”

打开 ,你会看到这样的结构:


这可不是随便写的!

  • :切太细,上下文断了;切太粗,AI 记不住。300~500 是经验值。
  • :每次只给 AI 看最相关的 3 段,避免信息过载。
  • :相似度低于 0.5 的“八竿子打不着”的内容,直接丢掉——防胡扯!

第二步:配置类 —— Spring 启动时就把“向量库”建好

看 ,重点在这段:


为什么这么干?

因为加载、切分、向量化——这三个操作非常耗时!如果每次用户提问都做一遍,用户早跑了。
所以我们在 Spring 启动时一次性预热,把每个知识库的“向量库”提前建好,存进 Map。

⚠️ 注意:这里用的是 ,适合 Demo。生产环境建议换成 Qdrant / Milvus / PGVector


第三步:Service 层 —— 两条路线,任你选

在 包里,咱们提供了两个实现:

路线 A: —— “懒人模式”

优点:一行代码搞定,内部自动检索 + 拼接 + 回答。
缺点:你看不到 AI 到底参考了哪段原文。

路线 B: —— “侦探模式”

用处在哪?
你想在前端显示:“AI 参考了《员工手册》第 3 条,匹配度 92%”——就必须走这条路!


第四步:Controller —— 别踩这个坑!

看接口定义:



准备测试素材

在 里加上:


在调用之前,咱们先看一眼这三个接口的“通用模版”:

  1. 普通问答(返回纯文本)
  2. 详细问答(返回 JSON + 相似度得分)
  3. 流式问答(打字机效果)

升级版测试链接清单(直接复制可用)

1. 逻辑推理测试(入职 3 个月能免费旅游吗?)

验证 AI 是否具备基本的数学计算和逻辑推导能力。

  • 链接:点击或复制
  • URL:
  • ✅ 正确回答应该是:“需要自费 50%,因为你未满一年。”
2. 跨库隔离测试(问手册库关于机票的问题)

验证 和 两个柜子是否真的锁死了,互不串门。

  • 链接:点击或复制
  • URL:
  • 预期:AI 应该说“不知道”或“没提到”,因为它不能偷看 柜子。
3. 细节特例测试(机场打车 150 元能报销吗?)

验证 AI 是否能从“普遍规则”中识别出“特殊豁免条件”。

  • 链接:点击或复制
  • URL:
  • ✅ 应该答:“可以,因为赶飞机属于特殊豁免情形。”
4. 详细得分验证(查出证据和分值)

验证底层 是否拿到了真实的相似度 score。

  • 链接:点击或复制
  • URL:
  • 看点:观察返回的 数组里, 字段的值。
5. 流式交互体验(体验打字机效果)

建议在浏览器中直接打开,感受字符一个一个跳出来的过程。

  • 链接:点击或复制
  • URL:

怎么像高级工程师一样分析测试结果?

当你拿到返回的 JSON 时,别只盯着 看,咱们要看“三要素”:

  1. 命中率(Recall): 列表里有没有包含那句关键话?如果没有,请调大 或减小 。
  2. 纯净度(Precision): 里是不是塞进了太多没用的废话?如果是,请调小 。
  3. 幻觉率(Hallucination):如果文档里没提,AI 却编了一个答案,请去 Service 里检查你的 ,把它改得更严厉点(比如:“必须逐字对照文档,文档没写的一个字都不许说!”)。

今天,咱们亲手搭了一个企业级可用的多知识库 RAG 系统。你掌握了:

  1. 隔离思维:通过 实现知识边界,杜绝 AI “跨库乱答”。
  2. 工程化能力:把 EmbeddingStore、Augmentor 封装成 Spring Bean,支持动态扩展。
  3. 测试方法论:用“逻辑题 + 边界 case + 得分验证”三板斧,科学评估 RAG 效果。

🎯 最后送你一句话
“AI 不会犯错,错的是没给它划清边界的人。”

回去试试调整 ,你会发现:

  • 切得细 → 精准但碎片
  • 切得粗 → 完整但模糊

这就是 AI 工程的魅力——没有标准答案,只有不断调优的艺术

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:Ai探索者,转载请注明出处:https://javaforall.net/273839.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月12日 上午11:38
下一篇 2026年3月12日 上午11:39


相关推荐

关注全栈程序员社区公众号