SpringAI RAG 检索增强生成
- [1. 文档](#1. 文档)
- [2. 实现](#2. 实现)
1. 文档
https://docs.spring.io/spring-ai/reference/api/retrieval-augmented-generation.html
2. 实现
java
//4.RAG
//1.用户提示词压缩,多轮对话中捕捉用户真实意图(大模型温度要低)
//2.用户提示词重写,澄清用户意图(大模型温度要低)
//3.用户提示词扩展,从多个角度捕捉用户意图
//4.文档检索(可以多源检索、元数据过滤、稠密&稀疏检索)
//5.文档合并,将多个文档源的文档合并
//6.重排序并移除低相关文档,压缩文档,满足大模型上下文窗口
//7.上下文生成
//8.允许大模型使用工具继续检索
FilterExpressionBuilder filterExpressionBuilder = new FilterExpressionBuilder();
RetrievalAugmentationAdvisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.queryTransformers(
List.of(
// 1. 提示词压缩
CompressionQueryTransformer.builder().chatClientBuilder(ragChatClient.mutate()).build(),
// 2. 提示词重写
RewriteQueryTransformer.builder().chatClientBuilder(ragChatClient.mutate()).build()
)
)
// 3. 提示词扩展
.queryExpander(
MultiQueryExpander.builder().chatClientBuilder(ragChatClient.mutate()).numberOfQueries(3).includeOriginal(true).build()
)
// 4. 文档检索
.documentRetriever(
VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.5)
.topK(10)
.filterExpression(
filterExpressionBuilder.and(
filterExpressionBuilder.eq("tenantId", tenantId),
filterExpressionBuilder.eq("orgId", PBSContext.getUserContext().getUserModel().getCoId())
).build()
)
.vectorStore(vectorStore)
.build()
)
// 5. 文档合并
.documentJoiner(new ConcatenationDocumentJoiner())
// 6. 重排序并移除低相关文档
.documentPostProcessors(
RerankerDocumentPostProcessor.builder().rerankModel(rerankModel).build()
)
// 7. 上下文生成
.queryAugmenter(ContextualQueryAugmenter.builder()
// 默认情况下,ContextualQueryAugmenter 不允许检索到的上下文为空。当发生这种情况时,它会指示模型不要回答用户查询。
// 若启用 allowEmptyContext 选项,则允许模型在检索到的上下文为空时生成响应
.allowEmptyContext(Boolean.TRUE)
.build())
.build();