尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LangChain4j RAG 实战指南:从入门到精通(收藏版)
本文详细介绍了 RAG检索增强生成技术帮助大模型告别幻觉精准回答文档内容。文章从 RAG 的概念、核心阶段索引和检索入手通过 Java 8 文档问答的实战案例展示了如何使用 LangChain4j 实现文档解析、嵌入存储和问答流程。同时还分享了向量数据库存储效果和常见的踩坑记录与解决方案适合程序员和小白学习大模型应用。 什么是 RAG简单来说RAG 是一种在发送给大模型LLM之前从你的数据中找到并注入相关信息片段到提示中的方法。这样 LLM 将获得相关信息并能够使用这些信息回复——这应该会降低产生幻觉的概率。相关信息片段可以使用各种信息检索方法找到最流行的方法有三种1️⃣ 全文关键词搜索使用 TF-IDF 和 BM25 等技术通过匹配查询中的关键词与文档数据库进行搜索。 根据每个文档中这些关键词的频率和相关性对结果进行排名。2️⃣ 向量搜索语义搜索文本文档使用嵌入模型转换为数字向量。 然后根据查询向量和文档向量之间的余弦相似度或其他相似度度量找到并排序文档从而捕捉更深层次的语义含义。3️⃣ 混合搜索结合多种搜索方法例如全文 向量通常可以提高搜索的有效性。 RAG 的两个核心阶段RAG 过程分为两个不同的阶段索引 和 检索。 LangChain4j 为这两个阶段提供了完整的工具支持。 阶段一索引Indexing在索引阶段文档会被预处理以便在检索阶段进行高效搜索。对于向量搜索这通常涉及清理文档用额外数据和元数据丰富文档将文档分割成更小的片段也称为分块嵌入这些片段最后将它们存储在嵌入存储向量数据库中“ 提示索引阶段通常是离线进行的最终用户不需要等待其完成。 例如可以通过定时任务在周末每周重新索引一次公司内部文档。但在某些情况下最终用户可能希望上传自己的自定义文档使 LLM 能够访问这些文档。 在这种情况下索引应该在线进行并成为主应用程序的一部分。索引阶段流程图 阶段二检索Retrieval检索阶段通常在线进行当用户提交一个应该使用索引文档回答的问题时。对于向量搜索这通常涉及嵌入用户的查询问题在嵌入存储中执行相似度搜索将相关片段原始文档的片段注入到提示中发送给 LLM 生成回答检索阶段流程图 RAG 实战案例Java 8 文档问答 步骤一准备资料首先准备一份 PDF 文档作为知识来源——《Java 8 从入门到精通》。我们的目标是投喂这个 PDF让大模型回答文档中的问题。️ 步骤二创建项目结构创建标准的 Spring Boot 项目结构pom.xml 依赖配置核心依赖包括Spring Boot WebLangChain4j 核心库阿里百炼平台DashScope集成Qdrant 向量数据库Easy RAG 模式AllMiniLmL6V2 本地嵌入模型?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.whc/groupId artifactIdlangChain4j-whc/artifactId version1.0-SNAPSHOT/version /parent artifactIdlangchain4j-whc-rag/artifactId properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- LangChain4j 核心 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-open-ai/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-reactor/artifactId /dependency !-- 阿里百炼平台 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-dashscope-spring-boot-starter/artifactId /dependency !-- 工具库 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.8.22/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-spring-boot-starter/artifactId /dependency !-- Qdrant 向量数据库 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-qdrant/artifactId version1.5.0-beta11/version /dependency !-- Easy RAG 模式 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-easy-rag/artifactId /dependency !-- AllMiniLmL6V2 本地嵌入模型 -- dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-embeddings-all-minilm-l6-v2/artifactId version1.5.0-beta11/version /dependency /dependencies /project“ 注意将 PDF 文件放到resources/doc目录下。⚙️ 步骤三YAML 配置配置服务端口、DashScope API 和 Qdrant 连接信息server: port: 9009 servlet: encoding: enabled: true force: true charset: UTF-8 spring: application: name: langchain_whc_rag ai: dashScope: apiKey: ${AI_DASHSCOPE_API_KEY} modelName: ${AI_DASHSCOPE_MODEL_NAME} baseUrl: ${AI_DASHSCOPE_BASE_URL} qdrant: host: ${QDRANT_HOST} port: ${QDRANT_PORT} collectionName: ${QDRANT_COLLECTION_NAME} 步骤四大模型配置类这是最核心的配置部分需要配置三个关键 Bean向量存储实例Qdrant嵌入模型实例本地 AllMiniLmL6V2聊天模型实例DashScope内容检索器实例重点Slf4j Getter Configuration public class LlmConfig { Value(${ai.dashScope.apiKey}) private String dashScopeApiKey; Value(${ai.dashScope.modelName}) private String dashScopeModelName; Value(${ai.dashScope.baseUrl}) private String dashScopeBaseUrl; Value(${qdrant.host}) private String qdrantHost; Value(${qdrant.port}) private int qdrantPort; Value(${qdrant.collectionName}) private String qdrantCollectionName; / * 创建向量存储实例 * 使用 Qdrant 作为向量数据库 */ Bean public EmbeddingStoreTextSegment embeddingStore() { return QdrantEmbeddingStore.builder() .host(qdrantHost) .port(qdrantPort) .collectionName(qdrantCollectionName) .build(); } / * 创建嵌入模型实例 * 使用本地的 AllMiniLmL6V2 嵌入模型避免 DashScope 兼容性问题 */ Bean public EmbeddingModel embeddingModel() { return new dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel(); } / * 创建聊天模型实例 * 使用 OpenAI 兼容的聊天模型通过 DashScope 提供的 API 服务进行对话 */ Bean public ChatModel chatModel() { return OpenAiChatModel.builder() .apiKey(dashScopeApiKey) .modelName(dashScopeModelName) .baseUrl(dashScopeBaseUrl) .logRequests(true) .build(); } / * 创建内容检索器实例 * ⚠️ 重点必须明确指定嵌入模型避免冲突 */ Bean public ContentRetriever contentRetriever(EmbeddingStoreTextSegment embeddingStore, EmbeddingModel embeddingModel) { return EmbeddingStoreContentRetriever.builder() .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) .build(); } } 步骤五定义 AI 服务接口使用AiService注解显式指定要使用的模型和检索器AiService(wiringMode AiServiceWiringMode.EXPLICIT, chatModel chatModel, contentRetriever contentRetriever) public interface RagAssist { / * 聊天接口 * param message 用户问题 * return AI 回答 */ String chat(String message); } 步骤六Controller 实现实现 REST API完成文档解析、嵌入存储和问答的完整流程RestController RequiredArgsConstructor public class RagController { private final EmbeddingModel embeddingModel; private final EmbeddingStoreTextSegment embeddingStore; private final RagAssist ragAssist; GetMapping(value /rag/chat) public String java8(RequestParam String message) throws IOException { // 1. 读取并解析 PDF 文档 ClassPathResource resource new ClassPathResource(doc/java8从入门到精通.pdf); InputStream inputStream resource.getInputStream(); Document document new ApacheTikaDocumentParser().parse(inputStream); // 2. 创建文档嵌入存储处理器 EmbeddingStoreIngestor ingestor EmbeddingStoreIngestor.builder() .documentSplitter(DocumentSplitters.recursive(1000, 0)) .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) .build(); // 3. 将文档处理并存储到向量数据库 ingestor.ingest(document); // 4. 使用 RAG 助手回答问题 String result ragAssist.chat(message); System.out.println(result); return result; } }✅ 测试效果验证测试一询问第九章内容文档第九章是关于「本地时间和时间戳」的内容接口调用GET http://localhost:9009/rag/chat?message第九章主要讲了啥AI 回答“第九章主要讲述了本地时间和时间戳的相关概念。内容包括如何在程序中处理不同地区的本地时间时区的转换以及时间戳Timestamp的定义和使用方法。本章还介绍了如何将时间戳与本地时间进行相互转换帮助开发者更好地理解和操作时间数据确保在跨时区应用中的时间一致性与准确性。 完美达到预期效果测试二询问 Stream 创建方法接口调用GET http://localhost:9009/rag/chat?message如何创建Stream调用结果很显然AI 回答参考了文档中的内容并明确说明了对应的章节来源。✅ 再次验证成功 向量数据库存储效果文档被分割成了一个又一个的text_segment存储在 Qdrant 中⚠️ 踩坑记录与解决方案坑一多个嵌入模型冲突问题配置内容检索器时如果不明确指定 model会报错Conflict: multiple embedding models have been found in the classpath解决方案在EmbeddingStoreContentRetriever中必须显式指定要使用的嵌入模型Bean public ContentRetriever contentRetriever(EmbeddingStoreTextSegment embeddingStore, EmbeddingModel embeddingModel) { return EmbeddingStoreContentRetriever.builder() .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) // ✅ 关键明确指定模型 .build(); }坑二DashScope 兼容性问题问题尝试使用百炼平台的向量模型TEXT-EMBEDDING-V4时报 OpenAI 不兼容异常。解决方案改用本地的AllMiniLmL6V2EmbeddingModel嵌入模型完美避开兼容性问题Bean public EmbeddingModel embeddingModel() { // ✅ 使用本地嵌入模型避免兼容性问题 return new dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel(); }如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取
RELATED

相关推荐

程序员转行AI:从入门到精通的大模型应用开发学习路线图

程序员转行AI:从入门到精通的大模型应用开发学习路线图

AI行业是程序员最有前途的领域之一,大模型应用开发是程序员转行的“最优路径”。文章介绍了大模型应用开发的工作内容,包括调用大模型API、做Prompt工程、搭建应用系统。学习内容涵盖Python编程语言、大模型核心框架(LangChain、LlamaIndex、…

📅 2026/10/31 11:08:05
车载 MBD 领域 AI 落地避坑:4 个真提效场景 vs 常见伪需求

车载 MBD 领域 AI 落地避坑:4 个真提效场景 vs 常见伪需求

前言AI 工业软件是当下行业热点,但大量宣传仍停留在概念演示阶段,真正能融入车载量产研发流程的场景并不多。很多团队盲目跟风上 AI 功能,最后发现落地率极低,反而增加了适配成本。本文结合工程落地实际,梳理车载 MBD…

📅 2026/10/31 11:08:05
宠物店次卡核销怎么落地?从定价到核销的五步操作

宠物店次卡核销怎么落地?从定价到核销的五步操作

宠物店次卡核销怎么实现?技术层面并不复杂:电子卡、扫码核销、剩余次数实时更新,一周左右就能上线。但真正把次卡用出效果的店并不多,因为难点从来不在“扫码扣次数”这一下,而在前面的卡型与定价设计、中间与预约流程…

📅 2026/10/31 11:08:05
MORE NEWS

更多资讯

📰

LabVIEW测试框架模板:提升自动化测试效率与维护性

1. LabVIEW测试框架模板的价值定位在工业自动化测试领域,LabVIEW作为图形化编程平台的代表,长期占据着重要地位。但许多测试工程师面临一个现实困境:虽然能够熟练使用LabVIEW完成基本数据采集和仪器控制,但当测试项目复杂度上升时…

📰

AI回归测试实战:从人力硬扛到10分钟跑完一天用例

1. 回归测试的困局:为什么你还在用人力硬扛 干了八年测试,我见过太多团队把回归测试当成“体力活”来干。每次版本迭代,测试组灯火通明,一群人对着几百条用例逐条点,点完一轮两天过去了,新功能还没测&#…

📰

uniapp中9.9×3精度问题:浮点数原理与定点整数实践

“9.9 乘 3 等于多少?”这问题连刚上二年级的孩子都能一口报出答案,可你在 uniapp 里写一句{{ 9.9 * 3 }},界面上很可能蹦出29.700000000000003。前阵子我帮一个做小学数学口算练习的小程序做改版,题库里加了“一位小数乘法”这个…

📰

ROS2 daemon架构解析与性能优化实践

1. ROS2 daemon的核心定位与设计哲学 在ROS2架构中,daemon是一个运行在后台的特殊节点(通常命名为 ros2_daemon ),它本质上是一个持久化的服务进程。与传统ROS节点不同,daemon的设计目标是为整个ROS2系统提供基础设施…

📰

DELPHI反编译工具选型指南:从结构识别到伪代码还原的硬指标

简介:DELPHI反编译工具面向需要解析DELPHI编译生成的DLL与OCX控件的开发者、逆向工程学习者及安全分析人员,用于在缺少原始源码的情况下理解组件结构、排查兼容性问题或开展代码维护。工具通常具备符号解析、反汇编、源码重构与调试支持等能力&#xff0…

📰

Hyperframes 帧处理框架:从帧语义到高性能调度与增量重算

1. 从“hyperframes”这个标题说起:它到底是什么,能解决什么问题第一次看到“hyperframes”这个词,我脑子里蹦出来的第一反应是——这大概率跟“帧”有关,而且不是普通的帧。在视频、动画、游戏引擎、数据可视化这几个圈子里&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬