Java AI转型实战(八):RAG完整链路实战 从文档加载到向量检索搭建一个完整的RAG知识库问答系统01 引子在之前的七篇文章中我们完成了Spring AI核心功能的闭环多轮对话、流式输出、Function Calling、Output Parser。但有一个问题始终没解决大模型不知道我们私有的知识。问它公司内部文档、项目技术方案、产品手册它一概不知要么说“我不知道”要么“一本正经地胡说八道”。RAG检索增强生成正是为此而生。RAG的核心思想先检索相关资料再基于资料回答问题。就像人类遇到不懂的问题会先去翻资料一样RAG让AI在回答之前先“查资料”然后基于资料生成回答。02 RAG 完整链路概览离线阶段文档预处理加载文档PDF、Word、TXT等文本分割切成适合Embedding的小块向量化调用Embedding模型生成向量存入向量数据库pgvector在线阶段问答检索用户提问 → 向量化在向量数据库中检索相似内容将检索结果 用户问题 一起发给大模型大模型基于资料生成回答03 代码实现3.1 文档加载与文本分割DocumentLoadingService.java3.2 向量化服务使用 DashScope 原生 SDKDashScopeEmbeddingService.java3.3 向量存储与检索服务VectorStoreService.java3.4 Controller 接口DocumentController.java3.5 配置文件application.ymlPostgreSQL 表结构pgvector04 测试验证4.1 准备测试文档在src/main/resources/documents/test.txt中放入测试内容RAG检索增强生成是一种AI技术它通过检索外部知识库来增强大模型的回答能力。 RAG的核心思想是先检索相关资料再基于资料回答问题。 RAG可以解决大模型的知识陈旧和幻觉问题。 Spring AI 提供了完整的RAG开发支持包括文档加载、文本分割、向量存储等。4.2 存储文档请求4.3 检索文档请求验证结论✅ 完整 RAG 链路已跑通05 踩坑记录坑一spring-ai-model与jsonschema依赖版本冲突在使用defaultTools()注册 Tool 时Spring AI 需要jsonschema-generator来生成 Tool 的 JSON Schema。如果依赖版本不一致启动时会报NoClassDefFoundError。解决方案在pom.xml中统一jsonschema-generator和jsonschema-module-jackson的版本注意两个依赖的版本必须一致否则会出现类加载冲突。坑二Embedding 模型维度不匹配表定义为 1536 维但默认的text-embedding-v1输出 1024 维。解决使用 DashScope 原生 SDK显式指定text-embedding-v2模型。坑三application.yml中embedding.model配置不生效Spring AI Alibaba 1.1.2.2 版本中spring.ai.dashscope.embedding.model配置不会被自动加载。解决放弃配置方式在代码中直接用 DashScope SDK 指定模型。坑四PGobject 的setType需要compilescopepostgresql依赖的scope若为runtime编译时找不到org.postgresql.util.PGobject。解决将postgresql的scope改为compile。06 下期预告RAG 已经跑通了但目前还有很多可以优化的空间检索质量优化重排序Rerank、混合检索关键词 向量文档处理增强支持 PDF、Word、Excel 等多种格式流式 RAG检索 流式生成对话式 RAG结合多轮对话记忆下一篇我们探索 RAG 的进阶优化——如何让检索更精准、回答更智能。 我是超超不吵吵10年Java全栈正在转型AI应用开发。每周一篇实战笔记不贩卖焦虑只分享能落地的技术。全网同名欢迎关注。