文档过滤和检索

在 Spring AI 的向量存储(VectorStore)中,文档过滤检索是构建 RAG(检索增强生成)等应用的核心流程,它们结合向量相似度和元数据筛选,实现精准的文档查找。

SpringAI将文档过滤和检索分为了三个阶段,分别为预检索、检索中、检索后。每一个阶段都提供了自定义组件来更好地增强检索,提高准确性。

预检索

负责优化用户输入的查询语句,使描述问题更清晰,更有针对性,提高后续检索的质量。

核心任务

  • 对用户查询文本进行清洗、分词或扩展(如同义词替换)
  • 基于业务规则过滤掉明显不相关的文档集合
  • 动态生成或调整检索过滤条件(Filter.Expression

RewriteQueryTransformer:对用户的查询进行改写,当用户查询含糊不清或者包含无意义的信息时,会使其更加清洗明确。

由源码可以看出,实际上就是将这个语句和用户查询的语句拼接在一起,同时用了动态参数。

QueryTransformer:用于转换用户原始查询,例如:

public class CustomQueryTransformer implements QueryTransformer {
    @Override
    public String transform(String query) {
        // 示例:将英文缩写替换为全称
        return query.replace("AI", "人工智能");
    }
}

  • 对查询进行拼写纠错
  • 扩展查询关键词(如将 “AI” 扩展为 “人工智能”)
  • 提取查询中的实体作为过滤条件(如从 “北京的天气” 中提取 “location: 北京” 作为过滤条件)

此外还有很多组件,需要我们耐心探索

检索中

目标:在向量数据库执行检索时,优化相似度计算和结果筛选逻辑,查询出最相关的文档。

核心任务

  • 调整相似度度量方式(如从余弦相似度切换为点积)
  • 动态设置检索参数(如 topKsimilarityThreshold
  • 结合向量相似度和元数据过滤进行混合检索

DocumentRetriever:是负责从向量存储(或其他数据源)中检索与查询相关的文档的核心组件。支持元数据过滤、设置相似度阈值、设置返回的结果数。

ConcatenationDocumentJoiner:是一个用于将多个文档内容合并为单一字符串的组件,当检索到多个相关文档后,需要将它们的内容合并成一个连贯的上下文,再传递给大语言模型(LLM)生成回答。

检索后

目标:对检索返回的结果进行二次处理,提升最终结果的相关性和可用性。

核心任务

  • 重排序检索结果(如基于业务权重调整顺序)
  • 过滤低质量或重复文档
  • 对文档内容进行摘要或格式化

查询增强和关联

在 Spring AI 及 RAG(检索增强生成)场景中,查询增强(Query Enhancement) 和关联(Correlation) 是提升检索准确性和生成质量的重要技术,旨在解决原始查询表达不清晰、上下文缺失或与文档匹配度低等问题。

是RAG流程的最终环节,负责将检索的文档与用户查询结合起来,为AI提供必要的上下文。

QuestionAnswerAdvisor

当用户问题发给AI模型时,Advisor会查询向量数据库搜索与用户问题相关的文档作为上下文,附加到用户查询中

ChatResponse response = ChatClient.builder(chatModel)
        .build().prompt()
        .advisors(new QuestionAnswerAdvisor(vectorStore))
        .user(userText)
        .call()
        .chatResponse();

实现原理就是将上下文和用户查询拼接为一个新的Prompt。

RetrievalAugmentationAdvisor

RetrievalAugmentationAdvisor(检索增强顾问)是一个专注于优化 RAG(检索增强生成)核心链路的组件。它的核心职责是通过动态调整 “检索 - 增强 - 生成” 全流程中的关键环节,解决检索与生成脱节、上下文相关性不足、LLM 幻觉等问题,最终提升回答的准确性、相关性和可靠性。

核心定位与解决的核心问题

RAG 流程中常见的痛点包括:

  1. 检索到的文档冗余或噪音过多,导致 LLM 注意力分散;
  2. 检索结果与用户问题的语义匹配度低,增强效果有限;
  3. 上下文拼接方式简单(如直接拼接),LLM 难以高效提取关键信息;
  4. 缺乏对检索质量的评估与二次优化机制。

RetrievalAugmentationAdvisor 正是针对这些痛点,通过 “评估 - 优化 - 增强” 的闭环逻辑,让检索结果更好地服务于生成环节。

ContextualQueryAugmenter

默认情况,空上下文模型会被RetrievalAugmentationAdvisor命令不回答。但ContextualQueryAugmenter会对空上下文做出一些处理

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐