免费POC, 零成本试错
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


我要投稿

RAG知识库-文档过滤和检索

发布日期:2025-12-26 07:02:46 浏览次数: 1519
作者:全栈开发开拓者

微信搜一搜,关注“全栈开发开拓者”

推荐语

深入解析RAG知识库中的文档过滤与检索技术,掌握Spring AI提供的强大查询处理组件。

核心内容:
1. 检索前阶段的查询优化方法(重写、翻译、压缩、扩展)
2. Spring AI提供的四种查询转换组件详解
3. 代码示例展示各组件实际应用场景

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家
前几篇分享了RAG知识库RAG知识库-文档收集和切割(ETL)RAG知识库-向量存储和转换
RAG完整流程

文档过滤检索阶段拆分为:检索前、检索时、检索后。

检索前

预检索阶段负责处理和优化用户的原始查询,以提高后续检索的质量。Spring AI提供了多种查询处理组件。Spring AI提供了多种查询处理组件。

查询转换-查询重写

当用户查询含糊不清或包含无关信息时,使用RewriteQueryTransformer大模型语言对用户的原始检查进行改写。

Query query = new Query("啊,什么程序员呀呀呀?");
QueryTransformer queryTransformer = RewriteQueryTransformer.builder()        .chatClientBuilder(chatClientBuilder)        .build();
Query transformedQuery = queryTransformer.transform(query);
查询转换-查询翻译

TranslationQueryTransformer将查询翻译成嵌入模型支持的目标语言。如果查询已经是目标语言,则保持不变。

QueryTransformer queryTransformer = TranslationQueryTransformer.builder()                                            .chatClientBuilder(chatClientBuilder)                                            .targetLanguage("chinese")                                            .build();Query transformedQuery = queryTransformer.transform(query);
查询转换-查询压缩

CompressionQueryTransformer使用大语言模型将对话历史和后续查询压缩成一个独立的查询。

Query query = Query.builder()              .text("阿里云有什么作用?")              .history(new UserMessage("程序员是什么?"), new AssistantMessage("阿里巴巴创始人是谁?"))              .build();QueryTransformer queryTransformer = CompressionQueryTransformer.builder()                                    .chatClientBuilder(chatClientBuilder)                                    .build();Query transformedQuery = queryTransformer.transform(query);
查询转换-查询扩展

MultiQueryExpander使用大语言模型将一个查询扩展为多个语言上不同的变体,有助于检索额外的上下文信息并增加找到相关结果的机会。

MultiQueryExpander queryExpander = MultiQueryExpander.builder()                                   .chatClientBuilder(chatClientBuilder)                                   .numberOfQueries(3)                                   .build();List<Query> queries = queryExpander.expand(new Query("啥是程序员?程序会做啥?"));
检索

检索模块负责从存储中查询检索出最相关的文档。

文档检索

Spring AI提供了文档检索器。不同的存储方案都可能有自己的文档检索器实现类,比如VectorStoreDocumentRetriever,从向量存储中检索与查询语义相似的文档。它支持基于元数据的过滤、设置相似度阈值、设置返回的结果数。

DocumentRetriever retriever = VectorStoreDocumentRetriever.builder()                              .vectorStore(vectorStore)                              .similarityThreshold(0.7)                              .topK(5)                              .filterExpression(new FilterExpressionBuilder()                              .eq("type""web").build())                              .build();List<Document> documents = retriever.retrieve(new Query("程序员会做啥?"));
文档合并

Spring AI内置了ConcatenationDocumentJoiner文档合并器,通过连接操作,将基于多个查询和来自多个数据源检索到的文档合并成单个文档集合。

Map<QueryList<List<Document>>> documentsForQuery = ...DocumentJoiner documentJoiner = new ConcatenationDocumentJoiner();List<Document> documents = documentJoiner.join(documentsForQuery);
检索后

检索后模块负责处理检索到的文档,以实现最佳生成结果。可以解决“丢失在中间”问题、模型上下文长度限制,以及减少检索信息中的噪音和冗余。包括:

  • 根据与查询的相关性对文档进行排序
  • 删除不相关或冗余的文档
  • 压缩每个文档的内容以减少噪音和冗余
以上是RAG知识库-文档过滤和检索的内容,后续继续分享RAG相关知识。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询