基于LangChain4j的企业知识库智能问答系统构建
核心架构解析
RAG(检索增强生成)通过融合外部知识与大模型推理能力,有效缓解了生成式AI常见的幻觉问题。其工作流程包含三个关键阶段:
- 知识索引:将原始文档按语义切分为小段,转化为向量并持久化存储
- 动态检索:用户输入问题后,系统在向量空间中查找最相关的上下文片段
- 上下文生成:将匹配到的文本片段与原始问题拼接为提示词,驱动模型输出准确回答
依赖配置
<!-- pom.xml -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.36.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.36.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>0.36.0</version>
</dependency>
文档预处理流程
// 读取本地文本文件
Document sourceDoc = FileSystemDocumentLoader.loadDocument(
Paths.get("resources/knowledge_base/faq.txt"),
new TextDocumentParser()
);
// 按500字符分块,每块间保留50字符重叠
DocumentSplitter chunker = DocumentSplitters.recursive(500, 50);
List<TextSegment> chunks = chunker.split(sourceDoc);
System.out.println("共生成 " + chunks.size() + " 个语义块");
向量化与持久化
// 选用轻量级本地嵌入模型
EmbeddingModel vectorizer = new AllMiniLmL6V2EmbeddingModel();
// 使用内存型向量数据库(开发调试用)
EmbeddingStore<TextSegment> store = new InMemoryEmbeddingStore<>();
// 构建批量注入器
EmbeddingStoreIngestor processor = EmbeddingStoreIngestor.builder()
.documentSplitter(DocumentSplitters.recursive(500, 50))
.embeddingModel(vectorizer)
.embeddingStore(store)
.build();
processor.ingest(sourceDoc);
System.out.println("已完成知识向量化入库");
智能问答服务实现
// 定义接口契约
interface QASystem {
String query(String question);
}
// 配置检索逻辑
ContentRetriever retriever = EmbeddingStoreContentRetriever.builder()
.embeddingStore(store)
.embeddingModel(vectorizer)
.maxResults(3) // 最多返回3个相关段落
.minScore(0.6) // 相似度低于此值则忽略
.build();
// 创建AI服务实例
QASystem qaService = AiServices.builder(QASystem.class)
.chatLanguageModel(OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4o-mini")
.build())
.contentRetriever(retriever)
.build();
// 执行查询
String response = qaService.query("如何申请产品退款?");
System.out.println("AI响应: " + response);
生产部署建议
- 向量存储升级:将内存数据库替换为 Milvus、Weaviate 等分布式向量引擎
- 混合搜索策略:结合关键字匹配与向量相似性,提升召回覆盖率
- 结果重排序:引入 reranker 模型对候选结果进行精排
- 流式响应:采用 StreamingChatLanguageModel 实现逐字输出效果