Spring AI 2.0:Advisor 一、简介二、代码SimpleLoggerAdvisor日志拦截器SafeGuardAdvisor敏感词拦截器MessageChatMemoryAdvisor自动维护会话上下文QuestionAnswerAdvisor检索拦截器RAG 把知识库内容塞到 prompt。SimpleLoggerAdvisor 日志拦截器打印出入参。ChatClient.builder(deepSeekChatModel).defaultSystem(默认系统提示词).defaultAdvisors(newSimpleLoggerAdvisor()).build();application.propertieslogging.level.org.springframework.ai.chat.client.advisor DEBUGSafeGuardAdvisor 敏感词拦截器当会话中出现敏感词终止整条调用链路不会调用大模型不会继续执行后面其他 Advisor直接返回预设拒绝文本。ChatClient.builder(deepSeekChatModel).defaultSystem(默认系统提示词).defaultAdvisors(newSafeGuardAdvisor(List.of(草泥马))).build();自定义拦截器自定义一个更改用户提示词的示例更改用户的输入提示词。getOrder(): 执行顺序数字越小越优先执行before(): 调用 LLM之前 修改 Requestafter(): LLM 返回之后修改 Responseimportorg.springframework.ai.chat.client.AdvisorChain;importorg.springframework.ai.chat.client.BaseAdvisor;importorg.springframework.ai.chat.client.ChatClientRequest;importorg.springframework.ai.chat.client.ChatClientResponse;importorg.springframework.ai.chat.messages.UserMessage;importorg.springframework.ai.chat.prompt.PromptTemplate;importjava.util.Map;/** * 自定义Advisor修改/增强用户提示词 * 作用在请求发送给LLM之前改写用户的UserMessage内容 */publicclassReReadingAdvisorimplementsBaseAdvisor{privatestaticfinalStringDEFAULT_USER_TEXT_ADVISE {re2_input_query} Read the question again: {re2_input_query} ;/** * before调用大模型【之前】执行修改用户prompt */OverridepublicChatClientRequestbefore(ChatClientRequestchatClientRequest,AdvisorChainadvisorChain){// 获取原始用户输入StringinputQuerychatClientRequest.prompt().getUserMessage().getText();// 模板渲染填充占位符StringaugmentedUserTextPromptTemplate.builder().template(DEFAULT_USER_TEXT_ADVISE).render(Map.of(re2_input_query,inputQuery));// 构造新用户消息mutate复制新request原对象不可修改UserMessagenewUserMessagenewUserMessage(augmentedUserText);ChatClientRequestnewRequestchatClientRequest.mutate().userMessage(newUserMessage).build();// 将修改后的请求继续交给链路returnadvisorChain.nextAroundCall(newRequest);}/** * after大模型返回结果【之后】执行需求不做处理直接原样返回response */OverridepublicChatClientResponseafter(ChatClientResponsechatClientResponse,AdvisorChainadvisorChain){// 无任何业务逻辑直接原样返回响应returnchatClientResponse;}OverridepublicintgetOrder(){return0;}}BeanpublicChatClientchatClient(DashScopeChatModeldashScopeChatModel){returnChatClient.builder(dashScopeChatModel).defaultAdvisors(newReReadingAdvisor()).build();}

相关新闻

最新新闻

系统激活告急?开源批量激活工具KMS_VL_ALL_AIO的使用链路全拆解

系统激活告急?开源批量激活工具KMS_VL_ALL_AIO的使用链路全拆解

系统激活告急?开源批量激活工具KMS_VL_ALL_AIO的使用链路全拆解 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 当电脑右下角悄悄浮出"Windows尚未激活"的水印&#xff0c…

2026/8/16 11:29:17
2026亲测可用!百度网盘解析不限速指南:PanDownload工具使用详解

2026亲测可用!百度网盘解析不限速指南:PanDownload工具使用详解

我们在整理和获取线上资料时,偶尔会遇到传输进度缓慢、耗时过长的情况。很多人第一反应是网络出了故障,但实际上,从云端服务器到个人电脑屏幕之间,涉及多个协作层级的顺畅流转。搞清楚具体卡在哪一步,就能用针对性的办…

2026/8/16 11:29:17
小预算就能定做皮带机!昆山这家性价比超高的厂家,你确定不了解下?

小预算就能定做皮带机!昆山这家性价比超高的厂家,你确定不了解下?

在工业生产和物流运输等领域,皮带机是一种常见且重要的输送设备。然而,很多企业在选择皮带机时,往往会面临诸多困扰,比如预算有限、难以找到适配复杂工况的皮带机、后续维保成本高等问题。今天,就给大家介绍一家来自昆…

2026/8/16 11:29:17
Lua 字节码反编译实战:用 unluac 从 .luac 黑盒中还原源码的完整指南

Lua 字节码反编译实战:用 unluac 从 .luac 黑盒中还原源码的完整指南

Lua 字节码反编译实战:用 unluac 从 .luac 黑盒中还原源码的完整指南 【免费下载链接】unluac fork from http://hg.code.sf.net/p/unluac/hgcode 项目地址: https://gitcode.com/gh_mirrors/un/unluac 凌晨一点,我接手了一个遗留系统的维护任务。…

2026/8/16 11:29:17
Anomaly Transformer:基于关联差异的时序异常检测原理与工程实践

Anomaly Transformer:基于关联差异的时序异常检测原理与工程实践

1. 项目概述:为什么我们需要关注时序异常检测? 如果你负责过服务器监控、生产线质量控制或者金融风控,那你一定对“异常”这个词又爱又恨。爱的是,一旦抓住它,就能避免一次潜在的重大故障或损失;恨的是&…

2026/8/16 11:29:17
栈OJ题——逆波兰表达式求值

栈OJ题——逆波兰表达式求值

目录题目链接题目要求解题思路代码实现题目链接 链接: 逆波兰表达式求值 题目要求 解题思路 代码实现 class Solution {private static boolean isOperations(String ch){if(ch.equals("") || ch.equals("-") || ch.equals("*") || ch.equals…

2026/8/16 11:24:17