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

【SAA】SpringAI Alibaba学习笔记(一):SSE与WS的区别以及如何注入多个AI模型

目录

一、SSE(Server-Sent Events)与WS(WebSocket)

核心概念

区别

二、SAA中同时注入多个模型

三、注入ChatClient


一、SSE(Server-Sent Events)与WS(WebSocket)

SSE是一种允许服务端可以持续推送数据片段(逐字逐句)到前端的Web技术通过单向的HTTP长连接,使用一个长期存在的连接,让服务器可以主动将数据推给客户端,SSE是轻量级的单向通信协议,适合AI对话这类服务端主导的场景。

核心概念

客户端发起一个请求,服务器保持这个连接打开并在有新数据时,通过这个连接将数据发送给客户端。就像我们现在使用AI时,它不是一次性返回所有数据给客户端,而是逐字逐句地返回。我个人认为:这种方式用户使用体验更好。在学习SAA时,接口返回数据的类型通常有两种:

第一种为String,直接把所有生成的文字以字符串类型全部返回给前端。学习过程中,调用该接口时如果生成的文字过多,通常浏览器会“转圈圈”,即浏览器在等待数据全部传输中,这样给人的一种错觉就是“网络卡了”。我觉得用户使用感很差。

第二种为Flux<String>,即流式输出,这种便是逐字逐句地响应给客户端,体验感极佳。


区别


二、SAA中同时注入多个模型

在使用过程中可知道我们在开发中可能会同时使用到不同的AI模型,但是简单的注入程序不能识别,此时需要进行配置。

这里我们以千问模型deepseek为例子。

定义名为SaaLLMConfig的配置类。

@Configuration
public class SaaLLMConfig {//模型名称常量定义,一套系统多模型共存private final String DEEPSEEK_MODEL="deepseek-v3";  //模型的名称private final String QWEN_MODEL="qwen-max";@Bean(name = "deepseek")public ChatModel deepseek(){return DashScopeChatModel.builder().dashScopeApi(DashScopeApi.builder().apiKey(System.getenv("aliQwen-api")).build()).defaultOptions(DashScopeChatOptions.builder().withModel(DEEPSEEK_MODEL).build()).build();}@Bean(name = "qwen")public ChatModel qwen(){return DashScopeChatModel.builder().dashScopeApi(DashScopeApi.builder().apiKey(System.getenv("aliQwen-api")).build()).defaultOptions(DashScopeChatOptions.builder().withModel(QWEN_MODEL).build()).build();}
}

三、注入ChatClient

ChatClient不支持自动注入,需要手动注入。需要在配置类中配置。而且ChatClient不能离开ChatModel,要想使用ChatClient,需要先创建ChatModel。

需要在@Bean注解里标注名称,参数里也需要使用@Qualifier指定哪一个ChatModel。

@Bean(name = "deepseekChatClient")  //要指定名称,要不然注入时区分不了哪一个public ChatClient deepseekChatClient(@Qualifier("deepseek") ChatModel deepseek)  {return ChatClient.builder(deepseek)  //需要注入ChatModel.defaultOptions(ChatOptions.builder().model(DEEPSEEK_MODEL).build()).build();}@Bean(name = "qwenChatClient")public ChatClient qwenChatClient(@Qualifier("qwen") ChatModel qwen){return ChatClient.builder(qwen).defaultOptions(ChatOptions.builder().model(QWEN_MODEL).build()).build();}

http://www.dtcms.com/a/573252.html

相关文章:

  • 基于企业级建模平台Enterprise Architect的云地融合架构设计
  • 乡镇网站建设内容规划乐山网站制作设计公司
  • 【笔记】解决 “AssertionError: Torch not compiled with CUDA enabled“ 错误
  • 八股训练营第 7 天 | TCP连接如何确保可靠性?拥塞控制是怎么实现的?TCP流量控制是怎么实现的?UDP怎么实现可靠传输?
  • 清除BSS段(ZI段)
  • 数据库安全配置指导
  • 江苏南京建设局官方网站wordpress开发门户网站
  • 科学休息,我用AI写了个vscode养鱼插件:DevFish发布
  • Spring Boot 项目 GitLab CI/CD 自动构建并推送到 Harbor 教程
  • 彻底理解传统卷积,深度可分离卷积
  • 使用VSCode进行SSH远程连接时无法与xxx建立连接
  • 宁波建设工程报名网站陕西省住房与建设厅网站
  • Rust 练习册 6:生命周期与闭包
  • 公司网站开发的流程高端企业网站公司
  • 第二届中欧科学家论坛暨第七届人工智能与先进制造国际会议(AIAM 2025)在德国海德堡成功举办
  • 微硕WSF3085 MOSFET,汽车电动尾门升降强效驱动
  • 5 Prompt Engineering 高阶技巧:构建智能对话系统的核心技术
  • 汽车系统可靠性与技术融合:智能动力总成及机电一体化诊断
  • 网站建设对企业的重要性线上营销的优势和劣势
  • JavaScript 正则表达式全方位解析:从基础到实战
  • 工业相机成像核心参数解析,帧率与曝光时间的权衡关系
  • Kodiak Perps:Berachain 原生永续合约平台上线
  • 分布式版本控制系统Git的安装和使用
  • 用.echarts文件快速实现日历饼图
  • 影刀RPA一键生成竞品分析!AI智能监控,效率提升100倍[特殊字符]
  • 从卡顿到秒查:Java 项目引入 Elasticsearch 实现亿级地址数据的复杂查询实战
  • 国外可以做推广的网站有哪些广州品牌形象设计
  • 【MySQL】SQL语法详细总结
  • 宿迁华夏建设集团网站下列什么软件不能用于设计网页
  • vue笔记(第一天)