尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Spring AI 常用 Advisor

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
返回列表