一、概述:什么是 RAG?
检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种结合信息检索与文本生成的技术范式。它通过以下两个关键步骤显著提升大语言模型(LLM)的响应质量:
- 检索阶段:从知识库中检索与用户查询相关的文档片段
- 生成阶段:将检索到的内容作为上下文,指导LLM生成更准确的回答
与直接使用LLM相比,RAG具有三大优势:
- 知识更新便捷:只需更新文档库而无需重新训练模型
- 回答可追溯:能提供回答所依据的文档来源
- 成本效益高:减少对模型参数规模的依赖
本文将基于LangChain4j框架,详细解析一个完整的RAG实现方案。
二、环境准备与依赖配置
2.1 核心依赖说明
<dependencies>
<!-- LangChain4j核心库 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>1.0.0-beta3</version>
</dependency>
<!-- 嵌入模型实现 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>1.0.0-beta3</version>
</dependency>
<!-- RAG增强组件 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-easy-rag</artifactId>
<version>1.0.0-beta3</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-milvus</artifactId>
<version>1.0.0-beta3</version>
</dependency>
</dependencies>
关键依赖说明:
langchain4j-easy-rag
:提供文档分块、向量化等RAG核心功能langchain4j-embeddings-all-minilm-l6-v2
:轻量级嵌入模型(AllMiniLM-L6-v2)langchain4j-open-ai-spring-boot-starter
:OpenAI API集成(实际使用DeepSeek)langchain4j-milvus
:Milvus集成
2.2 Milvus安装
不详细展开,我本地使用WSL2安装的docker安装的milvus,可参考博文:https://blog.csdn.net/qq_34908167/article/details/148920103
docker 结果:
生产建议:
-
调优配置:修改milvus.yaml中的
proxy.rateLimit.qps=100
避免限流报错
-
持久化方案:挂载
/var/lib/milvus
目录防止容器重启数据丢失 -
监控集成:通过
http://localhost:9091/webui
实时查看检索延迟与负载
三、RAG核心组件实现
3.1 创建Milvus的Collection并且插入简单数据验证
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingSearchResult;
import dev.langchain4j.store