ai-agent框架spring ai/alibaba源码原理 (四) RAG 简介saa是java的ai agent框架本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理不仅可以指导agent的开发更可以改造框架增加新特性系列内容系列(一)架构系列(二)调用I工具II-1 MCP MCP能力工具资源Promptssampling。。。springboot集成-2分布式MCP-3 MCP securityIII skills系列(六) RAG 本文知识库文档读取分块嵌入向量store检索增强生成模块化混合检索融合重排系列(三)模型 chat模型; chat client提示词advisor组件chat记忆系列(四) graph节点和边StateGraphCompiledGraph图执行系列(五) agentI agentReactAgentII钩子和拦截器上下文工程系列(七) MASI FlowAgentsub agentagent toolhandoffs模式toolcalling模式II A2A分布式agentagent集群AP2APIII集成agentscope-javaagentic模式消息hub系列(八)模型评估和观测系列(九) agent管理平台 agent发布列表提示词管理会话管理skill管理MCP服务管理评估观测本文分析RAGbased spring ai alibaba v1.1.2.2spring ai v1.1.2RAG是一种结合信息检索与文本生成的技术检索文档、填充上下文、生成答案先从知识库中实时检索相关信息然后基于这些检索的可靠证据生成回答。这种方法有效提升了生成内容的准确性、时效性同时显著减少了大模型产生“幻觉”或错误信息的风。缩写spring ai缩写saspring ai alibaba本文缩写saa参考资料https://java2ai.com/docs/overview spring ai alibaba官网文档https://docs.spring.io/spring-ai/reference/index.html spring ai官方文档spring ai/spring ai alibaba组件视图本节回顾一下sa/saa的组件架构上图是saa原理源码分析场景视图每个包对应着saa/sa组件或特性是本文分析的目录model大模型调用装模型包括Chat嵌入audioimage等类型其中chat模型包括chat clientadvisor组件提示词记忆等agent/graphagent和图紧密相关可以认为agent是一种既定的”图”形开发人员可以使用graph低层api直接构建graph使用agent获得既定的图形简化和加快agent的开发调用(calling)ai应用的手脚执行动作干实事RAG检索增强生成MAS多个agent协同工作每个agent有独立职能studio简易的agent管理工具嵌入到agent带有agent面板列表agent提供chat界面用于调试agentadmin管理台 agent的发布列表管理执行提示词工程评估和数据集观测技术架构上图RAG技术架构图两条线知识库和检索增强生成文档向量化索引内容抓取内容切分向量化和保存检索增强生成分2个阶段检索和生成下面详细分析各个组件知识库文档向量化索引目的是建立知识库技术上是ETL可使用dataxseatunel自行开发sa提供一揽子组件上图文档向量化索引的类图Document 文档内容作为DTO携带从reader到转换最后写入writerDocumentReader 文档内容的读取解释抓取DocumentTransformer Document内容转换文本内容的分块DocumentWriter 目前实现是VectorStore写入向量库依赖EmbeddingModel转换Document为向量sa/saa没有提供etl引擎需要引入dataxseatunel之类整合组件为完整的流水线提供分布式分片容错能力。简单RAG简单的rag上图sa的QuestionAnswerAdvisor实现rag这类在advisor-vectorstore包其功能是call大模型前执行检索检索结果填充提示词模板以该模板生成提示词构建ChatClient请求再call大模型生成内容模块化RAG下图是模块化rag的逻辑架构图模块化RAG分成4个阶段每个阶段有相应组件完成特定工作如检索前查询预处理检索后调用大模型前的文档再处理组件以接口定义替换不同的实现实现不同的RAG逻辑RetrievalAugmentationAdvisor是模块化RAG的实现检索前置(Pre-Retrieval)检索前置模块处理用户查询有两个组件QueryTransformer用于转换输入查询的组件使其更有效地用于检索任务解决诸如格式不良的查询、模糊术语、复杂词汇或不支持的语言等挑战。实现1CompressionQueryTransformer使用大型语言模型将对话历史和后续查询压缩为捕获对话本质的独立查询。对话历史很长且后续查询与对话上下文相关时转换器很有用。实现2TranslationQueryTransformer使用大型语言模型将查询翻译为目标语言该语言由用于生成文档嵌入的嵌入模型支持。如果查询已经是目标语言则保持不变。如果查询的语言未知也保持不变。嵌入模型在特定语言上训练且用户查询使用不同语言时此转换器很有用。实现3RewriteQueryTransformer使用大型语言模型重写用户查询以便在查询目标系统如向量存储或网络搜索引擎时提供更好的结果。用户查询冗长、模糊或包含可能影响搜索结果质量的不相关信息时此转换器很有用。总结3个转换不同维度可以叠加使用QueryExpanderQueryExpander用于将输入查询Query扩展为查询列表通过提供替代查询公式或将复杂问题分解为更简单的子查询来解决诸如格式不佳的查询实现MultiQueryExpander使用大型模将查询扩展为多个语义上不同的变体以捕获不同的视角这对于检索额外的上下文信息和增加找到相关结果的机会很有用。检索(Retrieval)检索模块检索关联文档包括两个组件DocumentRetriever负责从底层数据源如搜索引擎、向量存储、数据库或知识图谱检索 Documents 的组件。文档检索向量库检索实现 VectorStoreDocumentRetriever 向量检索DocumentJoiner检索前置介绍过QueryExpande将输入查询扩展为多个查询搜索执行多次返回多个结果本组件用于将基于多个查询和来自多个数据源检索到的文档组合成单个文档集合的组件。作为连接过程的一部分它还可以处理重复文档和互惠排名策略。实现 ConcatenationDocumentJoiner通过将基于多个查询和来自多个数据源检索到的文档连接成单个文档集合来组合它们。在重复文档的情况下保留第一次出现。每个文档的分数保持不变。检索后置(Post-Retrieval)检索结果加工处理接口 DocumentPostProcessor基于查询对检索到的文档进行后处理的组件解决诸如中间丢失、模型的上下文长度限制以及需要减少检索信息中的噪音和冗余等挑战。sa没有实现生成(Generation)Generation 模块负责基于用户查询和检索到的文档生成最终响应。虽然名字叫生成实际是加强提示词接口 Query Augmentation用于增强输入查询的组件提供额外的数据用于为大型语言模型提供必要的上下文以回答用户查询。实现ContextualQueryAugmenter使用提供的文档内容中的上下文数据增强用户查询。虽然名称生成实际检索内容填充模板返回加强提示词内容生成后面的大模型调用完成总结模块化RAG分4个模块每个模块包括一个或多个组件组件定义为接口实现可拔插可替换但总体形态上与朴素RAG是类似的advisor串联起所有的组件增强提示词最后给大模型生成内容区别是检索前对查询优化检索后可对文档处理。混合检索(HyDE)混合检索单一的检索算法有其侧重和局限性如BM25 优势在于相似度 KNN优势是关联性。结合BM25和KNN向量搜索, 支持Reciprocal Rank Fusion (RRF) 排序获得多元精确的结果上节介绍模块化架构ali的rag扩展沿用了该架构上图saa rag扩展整个RAG协调者是 HybridSearchAdvisor组件sa的可以用这里只展示新增的组件检索前置QueryTransformer实现HyDETransformerHyDEHypothetical Document Embeddings假设文档嵌入技术从而显著提升向量检索的准确率和召回质量。检索HybridElasticsearchRetriever 结合BM25和KNN向量搜索, 支持Reciprocal Rank Fusion (RRF) 排序依赖elasticsearch有比较大的限制检索后置-融合重排saa 提供检索后置DocumentPostProcessor的实现实现DashScopeRerankPostProcessor使用DashScope 的RerankModel对检索结果重排RerankModel不是spirng ai的标准模型功能依赖阿里的DashScope平台总结spring ai 模块化的RAG这一架构中RAG 过程分解为专门的、可互换的模块查询规划器、检索器、重排序器、生成器用户根据需要动态组合各组件达到最佳效果。spring ai alibaba提供混合检索的rag其他agentic rag 这是在saa文档提过的一种rag模式大模型自主rag流程graph ragRAG技术的一次重要演进通过引入图结构来解决传统 RAG在处理复杂关联知识时的核心短板对话历史管理 用户是查询者更是审核者用户在得到前面的反馈有新的认识对问题有更深入更聚焦的理解多轮提问得到的解答越来越接近用户的所想所要提供对话历史大模型更准确更全面理解用户的意图