Spring Ai Advisors

Spring Ai Advisors

本文主要介绍Spring AI advisors 的概念,以及advisors的用途和使用方法、自定义advisors等。

什么是Advisors

Advisors 中文翻译过来的意思是顾问,它是用于拦截、修改和增强AI驱动的交互。类似于Spring 的AOP,通过Advisor可以实现请求返回的日志、对敏感词的过滤、对用户问题的增强以及chatMemory的保存都可以实现。

Advisor的使用

1.SimpleLoggerAdvisor

SimpleLoggerAdvisor 主要是用于打印对话日志,对话日志中包含metedata、output、result等信息,可以看到messageType、id、使用token数、返回信息整个结构。

首先需要再application.yml中添加配置:

复制代码
logging:
  level:
    org:
      springframework:
        ai:
          chat:
            client:
              advisor:
                SimpleLoggerAdvisor: DEBUG

其次在使用中通过defaultAdvisors,设置为new SimpleLoggerAdvisor()

代码如下:

复制代码
   @Test
    public void testAdvisor(){
        ChatClient client = ChatClient.builder(deepSeekChatModel).
                  defaultAdvisors(new SimpleLoggerAdvisor())//对话日志记录
                .build();
        Flux<String> flux = client.prompt("HELLO")
                .user("你好")
                .stream()
                .content();
       flux.toIterable().forEach(System.out::println);

    }

返回数据如下:

2.SafeGuardAdvisor

SafeGuardAdvisor 用于定义敏感词,在问题中出现敏感词中止回答。

使用new SafeGuardAdvisor 新建一个敏感词Advisor,使用list.of定义敏感词集合。

如下代码:

复制代码
  @Test
    public void testAdvisor1(){
        ChatClient client = ChatClient.builder(deepSeekChatModel).
                defaultAdvisors(new SimpleLoggerAdvisor(),new SafeGuardAdvisor(List.of("SB","王八蛋","TMD")))//SafeGuardAdvisor 敏感词定义,若出现敏感词中断
                .build();
        String content = client.prompt()
                .user("TMD,天气为什么这么热")
                .call()
                .content();
        System.out.println(content);

    }

执行结果,中止执行,并给出以下提示:

I'm unable to respond to that due to sensitive content. Could we rephrase or discuss something else?

自定义Advisor

自定义Advisor需要继承BaseAdvisor,重写before、after、getOrder方法。

before表示在调用大模型之前的操作。

after 表示在调用大模型之后的操作。

getOrder 表示多个Advisor的执行顺序,从0开始执行

以下是新增一个增强的Advisor,用于对用户问题的加强,符合用户需要的答案。代码如下:

复制代码
public class ReReadAdvisor implements BaseAdvisor {
    private static final String DEFAULT_USER_TEST_ADVISE= """
            {re2_input_query}
            Read the question agin:{re2_input_query}
            """;
    @Override
    public ChatClientRequest before(ChatClientRequest chatClientRequest, AdvisorChain advisorChain) {
        String contents = chatClientRequest.prompt().getContents();
        String re2InputQuery=PromptTemplate.builder().template(DEFAULT_USER_TEST_ADVISE).build().render(Map.of("re2_input_query",contents));
        ChatClientRequest request = chatClientRequest.mutate().prompt(Prompt.builder().content(re2InputQuery).build())
                .build();
        return request;
    }

    @Override
    public ChatClientResponse after(ChatClientResponse chatClientResponse, AdvisorChain advisorChain) {
        return chatClientResponse;
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

使用方法:

复制代码
   @Test
    public void testReReadAdvisor1(){
        ChatClient client = ChatClient.builder(deepSeekChatModel).
                defaultAdvisors(new ReReadAdvisor())
                .build();
        String content = client.prompt()
                .user("天气为什么这么热")
                .call()
                .content();
        System.out.println(content);

    }

返回内容:

天气炎热的原因通常涉及多种自然和人为因素的综合作用,以下是主要解释:

1. 季节与太阳辐射

  • 夏季高温:北半球夏季(6-8月)太阳直射角度大,日照时间长,地表吸收的热量显著增加。
  • 太阳活动:若处于太阳活动活跃期,到达地球的辐射可能略增强。

2. 气候系统影响

  • 高压系统控制:副热带高压或大陆高压下沉气流抑制云雨,导致晴热干燥(如中国的"伏旱")。
  • 厄尔尼诺现象:太平洋异常增温会扰乱全球气候模式,引发部分地区极端高温。

3. 人类活动加剧

  • 温室效应:燃烧化石燃料(煤炭、石油)排放的CO₂等气体阻止热量散逸,导致全球变暖。2023年全球平均气温已突破历史记录。
  • 城市热岛效应:混凝土建筑、沥青路面吸热,加上空调排热,使城市比郊区高3-5℃。

4. 地理与天气异常

  • 地形影响:盆地地形(如四川盆地)热量不易扩散,易积聚高温。
  • 干旱少雨:持续缺乏降水会降低蒸发冷却作用,加剧炎热感。

5. 短期天气波动

  • 热浪事件:大气环流异常(如阻塞高压)可能导致连续多日异常高温,如欧洲2022年热浪。

应对建议

  • 减少午间户外活动,注意防暑补水。
  • 倡导节能减碳,缓解长期气候变暖趋势。

若您关注特定地区或时间的高温,可结合当地气象数据进一步分析。

以上就是所有Advisor部分内容,更多详情见官网https://docs.spring.io/spring-ai/reference/api/advisors.html

相关推荐
shayudiandian3 分钟前
CNN详解:卷积神经网络是如何识别图像的?
人工智能·深度学习·cnn
V_156560272196 分钟前
2025年蚌埠市“三首产品”、市级服务型制造示范、市级企业技术中心等5个项目认定申报指南大全
大数据·人工智能·制造
盘古信息IMS11 分钟前
AI算力时代,PCB制造如何借助盘古信息MOM构建数字化新范式?
人工智能·制造
集成显卡18 分钟前
AI取名大师 | uni-app + Wot UI 跟随设备自动切换明暗主题
人工智能·ui·uni-app·外观配色
码上地球29 分钟前
大数据成矿预测系列(九) | 数据的“自我画像”:自编码器如何实现非监督下的“特征学习”
人工智能·深度学习·机器学习·数学建模
愚公搬代码41 分钟前
【愚公系列】《MCP协议与AI Agent开发》011-MCP协议标准与规范体系(交互协议与状态码体系)
人工智能·交互
小程故事多_801 小时前
LangGraph系列:多智能体终极方案,ReAct+MCP工业级供应链系统
人工智能·react.js·langchain
진영_1 小时前
深度学习打卡第R4周:LSTM-火灾温度预测
人工智能·深度学习·lstm
陈希瑞1 小时前
从 0 到 1:Vue3+Django打造现代化宠物商城系统(含AI智能顾问)
人工智能·django·宠物
std78791 小时前
微软Visual Studio 2026正式登场,AI融入开发核心操作体验更流畅
人工智能·microsoft·visual studio