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

相关推荐
Francek Chen3 分钟前
【自然语言处理】预训练01:词嵌入(word2vec)
人工智能·自然语言处理·word2vec
DKPT4 分钟前
JVM直接内存和堆内存比例如何设置?
java·jvm·笔记·学习·spring
Dongsheng_201910 分钟前
【手机篇】AI深度学习在手机摄像头模组支架外观检测应用方案
人工智能·智能手机
郝学胜-神的一滴20 分钟前
主成分分析(PCA)在计算机图形学中的深入解析与应用
开发语言·人工智能·算法·机器学习·1024程序员节
飞哥数智坊33 分钟前
想用好 AI 编程?你可能得先学点管理
人工智能·ai编程
golang学习记34 分钟前
太卷了,蚂蚁又发布了新一代Code Agent!
人工智能
StarPrayers.1 小时前
神经网络中的 HWC→CHW 格式转换
人工智能·深度学习·神经网络
ModelWhale1 小时前
和鲸科技入选《大模型一体机产业图谱》,以一体机智驱科研、重塑教学
人工智能·科研·高等教育
Rocket MAN1 小时前
Spring Boot 缓存知识体系大纲
spring boot·spring
区块block2 小时前
DeFi中的自主代理:用AI重塑金融
人工智能·金融