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

相关推荐
☺����12 分钟前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
fsnine23 分钟前
机器学习——数据清洗
人工智能·机器学习
小猿姐1 小时前
KubeBlocks AI:AI时代的云原生数据库运维探索
数据库·人工智能·云原生·kubeblocks
算法_小学生1 小时前
循环神经网络(RNN, Recurrent Neural Network)
人工智能·rnn·深度学习
吱吱企业安全通讯软件2 小时前
吱吱企业通讯软件保证内部通讯安全,搭建数字安全体系
大数据·网络·人工智能·安全·信息与通信·吱吱办公通讯
盲盒Q2 小时前
《频率之光:共振之战》
人工智能·硬件架构·量子计算
飞哥数智坊2 小时前
DeepSeek V3.1 发布:我们等的 R2 去哪了?
人工智能·deepseek
爱分享的飘哥2 小时前
第八十三章:实战篇:文 → 图:Prompt 控制图像生成系统构建——从“咒语”到“神作”的炼成!
人工智能·计算机视觉·prompt·文生图·stablediffusion·diffusers·text-to-image
努力还债的学术吗喽3 小时前
【速通】深度学习模型调试系统化方法论:从问题定位到性能优化
人工智能·深度学习·学习·调试·模型·方法论