Spring AI自定义Advisor

1.建议实现自定义拦截器建议要将流式(StreamAroundAdviosr)和非流式(CallAroundAdviosr)一起实现

自定义 Advisor 步骤

1)选择合⁠适的接口实现,实现‌以下接口之一或同时​实现两者(更建议同‎时实现):

  • CallAroundAdvisor:用于处理同步请求和响应(非流式)
  • StreamAroundAdvisor:用于处理流式请求和响应
复制代码
public class MyCustomAdvisor implements CallAroundAdvisor, StreamAroundAdvisor {
    
}

2)实现核心方法

对于非流式⁠处理 (CallA‌roundAdvi​sor),实现 a‎roundCall‌ 方法:

复制代码
@Override
public AdvisedResponse aroundCall(AdvisedRequest advisedRequest, CallAroundAdvisorChain chain) {
    
    AdvisedRequest modifiedRequest = processRequest(advisedRequest);
    //在方法之前要执行的准备,处理请求(前置处理)
    
    AdvisedResponse response = chain.nextAroundCall(modifiedRequest);
    //相当于切面方法,要增强的原始方法,在这里是下一个链的Adviosr或者AI
    
    return processResponse(response);
    //执行之后的响应(后置处理)
}

对于流式处⁠理 (Stream‌AroundAdv​isor),实现 ‎aroundStr‌eam 方法:

复制代码
@Override
public Flux<AdvisedResponse> aroundStream(AdvisedRequest advisedRequest, StreamAroundAdvisorChain chain) {
    //处理请求
    AdvisedRequest modifiedRequest = processRequest(advisedRequest);
    
    //调用链中的下一个Advisor或者AI并处理流式响应
    return chain.nextAroundStream(modifiedRequest)
               .map(response -> processResponse(response));
}

3.实例:实现日志输出自定义拦截器,Re2自定义拦截器

最佳实践

1)保持单⁠一职责:每个 Ad‌visor 应专注​于一项特定任务

2)注意执行顺序:合理设置getOrder()值确保 Advisor 按正确顺序执行

3)同时支⁠持流式和非流式:尽‌可能同时实现两种接​口以提高灵活性

4)高效处理请求:避免在 Advisor 中执行耗时操作

5)测试边⁠界情况:确保 Ad‌visor 能够优​雅处理异常和边界情‎况

6)对于需⁠要更复杂处理的流式‌场景,可以使用 R​eactor 的操‎作符:

7)可以使用 adviseContext 在 Advisor 链中共享状态:

复制代码
advisedRequest = advisedRequest.updateContext(context -> {
    context.put("key", "value");
    return context;
});


Object value = advisedResponse.adviseContext().get("key");

2.结构化输出

结构化输出转换器(Structured Output Converter)是 Spring AI 提供的一种实用机制,用于将大语言模型返回的文本输出转换为结构化数据格式,如 JSON、XML 或 Java 类,这对于需要可靠解析 AI 输出值的下游应用程序非常重要。

3.对话记忆持久化

相关推荐
咩咩啃树皮6 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚7 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白8 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司9 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地10 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415910 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风13 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
z1234567898613 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112314 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
做个文艺程序员14 小时前
Linux第24篇:Java应用监控体系搭建:Prometheus+Grafana可视化运维
java·grafana·prometheus