序
本文主要研究一下Spring AI的RAG
Sequential RAG Flows
Naive RAG
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.50)
.vectorStore(vectorStore)
.build())
.queryAugmenter(ContextualQueryAugmenter.builder()
.allowEmptyContext(true)
.build())
.build();
String answer = chatClient.prompt()
.advisors(retrievalAugmentationAdvisor)
.user(question)
.call()
.content();
allowEmptyContext为true告诉大模型不回答context为empty的问题
Advanced RAG
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.queryTransformers(RewriteQueryTransformer.builder()
.chatClientBuilder(chatClientBuilder.build().mutate())
.build())
.documentRetriever(VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.50)
.vectorStore(vectorStore)
.build())
.build();
String answer = chatClient.prompt()
.advisors(retrievalAugmentationAdvisor)
.user(question)
.call()
.content();
Advanced RAG可以设置queryTransformers来进行查询转换
Modular RAG
Spring AI受Modular RAG: Transforming RAG Systems into LEGO-like Reconfigurable Frameworks启发实现了Modular RAG,主要分为如下几个阶段:Pre-Retrieval、Retrieval、Post-Retrieval、Generation
Pre-Retrieval
增强和转换用户输入,使其更有效地执行检索任务,解决格式不正确的查询、query 语义不清晰、或不受支持的语言等。
1. QueryAugmenter 查询增强
使用附加的上下文数据信息增强用户query,提供大模型回答问题时的必要上下文信息;
- ContextualQueryAugmenter使用上下文来增强query
QueryAugmenter augmenter = ContextualQueryAugmenter. builder()
.allowEmptyContext(false)
.build();
Query augmentedQuery = augmenter.augment(query, documents);
2. QueryTransformer 查询改写
因为用户的输入通常是片面的,关键信息较少,不便于大模型理解和回答问题。因此需要使用prompt调优手段或者大模型改写用户query;
当使用QueryTransformer时建议设置比较低的temperature(比如0.0)来确保结果的准确性
它有CompressionQueryTransformer、RewriteQueryTransformer、TranslationQueryTransformer三种实现
- CompressionQueryTransformer使用大模型来压缩会话历史
Query query = Query.

最低0.47元/天 解锁文章
1060





