微信扫码
添加专属顾问
我要投稿
深入解析RAG知识库中的文档过滤与检索技术,掌握Spring AI提供的强大查询处理组件。 核心内容: 1. 检索前阶段的查询优化方法(重写、翻译、压缩、扩展) 2. Spring AI提供的四种查询转换组件详解 3. 代码示例展示各组件实际应用场景
文档过滤检索阶段拆分为:检索前、检索时、检索后。
预检索阶段负责处理和优化用户的原始查询,以提高后续检索的质量。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<Query, List<List<Document>>> documentsForQuery = ...DocumentJoiner documentJoiner = new ConcatenationDocumentJoiner();List<Document> documents = documentJoiner.join(documentsForQuery);
检索后模块负责处理检索到的文档,以实现最佳生成结果。可以解决“丢失在中间”问题、模型上下文长度限制,以及减少检索信息中的噪音和冗余。包括:
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-02-04
Claude Cowork 真能替换 RAG ?
2026-02-03
使用 Agent Skills 做知识库检索,能比传统 RAG 效果更好吗?
2026-02-03
告别向量数据库!PageIndex:让AI像人类专家一样阅读长文档
2026-02-02
OpenViking:面向 Agent 的上下文数据库
2026-02-02
别再迷信向量数据库了,RAG 的“大力出奇迹”该结束了
2026-01-29
告别黑盒开发!清华系团队开源 UltraRAG:用“搭积木”的方式构建复杂 RAG 流程
2026-01-28
RAG优化不抓瞎!Milvus检索可视化,帮你快速定位嵌入、切块、索引哪有问题
2026-01-28
今天,分享Clawdbot记忆系统最佳工程实践
2025-12-04
2025-12-03
2025-11-13
2025-12-02
2025-11-13
2026-01-15
2025-12-07
2026-01-02
2025-12-23
2025-12-18
2026-02-04
2026-02-03
2026-01-19
2026-01-12
2026-01-08
2026-01-02
2025-12-23
2025-12-21