飞啊飘 發表於 2026-3-31 09:33:00

RAG实战:用LangChain4j构建企业级知识库问答系统

<h2>前言</h2>
<p>RAG(Retrieval-Augmented Generation,检索增强生成)是当前企业落地大模型最主流的方案。它解决了大模型"幻觉"和"知识截止"两大痛点,让 AI 能够基于企业私有知识库进行精准问答。本文用 LangChain4j 带你从零构建一个完整的 RAG 系统。</p>
<h2>一、RAG 核心原理</h2>
<p>RAG 的工作流程分三步:</p>
<ol>
<li><strong>索引阶段</strong>:将文档切片 → 向量化 → 存入向量数据库</li>
<li><strong>检索阶段</strong>:用户提问 → 向量化 → 相似度检索 → 召回相关文档片段</li>
<li><strong>生成阶段</strong>:将召回内容 + 用户问题拼接为 Prompt → 大模型生成答案</li>
</ol>
<h2>二、环境准备</h2>
<pre><code>&lt;!-- pom.xml --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;dev.langchain4j&lt;/groupId&gt;
    &lt;artifactId&gt;langchain4j&lt;/artifactId&gt;
    &lt;version&gt;0.36.0&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;dev.langchain4j&lt;/groupId&gt;
    &lt;artifactId&gt;langchain4j-open-ai&lt;/artifactId&gt;
    &lt;version&gt;0.36.0&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;dev.langchain4j&lt;/groupId&gt;
    &lt;artifactId&gt;langchain4j-embeddings-all-minilm-l6-v2&lt;/artifactId&gt;
    &lt;version&gt;0.36.0&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
<h2>三、文档加载与切片</h2>
<pre><code>// 加载文档
Document document = FileSystemDocumentLoader.loadDocument(
    Paths.get("knowledge-base/company-faq.txt"),
    new TextDocumentParser()
);

// 文档切片(每片500字符,重叠50字符)
DocumentSplitter splitter = DocumentSplitters.recursive(500, 50);
List&lt;TextSegment&gt; segments = splitter.split(document);

System.out.println("切片数量: " + segments.size());</code></pre>
<h2>四、向量化与存储</h2>
<pre><code>// 使用本地嵌入模型(无需 API Key)
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();

// 使用内存向量库(生产环境可换 Milvus/Pinecone)
EmbeddingStore&lt;TextSegment&gt; embeddingStore = new InMemoryEmbeddingStore&lt;&gt;();

// 批量向量化并存储
EmbeddingStoreIngestor ingestor = EmbeddingStoreIngestor.builder()
    .documentSplitter(DocumentSplitters.recursive(500, 50))
    .embeddingModel(embeddingModel)
    .embeddingStore(embeddingStore)
    .build();

ingestor.ingest(document);
System.out.println("文档已向量化并存入知识库");</code></pre>
<h2>五、构建问答链</h2>
<pre><code>// 定义 AI 服务接口
interface KnowledgeBaseAssistant {
    String answer(String question);
}

// 配置 RAG 检索器
ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder()
    .embeddingStore(embeddingStore)
    .embeddingModel(embeddingModel)
    .maxResults(3)          // 召回最相关的3个片段
    .minScore(0.6)          // 相似度阈值
    .build();

// 构建 AI 服务
KnowledgeBaseAssistant assistant = AiServices.builder(KnowledgeBaseAssistant.class)
    .chatLanguageModel(OpenAiChatModel.builder()
      .apiKey(System.getenv("OPENAI_API_KEY"))
      .modelName("gpt-4o-mini")
      .build())
    .contentRetriever(contentRetriever)
    .build();

// 开始问答
String answer = assistant.answer("公司的退款政策是什么?");
System.out.println("AI回答: " + answer);</code></pre>
<h2>六、生产环境优化</h2>
<ol>
<li><strong>向量数据库</strong>:替换 InMemoryEmbeddingStore 为 Milvus 或 Weaviate</li>
<li><strong>混合检索</strong>:结合关键词检索 + 向量检索,提升召回率</li>
<li><strong>重排序</strong>:使用 Reranker 对召回结果重新排序,提升精度</li>
<li><strong>流式输出</strong>:使用 StreamingChatLanguageModel 实现打字机效果</li>
</ol>
<h2>总结</h2>
<p>RAG 是企业落地大模型的最佳实践。LangChain4j 提供了完整的 Java 生态支持,让你无需 Python 也能构建生产级 AI 应用。下期我们来聊:<strong>如何用 Milvus 替换内存向量库,支持百万级文档检索</strong>。</p>
<p>觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀</p>

</div>
<div id="MySignature" role="contentinfo">
   

---

📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**

💬 有问题或建议?欢迎在评论区留言讨论~

🔗 更多技术干货请关注作者:弥烟袅绕

📚 本文地址:https://www.cnblogs.com/czlws/p/19799382/rag-langchain4j-java-ai-knowledge-base<br><br>
来源:https://www.cnblogs.com/czlws/p/19799382/rag-langchain4j-java-ai-knowledge-base
頁: [1]
查看完整版本: RAG实战:用LangChain4j构建企业级知识库问答系统