Spring AI 常用 Advisor 文章目录Spring AI 常用 AdvisorChatClient 增强链路与 RAG 挂载一、Advisor 是什么1 三种挂载方式二、常用 Advisor 总览1 Maven 依赖三、RAG 类 Advisor1 QuestionAnswerAdvisor最简 Naive RAG2 RetrievalAugmentationAdvisor模块化 RAG3 RetrievalRerankAdvisor检索 百炼 Rerank4 RAG 三者怎么选四、记忆类 Advisor1 MessageChatMemoryAdvisor2 VectorStoreChatMemoryAdvisor五、工具与调试类 Advisor1 ToolCallingAdvisor2 SimpleLoggerAdvisor六、推理与安全类 Advisor1 ReReadingAdvisorRe22 SafeGuardAdvisor七、组合示例记忆 RAG八、小结Spring AI 常用 AdvisorChatClient 增强链路与 RAG 挂载技术栈Java 21 / Spring Boot 4.1 / Spring AI 2.0.0-M1 / spring-ai-alibaba 2.0.0-M1.1。官方参考Advisors API · Retrieval Augmented Generation · ChatClient一、Advisor 是什么Advisor是挂在ChatClient上的拦截增强器在请求发往 LLM 之前before和收到回复之后after修改 Prompt / Response。概念说明Advisor 链多个 Advisor 按getOrder()排序值越小越先执行 beforeChatClientRequest未密封的 Prompt contextMapAdvisor 间可共享状态before / after改 Prompt / 改 ResponseRAG 类 Advisor 主要在 before 里检索并增强用户消息1 三种挂载方式方式API适用单次.prompt().advisors(...)某次调用才需要增强默认ChatClient.builder(...).defaultAdvisors(...)整个 Client 统一行为运行时参数.advisors(a - a.param(key, value))动态 filter、conversationId 等// 默认挂载 运行时传参ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(qaAdvisor).build();StringanswerchatClient.prompt().advisors(a-a.param(ChatMemory.CONVERSATION_ID,session-001)).user(你好).call().content();二、常用 Advisor 总览Advisor来源分类作用QuestionAnswerAdvisorSpring AIRAGNaive RAGVectorStore 检索 → 拼 PromptRetrievalAugmentationAdvisorSpring AIRAG模块化 RAGQuery 改写 / 多路检索 / 后处理可拼装RetrievalRerankAdvisorspring-ai-alibabaRAG检索 → 百炼 Rerank → 生成MessageChatMemoryAdvisorSpring AI记忆把历史消息注入 PromptVectorStoreChatMemoryAdvisorSpring AI记忆从 VectorStore 检索相关历史ToolCallingAdvisorSpring AI工具自动执行 Function Calling 循环SimpleLoggerAdvisorSpring AI调试打印 request / responseReReadingAdvisorSpring AI推理Re2 重读策略增强推理SafeGuardAdvisorSpring AI安全拦截有害内容QuestionAnswerAdvisor → 检索 → 拼 Prompt → 生成 RetrievalAugmentationAdvisor → 预处理 → 检索 → 后处理 → 增强 → 生成 RetrievalRerankAdvisor → 检索 → 百炼重排 → 拼 Prompt → 生成1 Maven 依赖!-- RAGQuestionAnswerAdvisor、VectorStoreChatMemoryAdvisor --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-advisors-vector-store/artifactId/dependency!-- RAGRetrievalAugmentationAdvisor --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-rag/artifactId/dependency!-- RAGRetrievalRerankAdvisor --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactIdversion2.0.0-M1.1/version/dependency类包名QuestionAnswerAdvisororg.springframework.ai.chat.client.advisor.vectorstoreRetrievalAugmentationAdvisororg.springframework.ai.rag.advisorRetrievalRerankAdvisorcom.alibaba.cloud.ai.advisorMessageChatMemoryAdvisororg.springframework.ai.chat.client.advisorToolCallingAdvisororg.springframework.ai.chat.client.advisorSimpleLoggerAdvisororg.springframework.ai.chat.client.advisorReReadingAdvisor需自行实现或引用示例见官方文档三、RAG 类 Advisor1 QuestionAnswerAdvisor最简 Naive RAG向量检索 → 把文档拼进 Prompt → 调用 LLM。无 Rerank、无 Query 改写。SearchRequestrequestSearchRequest.builder().topK(5)// 最多返回 5 条文档.similarityThreshold(0.45)// 相似度下限.build();// 单次挂载StringanswerChatClient.builder(chatModel).build().prompt().user(请基于资料详细解释机器学习)// 用户问题.advisors(QuestionAnswerAdvisor.builder(vectorStore)// 本次调用才挂载 QA Advisor.searchRequest(request).build()).call().content();// 默认挂载QuestionAnswerAdvisorqaAdvisorQuestionAnswerAdvisor.builder(vectorStore)// 向量库作为检索源.searchRequest(SearchRequest.builder().topK(5).similarityThreshold(0.45).build())// 检索参数.build();ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(qaAdvisor)// 整个 Client 默认走 RAG.build();// 运行时 metadata 过滤StringanswerchatClient.prompt().user(请介绍 Spring AI)// 用户问题.advisors(a-a.param(QuestionAnswerAdvisor.FILTER_EXPRESSION,source doc.md))// 只检索 sourcedoc.md 的文档.call().content();Builder 方法说明searchRequest(SearchRequest)topK、similarityThreshold、filterpromptTemplate(PromptTemplate)自定义模板需含{query}、{question_answer_context}2 RetrievalAugmentationAdvisor模块化 RAG基于Modular RAG架构Builder 拼装Query 变换 → DocumentRetriever → DocumentPostProcessor → QueryAugmenter。Naive RAGAdvisorragAdvisorRetrievalAugmentationAdvisor.builder().documentRetriever(VectorStoreDocumentRetriever.builder().vectorStore(vectorStore)// 检索来源.similarityThreshold(0.45)// 相似度下限.topK(5)// 最多 5 条.build()).build();StringanswerChatClient.builder(chatModel).build().prompt().advisors(ragAdvisor)// 挂载模块化 RAG Advisor.user(什么是机器学习).call().content();允许空检索结果时也回答AdvisorragAdvisorRetrievalAugmentationAdvisor.builder().documentRetriever(VectorStoreDocumentRetriever.builder().vectorStore(vectorStore).similarityThreshold(0.45).topK(5).build()).queryAugmenter(ContextualQueryAugmenter.builder().allowEmptyContext(true)// 检索为空时仍允许 LLM 回答.build()).build();Advanced RAG检索前改写 QueryAdvisorragAdvisorRetrievalAugmentationAdvisor.builder().queryTransformers(RewriteQueryTransformer.builder().chatClientBuilder(ChatClient.builder(chatModel).build().mutate())// 用 LLM 改写 Query.build()).documentRetriever(VectorStoreDocumentRetriever.builder().vectorStore(vectorStore).similarityThreshold(0.45).topK(5).build()).build();Builder 方法说明documentRetriever(...)检索来源常用VectorStoreDocumentRetrieverqueryTransformers(...)检索前改写 QueryqueryExpander(...)一扩多 QueryqueryAugmenter(...)如何把检索文档拼进 PromptdocumentPostProcessors(...)检索后处理可在此做 Rerank3 RetrievalRerankAdvisor检索 百炼 RerankAlibaba 扩展VectorStore 初检 → DashScope RerankModel 精排 → Prompt → LLM。详见 RAG检索与Rerank重排序.md。RetrievalRerankAdvisorrerankAdvisornewRetrievalRerankAdvisor(vectorStore,// 初检来源rerankModel,// 百炼 Rerank 模型SearchRequest.builder().topK(5).similarityThreshold(0.45).build()// 初检参数);ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(rerankAdvisor)// 默认走 检索→重排→生成.build();StringanswerchatClient.prompt().user(什么是机器学习)// 实际 query 以 user 消息为准.call().content();构造参数说明默认值vectorStore初检来源—rerankModelDashScopeRerankModel—searchRequesttopK、similarityThreshold空 SearchRequestpromptTemplateRAG Prompt 模板内置英文模板minScoreRerank 得分下限0.1SearchRequest.query为占位实际以.user(...)为准。4 RAG 三者怎么选场景推荐快速验证、代码最少QuestionAnswerAdvisorQuery 改写 / 多路检索 / 空上下文策略RetrievalAugmentationAdvisor初检噪声多需要百炼 RerankRetrievalRerankAdvisor四、记忆类 Advisor多轮对话需要把历史消息注入 Prompt常用两个 Advisor。1 MessageChatMemoryAdvisor从ChatMemory读取历史以Message 列表形式追加到 Prompt保留 user/assistant 结构。ChatMemorychatMemoryMessageWindowChatMemory.builder().maxMessages(20)// 滑动窗口最多保留 20 条消息.build();ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build())// 注入对话记忆.build();StringanswerchatClient.prompt().advisors(a-a.param(ChatMemory.CONVERSATION_ID,user-123))// 区分不同用户/会话.user(我叫小明).call().content();运行时参数说明ChatMemory.CONVERSATION_ID会话 ID区分不同用户 / 会话2 VectorStoreChatMemoryAdvisor把对话历史存入 VectorStore检索时按语义找相关历史注入 system 文本适合长对话、历史很多。需spring-ai-advisors-vector-store依赖与QuestionAnswerAdvisor共用 VectorStore 基础设施。五、工具与调试类 Advisor1 ToolCallingAdvisorChatClient默认自动注册负责 Function Calling 循环模型请求工具 → 执行 → 结果回传 → 直到不再调用工具。// 显式注册工具ToolCallingAdvisor 自动生效StringanswerChatClient.builder(chatModel).build().prompt().tools(newDateTimeTools())// 注册可调用工具.user(现在几点)// 模型可能触发工具调用.call().content();配置项说明默认spring.ai.chat.client.tool-calling.enabled是否自动注册truespring.ai.chat.client.tool-calling.advisor-order链中执行顺序HIGHEST_PRECEDENCE 300禁用自动注册自行控制工具循环chatClient.prompt().advisors(AdvisorParams.toolCallingAdvisorAutoRegister(false))// 禁用自动工具循环.user(...).call();2 SimpleLoggerAdvisor打印 request / response调试 Advisor 链和 Prompt 拼装结果。建议放在链末尾。StringanswerChatClient.builder(chatModel).build().prompt().advisors(newSimpleLoggerAdvisor())// 打印 request/response便于调试.user(你好).call().content();六、推理与安全类 Advisor1 ReReadingAdvisorRe2把用户问题重复一遍拼进 Prompt提升 LLM 推理准确率论文Re-Reading Improves Reasoning in LLMs。// 官方示例为自定义类核心 before 逻辑// augmentedUserText {query}\nRead the question again: {query}ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(newReReadingAdvisor())// Re2 重读策略增强推理.build();2 SafeGuardAdvisor简单内容安全拦截防止模型生成有害内容具体规则由实现配置。七、组合示例记忆 RAGAdvisor 按注册顺序执行常见生产组合先记忆再检索。ChatMemorychatMemoryMessageWindowChatMemory.builder().maxMessages(20).build();// 对话记忆QuestionAnswerAdvisorqaAdvisorQuestionAnswerAdvisor.builder(vectorStore).searchRequest(SearchRequest.builder().topK(5).similarityThreshold(0.45).build()).build();ChatClientchatClientChatClient.builder(chatModel).defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build(),// ① 先注入历史qaAdvisor,// ② 再检索资料拼 PromptnewSimpleLoggerAdvisor()// ③ 最后打日志可选).build();StringanswerchatClient.prompt().advisors(a-a.param(ChatMemory.CONVERSATION_ID,session-001))// 指定会话.user(继续上一题再详细说说迁移学习)// 可引用上文 新知识库检索.call().content();用户消息MessageChatMemoryAdvisorQuestionAnswerAdvisor / RetrievalRerankAdvisorSimpleLoggerAdvisorChatModel回答八、小结需求推荐 Advisor最简 RAGQuestionAnswerAdvisor可拼装 RAG 流水线RetrievalAugmentationAdvisorRAG 百炼 RerankRetrievalRerankAdvisor多轮对话MessageChatMemoryAdvisorFunction CallingToolCallingAdvisor默认已有调试 PromptSimpleLoggerAdvisor

相关新闻

最新新闻

TVBoxOSC 文档查看完整指南:三步让电视盒子直接打开PDF、TXT与Markdown

TVBoxOSC 文档查看完整指南:三步让电视盒子直接打开PDF、TXT与Markdown

TVBoxOSC 文档查看完整指南:三步让电视盒子直接打开PDF、TXT与Markdown 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于第三方项目的代码库,用于电视盒子的控制和管理。 项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC 客厅里这台装…

2026/8/13 13:39:40
Astrolabe:为AI代码生成器打造实时SwiftUI预览引擎

Astrolabe:为AI代码生成器打造实时SwiftUI预览引擎

1. 项目缘起:当AI生成的UI需要被“看见” 最近在折腾一个iOS上的AI辅助开发工具,遇到了一个挺有意思的难题。我们让大模型(比如Claude Code、GPT-4)根据自然语言描述生成SwiftUI的视图代码,这本身已经不算新鲜事了。但…

2026/8/13 13:39:40
【原基于微信小程序+uni-app+vue的创唯一】在线投票小程序 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

【原基于微信小程序+uni-app+vue的创唯一】在线投票小程序 课程设计/大作业/期末作业(源码+MySQL数据库+实验报告+PPT+远程部署)

系统摘要 随着移动互联网与微信生态的普及,传统 Web 端投票系统已难以满足用户随时随地的参与需求。本文以在线投票管理系统为研究对象,在既有 Spring Boot 后端与 Vue 管理端基础上,依据 uni-app 小程序开发规范,设计并实现了面向…

2026/8/13 13:39:40
视频字幕生成工具免费指南:VideoSrt如何把字幕工时压缩到只剩零头

视频字幕生成工具免费指南:VideoSrt如何把字幕工时压缩到只剩零头

视频字幕生成工具免费指南:VideoSrt如何把字幕工时压缩到只剩零头 【免费下载链接】video-srt-windows 这是一个可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具。 项目地址: https://gitcode.com/gh_mirrors/vi/video-srt-windows 凌晨一点…

2026/8/13 13:39:40
深入解析变量作用域与闭包原理

深入解析变量作用域与闭包原理

1. 变量作用域:程序员必须掌握的编程基石第一次在代码中遇到"undefined variable"错误时,我盯着屏幕发了半小时呆。那是我大学二年级的C语言作业,一个简单的函数调用却让程序崩溃。教授走过来只扫了一眼:"小伙子&a…

2026/8/13 13:39:40
IGBT光纤驱动设计:从原理到实战,解决高压大功率系统干扰难题

IGBT光纤驱动设计:从原理到实战,解决高压大功率系统干扰难题

1. 从“电老虎”到“光信号”:为什么IGBT驱动必须用光纤? 在电力电子领域,IGBT(绝缘栅双极型晶体管)是当之无愧的“心脏”,它负责处理大功率电能的开关与转换。但驱动这颗“心脏”的“神经”——驱动电路&a…

2026/8/13 13:34:39