简介
saa是java的ai agent框架,本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理,不仅可以指导agent的开发,更可以改造框架,增加新特性
系列内容:
系列( 一) 架构
系列( 二) 调用
I 工具
II-1 MCP MCP 能力,工具,资源,Prompts ,sampling ,。。。;springboot 集成;
-2 分布式MCP
-3 MCP security
III skills
系列( 六) RAG 本文
知识库,文档读取,分块;嵌入,向量store
检索,增强生成,模块化
混合检索,融合重排
系列( 三) 模型
I 模型模型,chat 模型; chat client ,提示词,advisor组件;chat 记忆
系列( 四) graph :节点和边,StateGraph ,CompiledGraph ;图执行
系列( 五) I agent ,ReactAgent, AgentLlmNode, AgentToolNode ;FlowAgain ,A2A agent ,agent tools 放在MAS
II 钩子和拦截器;上下文工程
系列( 七) MAS
I FlowAgent ,sub agent ,agent tool ;handoffs 模式,toolcalling 模式;
II A2A ,分布式agent ;agent 集群,AP2AP
III 集成agentscope-java ,agentic 模式,消息hub
系列( 八) 模型评估和观测
系列( 九) agent 管理平台 agent 发布,列表,提示词管理,会话管理,skill 管理,MCP 服务管理;评估;观测
本文分析RAG,based spring ai alibaba v1.1.2.2,spring ai v1.1.2
RAG是一种结合信息检索 与文本生成 的技术,"检索文档、填充上下文、生成答案",先从知识库中实时检索相关信息,然后基于这些检索的可靠证据生成回答。这种方法有效提升了生成内容的准确性、时效性,同时显著减少了大模型产生"幻觉"或错误信息的风。
缩写
spring ai缩写sa
spring 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,嵌入,audio,image等类型,其中chat模型包括,chat client,advisor组件,提示词,记忆等;
agent/graph agent和图紧密相关,可以认为agent是一种既定的"图"形,开发人员可以使用graph低层api直接构建graph,使用agent获得既定的图形,简化和加快agent的开发
调用(calling) ai应用的手脚,执行动作,干实事
RAG 检索增强生成
MAS 多个agent协同工作,每个agent有独立职能
studio 简易的agent管理工具,嵌入到agent,带有agent面板,列表agent;提供chat界面,用于调试agent
admin 管理台, agent的发布,列表,管理,执行;提示词工程,评估和数据集,观测
技术架构

上图RAG技术架构图,两条线,知识库和检索增强生成
文档向量化索引
内容抓取,内容切分,向量化和保存
检索增强生成
分2个阶段检索和生成
下面详细分析各个组件
知识库
文档向量化索引目的是建立知识库,技术上是ETL,可使用datax,seatunel自行开发,sa提供一揽子组件

上图文档向量化索引的类图
Document 文档内容,作为DTO,携带从reader,到转换,最后写入writer
DocumentReader 文档内容的读取,解释,抓取
DocumentTransformer Document内容转换,文本内容的分块
DocumentWriter 目前实现是VectorStore,写入向量库,依赖EmbeddingModel,转换Document为向量
sa/saa没有提供etl引擎,需要引入datax,seatunel之类,整合组件为完整的流水线,提供分布式,分片,容错能力。
简单RAG
简单的rag

上图sa的QuestionAnswerAdvisor实现rag
这类在advisor-vectorstore包,其功能是call大模型前,执行检索,检索结果填充提示词模板,以该模板生成提示词,构建ChatClient请求,再call大模型生成内容
模块化RAG
下图是模块化rag的逻辑架构图

模块化RAG,分成4个阶段,每个阶段有相应组件完成特定工作,如,检索前查询预处理,检索后调用大模型前的文档再处理,组件以接口定义,替换不同的实现,实现不同的RAG逻辑,RetrievalAugmentationAdvisor是模块化RAG的实现
检索前置(Pre-Retrieval)
**++检索前置模块++**处理用户查询,有两个组件
QueryTransformer
用于转换输入查询的组件,使其更有效地用于检索任务,解决诸如格式不良的查询、模糊术语、复杂词汇或不支持的语言等挑战。
实现1 CompressionQueryTransformer 使用大型语言模型将对话历史和后续查询压缩为捕获对话本质的独立查询。对话历史很长且后续查询与对话上下文相关时,转换器很有用。
实现2 TranslationQueryTransformer 使用大型语言模型将查询翻译为目标语言,该语言由用于生成文档嵌入的嵌入模型支持。如果查询已经是目标语言,则保持不变。如果查询的语言未知,也保持不变。嵌入模型在特定语言上训练且用户查询使用不同语言时,此转换器很有用。
实现3 RewriteQueryTransformer使用大型语言模型重写用户查询,以便在查询目标系统(如向量存储或网络搜索引擎)时提供更好的结果。用户查询冗长、模糊或包含可能影响搜索结果质量的不相关信息时,此转换器很有用。
总结:3个转换不同维度,可以叠加使用
QueryExpander
QueryExpander用于将输入查询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
实现 HyDETransformer HyDE (Hypothetical 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 rag RAG 技术的一次重要演进,通过引入图结构来解决传统 RAG 在处理复杂关联知识时的核心短板
对话历史管理 用户是查询者,更是审核者,用户在得到前面的反馈,有新的认识,对问题有更深入更聚焦的理解,多轮提问得到的解答越来越接近用户的所想所要,提供对话历史,大模型更准确更全面理解用户的意图