Java程序员必看的RAG入门教程

Java程序员必看的RAG入门教程
一、什么是RAG1.1 核心公式RAGRetrieval-Augmented Generation检索增强生成的核心思想其实很简单在让LLM回答问题之前先从你的私有知识库中找到相关的信息然后把问题和信息一起交给LLM来回答。RAG 检索Retrieval 增强Augmented 生成Generation从学术角度看RAG通过将生成过程与可验证的最新证据紧密耦合直接解决了大模型的幻觉问题。RAG不仅能让LLM回答训练数据中不存在的新问题还能为生成的答案提供来源引用大幅提升了可信度和可审计性。用大白话来说LLM本身就是一本百科全书但它不知道你的公司内部资料。RAG就是在每次提问时先去翻你的资料库把相关内容找出来然后连同问题一起交给LLM让它基于这些资料来回答。1.2 为什么需要RAG有些小伙伴可能会问为什么不能把企业知识库全部喂给LLM训练呢这里有三个现实问题知识更新不及时LLM的训练数据有明确的截止时间。重新训练模型以更新知识成本高昂数百万至数亿美元且可能引发灾难性遗忘问题。无法访问私有数据你的公司内部文档、客户邮件、合同信息这些数据不会出现在LLM的训练数据中。RAG通过构建定制化知识基座解决这一问题将企业内部文档导入向量数据库使通用LLM瞬间升级为领域专家。成本极高重新训练或微调一个LLM需要数万甚至数百万美元不是普通企业负担得起的。RAG无需重新训练成本仅为微调的1/10到1/100。RAG完美解决了这三个问题它不改变LLM本身只是让LLM“带着资料回答问题”。企业级RAG正在快速普及。据2026年4月百度开发者社区的分析RAG通过整合外部知识库弥补了大语言模型在实时性、准确性和专业性上的不足广泛应用于企业场景。RAG还通过引入事实边界约束要求LLM的答案严格基于检索到的权威文档并附带来源链接这在金融、医疗等合规敏感行业中至关重要。二、RAG的核心架构RAG的架构可以清晰地分为两大流程离线索引和在线检索生成。2.1 四大核心步骤一篇2026年发表的全面综述论文将现代RAG架构解构为索引Indexing、检索Retrieval、融合Fusion和生成Generation四个阶段并梳理了从基础向量RAG到Graph RAG、Agentic RAG、多模态RAG等多种新兴范式。离线索引阶段只做一次或者在文档更新时重新做文档切分Chunking把一篇长文档切成若干个小块Chunk。为什么要切因为LLM的上下文窗口有限一次也塞不下太多内容。向量化Embedding使用嵌入模型将文本块转换为向量数字数组实现语义相似性计算。存储将向量和对应的原始文本一起存入向量数据库供后续检索使用。在线检索生成阶段每次用户提问时执行检索增强生成将用户问题转化为向量在向量数据库中执行相似度检索获取最相关的文档片段然后与问题一起提交给LLM生成答案。更多项目实战在Java突击队网susan.net.cn三、RAG的关键技术组件3.1 向量数据库RAG的“记忆库”向量数据库是RAG的核心基础设施。它专门用于存储和检索高维向量数据支持海量数据下的毫秒级相似度检索。2026年业内已经形成了清晰的向量数据库选型框架通常依据检索质量、过滤能力、混合搜索支持、索引选项、运维就绪度、生态集成、安全性和成本模型等维度进行评估。向量数据库核心特点部署方式适用场景TiDB Vector SearchSQL向量一体化混合搜索强托管自托管RAGSQL混合负载Milvus功能最丰富开源首选托管自托管大规模专用向量场景pgvectorPostgreSQL扩展SQL原生自托管已有PG的中小项目Weaviate生态友好混合搜索成熟托管自托管多模态过滤重应用QdrantRust编写高性能托管自托管对性能和延迟敏感Chroma轻量级开箱即用自托管/本地原型验证和小型项目OpenSearchBM25向量双强托管自托管关键词语义混合检索数据参考对于典型的RAG工作负载1536维嵌入topK10经过良好调优的系统可实现90-95%的召回率p95延迟低于100ms。没有单一的“最佳”向量数据库选择完全取决于你的具体工作负载、过滤需求和是否需要向量与事务SQL数据共存。3.2 Embedding模型把文字变成“坐标”Embedding模型负责将文本转换成向量。选型时需要注意多语言支持如果你的知识库包含中英文需要选择支持多语言的模型多模态支持2026年的RAG已经从纯文本扩展到多模态支持文本、图像、图表等多种数据类型跨语言能力中文查询需要能够找到英文文档反之亦然据Milvus 2026年3月发布的10款主流嵌入模型基准测试Gemini Embedding 2是最佳的全能选手开源模型Qwen3-VL-2B在跨模态任务上甚至超越了闭源API。如果你需要压缩向量维度以节省存储空间Voyage Multimodal 3.5或Jina Embeddings v4是更好的选择。该基准测试发现MTEB排行榜存在严重局限——它只测试单一语言的文本检索不包括跨模态检索、跨语言搜索和长文档精确度。生产型RAG需要的是CCKM跨模态、跨语言、关键信息、MRL压缩四维能力而传统基准恰恰遗漏了这些。3.3 重排序Rerank提升精准度向量检索返回的Top-K结果中排在前面的不一定是最相关的。引入重排序模型可以对候选结果进行二次打分显著提升检索精度。3.4 混合检索BM25 向量结合关键词匹配BM25和向量相似度可以提升召回率。混合检索可以将搜索准确率提升高达45%。结合多种检索器BM25捕捉词法匹配、密集检索捕捉语义相似性能提供互补的信号显著增强RAG系统的有效性。四、RAG的评估体系RAG系统的评估是一个多维度的挑战。RagasRetrieval Augmented Generation Assessment是目前最流行的开源评估框架它引入了一套无需依赖人工标注的自动化评估指标能够分别衡量检索和生成两个组件的质量。4.1 三大核心评估指标Ragas框架通过量化指标评估RAG系统的三大核心能力评估维度衡量内容计算公式/方法忠实度Faithfulness生成的答案是否基于检索到的文档有无幻觉LLM逐句判断与检索内容的逻辑一致性答案相关性Answer Relevancy生成的答案是否直接回应用户问题计算答案中问题相关句子的占比上下文相关性Context Relevancy检索到的文档是否与问题相关筛选文档中与问题相关的句子比例4.2 总体得分计算在Ragas框架中各个指标会被组合起来计算出一个RAGAS总体得分从而全面量化RAG系统的性能。计算过程包括选择相关指标并计算它们将它们标准化为0-1范围然后计算这些指标的加权平均值。权重的分配取决于每个用例的优先级。高级评估扩展Ragas已被扩展到基于知识图谱的评估范式支持多跳推理和语义社区聚类以得出更全面的评分指标。4.3 指标驱动开发MDDRagas框架引入了指标驱动开发Metric-Driven Development的理念用于持续改进RAG应用。这意味着评估不是一次性的活动而应该是贯穿整个开发周期的持续流程建立基线 → 识别短板 → 针对性优化 → 重新评估 → 迭代循环。五、RAG优化技术在RAG的实际落地过程中检索质量是影响最终效果最关键的因素。以下是最有效的优化技术每项技术都配有完整的代码示例。5.1 查询重写Query Rewriting问题场景用户问“苹果股价咋样了”知识库里却是《Apple Inc. (AAPL) 2024年Q2财报与股价分析》。用户的口语表达与知识库的书面术语之间存在鸿沟导致检索不准确。优化思路在检索前让大模型充当“翻译官”将用户口语化、模糊的查询改写为更专业、更完整的查询语句。Spring AI Alibaba实现示例import org.springframework.ai.rag.preretrieval.query.transformation.RewriteQueryTransformer; import org.springframework.ai.chat.client.ChatClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; Configuration public class QueryRewriteConfig { Bean public QueryTransformer queryTransformer(ChatClient.Builder builder) { String promptTemplate 你是一个专业的查询改写助手。请将用户的原始问题改写为更清晰、更完整的独立查询。 改写原则 1. 将口语表达转为书面表达 2. 补全缺失的上下文信息如代词指代 3. 使用知识库中常用的专业术语 4. 保持查询的原始意图不变 原始问题{original_query} 改写后的查询 ; return RewriteQueryTransformer.builder() .chatClientBuilder(builder) .promptTemplate(promptTemplate) .targetSearchSystem(vector_store) .build(); } }使用示例原始查询“苹果股价咋样了” → 改写后“查询Apple Inc.公司的最新股票价格”原始查询“它怎么样”多轮对话中→ 改写后“查询上一轮提到的产品的详细功能”效果在电商客服场景中实施查询重写后多轮对话准确率提升超过30%召回率从72%提升至89%。5.2 混合检索Hybrid Search问题场景用户查询“ModelArts平台”向量检索可能召回“机器学习”、“AI开发”等语义相近但不够精准的内容而忽略了包含“ModelArts”关键词的文档。单一检索方式各有短板。优化思路同时使用BM25关键词检索精确匹配和向量语义检索语义相似将两种结果融合后返回取长补短。Spring AI Alibaba实现示例import org.springframework.ai.rag.retrieval.search.HybridDocumentRetriever; import org.springframework.ai.rag.retrieval.join.JoinDocumentJoiner; import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever; import org.springframework.ai.rag.retrieval.search.KeywordDocumentRetriever; Configuration public class HybridSearchConfig { Bean public DocumentRetriever hybridRetriever(VectorStore vectorStore) { // 向量检索器 VectorStoreDocumentRetriever vectorRetriever VectorStoreDocumentRetriever.builder() .vectorStore(vectorStore) .similarityThreshold(0.7) .topK(10) .build(); // 关键词检索器需要先对文档建立BM25索引 KeywordDocumentRetriever keywordRetriever KeywordDocumentRetriever.builder() .indexName(knowledge_base) .topK(10) .build(); // 混合检索使用 Reciprocal Rank Fusion 融合结果 return HybridDocumentRetriever.builder() .retrievers(List.of(vectorRetriever, keywordRetriever)) .joiner(JoinDocumentJoiner.reciprocalRankFusion()) .build(); } }效果混合检索可以将搜索准确率提升高达45%。在华为云社区实测中结合查询重写混合检索后RAG系统的整体准确率从68%提升到91%。5.3 结果重排序Reranking问题场景向量检索返回的10个结果中第1个和第5个哪个更相关相似度分数不一定准确。直接取Top-K可能漏掉真正相关的文档或者把不相关的排在了前面。优化思路引入专门的重排序模型如Cohere Rerank、BGE Reranker对初步检索到的候选结果进行二次打分按新分数重新排序。Spring AI Alibaba实现示例import org.springframework.ai.rag.postretrieval.reranking.DiversityReranker; import org.springframework.ai.rag.postretrieval.reranking.CompressionReranker; import org.springframework.ai.rag.retrieval.search.DocumentRetriever; import org.springframework.ai.rag.retrieval.search.VectorStoreDocumentRetriever; Configuration public class RerankingConfig { Bean public DocumentRetriever rerankedRetriever(VectorStore vectorStore, ChatClient chatClient) { // 基础向量检索器召回20个候选 VectorStoreDocumentRetriever baseRetriever VectorStoreDocumentRetriever.builder() .vectorStore(vectorStore) .topK(20) // 多召回一些候选 .build(); // 重排序器1多样性重排避免返回的内容过于相似 DiversityReranker diversityReranker DiversityReranker.builder() .minDegree(0.5) // 最小多样性阈值 .build(); // 重排序器2压缩重排用LLM提取最相关片段可减少上下文长度 CompressionReranker compressionReranker CompressionReranker.builder() .chatClient(chatClient) .maxOutputTokens(500) .build(); // 组合使用先多样性重排再压缩重排 return baseRetriever.andThen(diversityReranker).andThen(compressionReranker); } }效果在金融研报问答场景中添加重排序后答案的准确率从82%提升到94%同时上下文长度压缩了60%节省了Token成本。5.4 多向量检索问题场景用户查询“华为云ModelArts平台与阿里云PAI平台的区别”这是一个多跳推理问题需要同时检索两个产品的信息并进行对比。单一的向量检索无法同时表达两个独立的语义实体。优化思路将查询分解为多个子查询分别检索后再融合结果。或者使用多路检索器分别从不同维度文本语义、关键词、元数据并行检索然后合并。Spring AI Alibaba实现示例import org.springframework.ai.rag.preretrieval.query.expansion.MultiQueryExpander; Configuration public class MultiVectorConfig { Bean public QueryExpander multiQueryExpander(ChatClient.Builder builder) { String expansionPrompt 请将以下用户问题扩展为2-4个不同的子查询每个子查询从不同角度表述以覆盖更全面的信息。 子查询之间用换行分隔。 用户问题{original_query} 扩展的子查询 ; return MultiQueryExpander.builder() .chatClientBuilder(builder) .promptTemplate(expansionPrompt) .numberOfQueries(3) // 生成3个子查询 .build(); } }结合使用示例Service public class AdvancedRagService { Autowired private QueryExpander queryExpander; // 查询扩展 Autowired private DocumentRetriever hybridRetriever; // 混合检索器 Autowired private Reranker reranker; // 重排序器 public String ask(String question) { // 1. 查询重写 String rewritten rewriteQuery(question); // 2. 多向量扩展生成多个子查询 ListString subQueries queryExpander.expand(rewritten); // 3. 对每个子查询进行混合检索 ListDocument allDocs new ArrayList(); for (String sq : subQueries) { allDocs.addAll(hybridRetriever.retrieve(sq)); } // 4. 去重 重排序 ListDocument uniqueDocs deduplicate(allDocs); ListDocument reranked reranker.rerank(uniqueDocs, question); // 5. 组装Prompt并生成答案 return generateAnswer(question, reranked); } }效果在多跳问答和产品对比类场景中多向量检索可将召回率提升20-30%尤其擅长处理“A与B的区别”、“为什么A比B好”这类复杂问题。六、RAG实战对于Java开发者目前最成熟的选择是Spring AI Alibaba框架它提供了模块化的RAG架构。6.1 Spring AI Alibaba的RAG优势Spring AI Alibaba作为阿里巴巴开源的AI开发框架具有三大核心优势与阿里云生态深度集成支持无缝调用通义千问等大模型降低技术门槛模块化设计提供预处理、检索、生成、后处理等标准化组件加速开发企业级支持内置高并发处理、模型热更新、监控告警等功能适合生产环境其核心思路是实现“检索-过滤-生成”的三段式流程首先从知识库中检索相关文档片段再通过语义过滤排除无关内容最后由生成模型合成自然语言回答。6.2 核心组件详解Spring AI Alibaba的模块化RAG架构包含以下核心组件组件功能可选实现DocumentReader加载各类文档格式PDFMiner、Apache Tika、JSON、MarkdownDocumentTransformer文档预处理和清洗去除特殊字符、元数据提取DocumentSplitter智能分块策略递归分块、语义边界分块、重叠分块EmbeddingModel文本向量化DashScope、OpenAI、OllamaVectorStore向量存储与检索Milvus、pgvector、Redis、ChromaChatClientLLM调用与Prompt管理通义千问、OpenAI、Azure6.3 完整代码实现第一步添加依赖dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter/artifactId version1.0.0/version /dependency dependency groupIdcom.alibaba.cloud.ai/groupId artifactIdspring-ai-alibaba-starter-dashscope/artifactId version1.0.0/version /dependency第二步配置向量数据库和Embedding模型Configuration public class RagConfig { Bean public ChatClient chatClient(ChatClient.Builder builder) { return builder .defaultSystem(你是一个专业的智能问答助手请基于提供的参考资料回答问题。) .build(); } Bean public VectorStore vectorStore(EmbeddingModel embeddingModel) { // 示例使用内存存储适合原型验证 SimpleVectorStore simpleVectorStore SimpleVectorStore.builder(embeddingModel).build(); return simpleVectorStore; // 生产环境可替换为 MilvusVectorStore、PgVectorStore 等 } Bean public EmbeddingModel embeddingModel() { return new DashScopeEmbeddingModel( DashScopeEmbeddingOptions.builder() .withModel(text-embedding-v3) .build() ); } }第三步构建知识库索引Service public class KnowledgeBaseService { Autowired private VectorStore vectorStore; Autowired private EmbeddingModel embeddingModel; public void indexDocument(String content) { // 1. 文档切分 ListDocument chunks DocumentSplitter.recursive(500, 100).split(content); // 2. 向量化并存储 vectorStore.add(chunks); System.out.println(已索引 chunks.size() 个文档块); } }第四步实现RAG问答接口RestController RequestMapping(/api/rag) public class RagController { Autowired private ChatClient chatClient; Autowired private VectorStore vectorStore; PostMapping(/ask) public String ask(RequestParam String question) { // 使用 QuestionAnswerAdvisor 自动完成检索增强 return chatClient.prompt() .user(question) .advisors(new QuestionAnswerAdvisor(vectorStore)) .call() .content(); } }只需这几步一个完整的RAG智能问答系统就搭建完成了QuestionAnswerAdvisor会自动完成问题向量化、相似度检索和Prompt组装的全部工作。七、RAG的优缺点7.1 优点准确率高通过检索外部知识大幅降低模型幻觉提升事实准确性。RAG通过引入事实边界约束要求LLM的答案严格基于检索到的权威文档这在金融、医疗等合规敏感行业中至关重要。知识实时更新只需更新向量数据库即可无需重新训练模型。通过外接动态知识库如公司文档系统或新闻API当用户查询最新信息时RAG先检索外部数据库中的实时内容再让LLM基于检索结果生成答案。可解释性强可以展示检索到的来源文档让用户知道答案来源具备可审计性。成本可控比微调大模型便宜得多无需数百万美元的训练成本。保护数据隐私私有数据只存储在本地向量库中不会上传到模型服务端。领域适配灵活将企业内部文档导入向量数据库使通用LLM瞬间升级为领域专家。7.2 缺点检索质量决定一切如果检索不到相关内容LLM也无能为力。上下文窗口限制无法一次性塞入海量资料需要合理切分。增加系统复杂度需要维护向量数据库、Embedding模型、LLM等多个组件。延迟略高相比直接调用LLMRAG多了检索步骤会增加几十到几百毫秒的延迟。评估困难RAG系统需要从检索准确性和生成质量多个维度进行综合评估。知识冲突处理检索到的信息可能与LLM的参数化记忆发生冲突需要设计有效的融合策略。八、RAG的使用场景8.1 最适合RAG的场景企业内部知识库问答把公司的文档、规范、培训材料建成RAG员工可以随时提问智能客服系统将产品文档、FAQ接入RAG让AI客服能够准确回答产品问题法律/合同审查让AI基于合同文本回答问题帮助律师快速定位条款金融研报分析分析师可以直接提问“这份研报中对XX公司的评级是什么”AI基于报告内容回答合规敏感行业RAG通过强制LLM基于权威文档回答并附来源在金融、医疗等合规敏感行业中至关重要8.2 不适合RAG的场景简单的闲聊不需要外部知识的对话直接用LLM就够了需要深度推理的任务RAG擅长“查资料”不擅长“推导结论”对延迟极度敏感的场景检索会增加额外耗时总结RAG检索增强生成是目前企业落地AI应用最务实的技术方案。它的核心价值可以概括为让LLM带着资料回答问题把AI幻觉降到最低。