当前位置: 首页 > news >正文

Spring AI 2.0:Advisor

一、简介

二、代码

  • SimpleLoggerAdvisor:日志拦截器
  • SafeGuardAdvisor:敏感词拦截器
  • MessageChatMemoryAdvisor:自动维护会话上下文
  • QuestionAnswerAdvisor:检索拦截器,RAG 把知识库内容塞到 prompt。

SimpleLoggerAdvisor 日志拦截器

打印出入参。

ChatClient.builder(deepSeekChatModel).defaultSystem("""默认系统提示词""").defaultAdvisors(newSimpleLoggerAdvisor()).build();

application.properties

logging.level.org.springframework.ai.chat.client.advisor= DEBUG

SafeGuardAdvisor 敏感词拦截器

当会话中出现敏感词,终止整条调用链路,不会调用大模型,不会继续执行后面其他 Advisor,直接返回预设拒绝文本。

ChatClient.builder(deepSeekChatModel).defaultSystem("""默认系统提示词""").defaultAdvisors(newSafeGuardAdvisor(List.of("草泥马"))).build();

自定义拦截器

自定义一个更改用户提示词的示例,更改用户的输入提示词。

  • getOrder(): 执行顺序,数字越小越优先执行
  • before(): 调用 LLM之前 ,修改 Request
  • after(): LLM 返回之后,修改 Response
importorg.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){// 获取原始用户输入StringinputQuery=chatClientRequest.prompt().getUserMessage().getText();// 模板渲染,填充占位符StringaugmentedUserText=PromptTemplate.builder().template(DEFAULT_USER_TEXT_ADVISE).render(Map.of("re2_input_query",inputQuery));// 构造新用户消息,mutate复制新request(原对象不可修改)UserMessagenewUserMessage=newUserMessage(augmentedUserText);ChatClientRequestnewRequest=chatClientRequest.mutate().userMessage(newUserMessage).build();// 将修改后的请求继续交给链路returnadvisorChain.nextAroundCall(newRequest);}/** * after:大模型返回结果【之后】执行;需求:不做处理,直接原样返回response */@OverridepublicChatClientResponseafter(ChatClientResponsechatClientResponse,AdvisorChainadvisorChain){// 无任何业务逻辑,直接原样返回响应returnchatClientResponse;}@OverridepublicintgetOrder(){return0;}}
@BeanpublicChatClientchatClient(DashScopeChatModeldashScopeChatModel){returnChatClient.builder(dashScopeChatModel).defaultAdvisors(newReReadingAdvisor()).build();}
http://www.jsqmd.com/news/1404167/

相关文章:

  • Flutter 3.41构建流式AI应用:从架构设计到性能优化的完整实践
  • VSCode C++调试F5失效?从launch.json到tasks.json的完整解决方案
  • OneNote 笔记迁往 Markdown 的本地化迁移实战:onenote-md-exporter 完整上手与批量导出指南
  • Windows DPI 缩放总在乱跳?SetDPI 一条命令统一多屏显示
  • 2026年佛山投流公司T榜:抖音小红书视频号代运营评测 广东金袋鼠传媒科技上榜 - 米諾
  • 2026年8月菏泽外墙漏水维修防水公司推荐,高层高空渗水修缮避坑指南 - 聪居到家
  • 从fdisk到parted:现代磁盘分区工具的核心原理与实战指南
  • 免费开源的uBlock Origin:把广告和跟踪器全部拦在浏览器门口
  • TVS 管选型指南|从原理到实战,一文搞懂瞬态电压抑制器
  • 室内物体语义类别
  • 5 分钟上手抖音批量下载:无水印视频、直播录制、音乐原声一个不落
  • 基于SpringBoot和Vue的物流管理系统设计与实现(毕设源码+文档)
  • Python生成器实战:用yield流式处理超大文件,内存占用直降90%
  • 下载大文件总卡顿断流?Motrix浏览器扩展让你一次设置、长期省心
  • T-BOX车联网硬件如何支持车辆远程控车功能?
  • 攀枝花房屋漏水维修实地走访记录,4 家本地防水服务商实测分享,业主避坑干货 - 用户198513
  • 深入解析for循环:从基础语法到性能优化与避坑指南
  • Python上下文管理器实战:with语句的原理 + contextmanager装饰器
  • 业务IP隐藏技术:原理、方案与安全实践
  • 基于微信小程序的校园心理健康测评系统(程序+文档+讲解)
  • PCB上电冒烟故障排查:从设计、焊接到调试的完整实战指南
  • 想找靠谱的日用品玻璃供应商?这些实用挑选技巧帮你规避选品风险 - 米諾
  • Work Buddy 摘要压缩翻车实录:关键约束被吞后,我锁死了三层校验门
  • 2026夏季家电换新哪家好?认准实体门店祥标家电(游埠店)13606791299 - 米諾
  • 嵌入式图像传输实战:从开源代码到稳定系统的工程化实现
  • 2026 家用空调选购测评榜 祥标家电讲解不同户型高性价比机型横向对比 - 米諾
  • 洛谷 摘月夜星 专辑 第六期-B3953 [GESP202403 一级] 找因数
  • 2026北京彩礼纠纷律师推荐深度盘点:新规落地后婚约财产案怎么打,这份实务派选型指南讲透了 - 米諾
  • Docker部署RustDesk自建服务器:实现安全可控的远程桌面方案
  • 老游戏联机老是翻车?开源翻译官 IPXWrapper 让它们在 Windows 11 上重新开口