LangChain4j RAG(检索增强生成)—— 小白也能懂的通俗版
先搞懂RAG 是什么RAG Retrieval-Augmented Generation中文名「检索增强生成」。核心思想很简单不让 LLM 凭空瞎编而是先从你的资料库里找到相关信息再让 LLM 基于这些资料回答问题。打个比方LLM 像一个参加开卷考试的学生。RAG 就是帮他翻书找到答案的过程。⚡核心结论一句话LangChain4j 提供三种 RAG 风格Easy RAG一行代码入门、Naive RAG基础向量搜索、Advanced RAG模块化管道支持查询转换/路由/重排按需选择即可。 RAG 三件套一览RAG 风格适合场景复杂度Easy RAG快速原型、PoC、入门学习⭐ 最低Naive RAG基本文档问答需要一定定制⭐⭐Advanced RAG生产级高质量 RAG需要查询优化⭐⭐⭐ 最高一、什么是 RAG为什么需要 RAGLLM 的知识仅限于训练数据。如果你想让 LLM 了解公司内部的私有文档或最新行业信息有三种方式RAG实时检索 注入上下文本文讨论的微调用你的数据重新训练模型RAG 微调结合最佳但最复杂核心流程用户提问 → 从资料库检索相关片段 → 把片段拼进提示词 → LLM 基于资料回答信息检索方法对比方法原理特点全文搜索TF-IDF / BM25匹配关键词频率精确匹配术语不懂语义向量搜索语义搜索将文本转为向量按余弦相似度排名理解语义不怕同义词 混合搜索全文 向量结合效果最好目前仅 Azure AI Search 支持二、RAG 的两个阶段阶段 1索引Indexing—— 离线准备原始文档 → 清洗 → 分割成小块 → 向量化 → 存入向量数据库通常是离线的比如周末跑 cron job。用户上传自定义文档时需要在线执行。阶段 2检索Retrieval—— 在线响应用户问题 → 向量化 → 在向量数据库中搜索相似片段 → 注入提示词 → 发给 LLM在线执行用户提出问题后立即响应。三、Easy RAG —— 最快上手的方式只需导入一个依赖4 步搞定// Step 1: 导入 langchain4j-easy-rag 依赖// Step 2: 加载文档ListDocumentdocumentsFileSystemDocumentLoader.loadDocuments(/path/to/docs);// 递归加载子目录: loadDocumentsRecursively()// glob 过滤 PDF: getPathMatcher(glob:**.pdf)// Step 3: 预处理并存入向量数据库自动分割嵌入存储InMemoryEmbeddingStoreTextSegmentembeddingStorenewInMemoryEmbeddingStore();EmbeddingStoreIngestor.ingest(documents,embeddingStore);// Step 4: 创建 AI 服务AssistantassistantAiServices.builder(Assistant.class).chatModel(chatModel).chatMemory(MessageWindowChatMemory.withMaxMessages(10)).contentRetriever(EmbeddingStoreContentRetriever.from(embeddingStore)).build();// Step 5: 开始聊天Stringanswerassistant.chat(How to do Easy RAG with LangChain4j?);底层魔法Apache Tika 自动解析各种文件格式DocumentSplitter 自动切分成 ≤300 token、重叠 30 token 的小块EmbeddingModel 使用 bge-small-en-v1.5默认可在 JVM 进程内离线运行无需外部服务四、核心 RAG API 详解关键概念速查表类/接口作用Document完整文档如一个 PDF 文件Metadata文档元信息键值对DocumentLoader从文件系统/URL/云存储加载文档DocumentParser解析不同格式的文件DocumentTransformer清理、过滤、丰富、摘要文档GraphTransformer从非结构化文本提取语义图TextSegment文档切割后的小块DocumentSplitter将文档分割为 TextSegmentEmbedding文本的向量表示EmbeddingModel将文本转为向量EmbeddingStore向量数据库支持 15 种EmbeddingStoreIngestor一站式摄取管线ContentRetriever检索相关内容RetrievalAugmentor高级 RAG 管道编排器Document MetadataDocumentdocDocument.from(内容,Metadata.from(Map.of(author,Alice)));doc.text();// 获取文本doc.metadata();// 获取元数据doc.toTextSegment();// 转为 TextSegmentMetadata 三大用途给 LLM 额外参考、搜索时按元数据过滤、更新同步定位已变更文档。Document Loader Parser10 种 LoaderFileSystem、ClassPath、Url、AmazonS3、Azure Blob、GitHub、GCS、Selenium、Playwright、腾讯 COS。4 种 ParserTextDocumentParser— TXT、HTML、MDApachePdfBoxDocumentParser— PDFApachePoiDocumentParser— Word/Excel/PPTApacheTikaDocumentParser—自动检测几乎所有格式推荐 不指定 parser 时会通过 SPI 自动加载找不到则回退到 TextDocumentParser。Embedding EmbeddingStore// 向量化Embeddingembmodel.embed(你好世界);model.embedAll(List.of(seg1,seg2));// 存入向量库Stringidstore.add(embedding,textSegment);store.addAll(List.of(e1,e2),List.of(s1,s2));// 搜索EmbeddingSearchResultresultstore.search(EmbeddingSearchRequest.builder().queryEmbedding(queryEmb).maxResults(5).minScore(0.75).filter(and(metadataKey(dept).isEqualTo(HR),metadataKey(year).isGreaterThan(2023))).build());LangChain4j 内置5 个离线嵌入模型支持15 种向量数据库。EmbeddingStoreIngestor —— 一站式摄取管线EmbeddingStoreIngestoringestorEmbeddingStoreIngestor.builder().documentSplitter(splitter)// 可选.textSegmentTransformer(transformer)// 可选.embeddingModel(model)// 必需.embeddingStore(store)// 必需.build();ingestor.ingest(documents);// 一行搞定分割→转换→嵌入→存储五、朴素 RAGNaive RAG自己控制每一步的基础实现// 1. 索引EmbeddingStoreIngestor.ingest(documents,embeddingStore);// 2. 检索AssistantassistantAiServices.builder(Assistant.class).chatModel(chatModel).contentRetriever(newEmbeddingStoreContentRetriever(embeddingStore,embeddingModel)).build();跟 Easy RAG 的区别在于你自己控制了分割策略、嵌入模型、向量数据库等每一个细节。六、高级 RAGAdvanced RAG—— 模块化管道核心是RetrievalAugmentor每次 AI 服务调用时被触发来增强 UserMessageRetrievalAugmentoraugmentorDefaultRetrievalAugmentor.builder().queryTransformer(...)// 查询转换.contentRetriever(...)// 内容检索.queryRouter(...)// 查询路由.contentAggregator(...)// 结果聚合.contentInjector(...)// 内容注入.executor(executor)// 并行化.build();五大组件详解1️⃣ Query Transformer查询转换器转换器作用示例DefaultQueryTransformer原样传递默认CompressingQueryTransformer压缩为独立查询“他住哪” → “John Doe 住哪”ExpandingQueryTransformer扩展为多个查询多种方式重述问题提高召回率2️⃣ Content Retriever内容检索器检索器数据源EmbeddingStoreContentRetriever向量数据库最常用 WebSearchContentRetriever网络搜索引擎SqlDatabaseContentRetrieverSQL 数据库AzureAiSearchContentRetrieverAzure AI Search全文向量混合Neo4jContentRetrieverNeo4j 知识图谱ContentRetrieverretrieverEmbeddingStoreContentRetriever.builder().embeddingStore(store).embeddingModel(model).maxResults(5).dynamicMaxResults(q-q.length()100?10:3)// 动态调整.minScore(0.75).dynamicMinScore(q-q.contains(紧急)?0.5:0.75).filter(and(metadataKey(userId).isEqualTo(currentUserId))).build();3️⃣ Query Router查询路由器根据查询类型分发到不同的检索器LanguageModelQueryRouterrouterLanguageModelQueryRouter.builder().chatModel(chatModel).add(hrRetriever,人力资源相关问题).add(financialRetriever,财务相关问题).add(techRetriever,技术问题).build();4️⃣ Content Aggregator内容聚合器合并多个检索器的结果聚合器说明DefaultContentAggregator简单拼接去重ReRankContentAggregator用重排序模型对结果重新打分5️⃣ Content Injector内容注入器把检索到的内容注入到提示词中DefaultContentInjector 开箱即用。6️⃣ 并行化多个检索器可以同时执行DefaultRetrievalAugmentor.builder().executor(myExecutor).build();七、访问来源Sources查看 LLM 引用了哪些文档interfaceAssistant{ResultStringchat(StringuserMessage);}ResultStringresultassistant.chat(怎么申请报销);Stringanswerresult.content();// AI 的回答ListContentsourcesresult.sources();// 引用了哪些片段for(Contentc:sources){System.out.println(c.textSegment().text());// 原文片段System.out.println(c.textSegment().metadata());// 元数据}流式模式监听assistant.chat(怎么申请报销).onRetrieved(sources-System.out.println(检索到 sources.size() 个片段)).onPartialResponse(token-System.out.print(token)).start(); 面试高频追问Q1RAG 的三个级别有什么区别答Easy RAG 是一键式入门方案Naive RAG 是自己控制每一步的基础向量搜索Advanced RAG 引入 RetrievalAugmentor 管道支持查询转换/路由/重排等高级优化。Q2查询压缩和查询扩展分别解决什么问题答压缩解决代词消歧“他住哪→John Doe 住哪”扩展解决词汇不匹配用多种表述同一问题提高召回率。Q3向量搜索 vs 全文搜索怎么选答向量搜索理解语义不怕同义词全文搜索精确匹配关键词。混合搜索效果最好但目前只有 Azure AI Search 支持。一般先用向量搜索。Q4如何在 RAG 中实现权限控制答通过 Metadata Filter——在 ContentRetriever 中设置 filter如metadataKey(userId).isEqualTo(currentUserId)确保用户只能检索自己有权限的文档。Q5RAG 和微调的区别答RAG 是运行时动态检索相关知识成本低时效性强微调是把知识学到模型参数里成本高但推理更快。两者可结合使用。✅ 总结RAG 是 LangChain4j 中最实用的功能之一三种 RAG 风格按需选Easy RAG 快速入门 → Naive RAG 基础定制 → Advanced RAG 生产级优化丰富的文档生态10 种 Loader、4 种 Parser、自动检测格式灵活的文档处理DocumentTransformer 清理/过滤/丰富/摘要GraphTransformer 提取语义图完善的分块体系DocumentSplitter TextSegmentTransformer15 向量数据库支持统一接口无缝切换一站式摄取管线EmbeddingStoreIngestor 一行搞定高级 RAG 管道RetrievalAugmentor 五大组件全链路覆盖多数据源检索向量库、Web 搜索、SQL、知识图谱、Azure AI Search查询优化压缩/扩展查询、LLM 驱动的路由决策结果优化重排序聚合器、并行化执行来源追溯ResultT 获取引用片段方便审计和溯源掌握 RAG 之后你就可以构建真正的企业级文档问答系统了。