AI框架之Spring AI与Spring Cloud Alibaba AI使用讲解

文章目录
  • 1 AI框架
    • 1.1 Spring AI 简介
    • 1.2 Spring AI 使用
      • 1.2.1 pom.xml
      • 1.2.2 可实现的功能
    • 1.3 Spring Cloud Alibaba AI
    • 1.4 Spring Cloud Alibaba AI 实践操作
      • 1.4.1 pom.xml
      • 1.4.2 配置文件
      • 1.4.3 对接文本模型
      • 1.4.4 文生图模型
      • 1.4.5 语音合成模型

1 AI框架

1.1 Spring AI 简介

在软件开发的世界中,Java一直是企业级应用的主力军。而Spring框架,尤其是Spring Boot,以其生态系统的丰富性,为开发者提供了无与伦比的便利。现在,Spring Boot正迈向一个新的纪元——人工智-能的时代。
Spring AI项目的推出,不仅标志着Spring生态的进一步扩展,也为广大Java开发者开启了一个全新的编程领域。

Spring AI是从著名的Python项目LangChain和LlamaIndex中汲取灵感,它不是这些项目的直接移植,它的成立信念是,下一波生成式人工智能应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。

Spring AI功能,可以看Spring推出的官方文档:https://spring.io/projects/spring-ai
我们可以从Spring AI的官网描述中,总结出Spring AI的几个核心的关键词:

  • 提供抽象能力
  • 简化AI应用的开发
  • 模型与向量支持
  • AI集成与自动配置

Spring AI简化了我们构建大型复杂的AI应用的过程,当然如果你的项目仅仅是需要调用一个AI接口,那其实直接调用官方SDK反而更方便。

Spring AI提供的功能如下:

  • SQL类过滤器API: 提供类似SQL的元数据过滤器API,实现跨供应商的一致性。
  • Spring Boot集成: 专为Spring Boot设计的自动配置和启动器,让AI集成变得轻而易举。
  • API可移植性,支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。支持的模型类型包括聊天和文本到图像。
  • 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。
  • 将 AI 模型输出映射到 POJO。
  • 支持所有主要的向量数据库,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate。
  • 跨 Vector Store 提供程序的可移植 API,包括新颖的类似 SQL 的元数据过滤器 API,该 API 也是可移植的。
  • AI 模型和矢量存储的 Spring Boot stater。
  • 用于数据工程的 ETL 框架

1.2 Spring AI 使用

1.2.1 pom.xml

添加Maven存储库: 在项目的pom.xml中添加Spring MilestoneSnapshot存储库。

<repositories> <!-- Spring Milestone Repository for milestones --> <repository> <id>spring-milestones</id> <url>https://repo.spring.io/milestone</url> </repository> <!-- Spring Snapshot Repository for snapshots --> <repository> <id>spring-snapshots</id> <url>https://repo.spring.io/snapshot</url> </repository> </repositories>

注意:在集成 Spring AI 或其他较新的 Spring 生态系统组件时,添加Spring MilestoneSnapshot存储库是为了确保能够访问到最新的开发版本、里程碑版本和快照版本。这些版本可能尚未发布到Maven Central这样的稳定仓库,但包含了最新的特性、修复和改进

导入Spring AI BOM: 使用Spring AI BOM定义,可以确保你使用的是测试过的、兼容的库版本。

<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>0.8.1-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

添加AI功能: 根据你的需求,添加相关的AI模块依赖项到pom.xml。

<dependencies> <!-- 示例:添加OpenAI的支持 --> <dependency> <groupId>org.springframework.experimental.ai</groupId> <artifactId>spring-ai-openai</artifactId> </dependency> </dependencies>
1.2.2 可实现的功能

可实现的功能:

  • 生成式AI:利用Spring AI,你可以通过简单的API调用,实现文本的生成、翻译、摘要等功能。
  • 矢量数据库:当你需要对文本数据进行语义搜索时,Spring AI提供的矢量数据库支持使得相关操作变得简单高-效。
  • AI绘画:对于需要将文本转换为图像的应用场景,Spring AI的绘画功能可以无缝集成到你的应用中。

1.3 Spring Cloud Alibaba AI

原始的Spring AI并没有国内相关大模型的接入,对国内开发者不太友好。
总的来说,Spring Cloud Alibaba AI目前基于Spring AI 0.8.1版本API完成通义系列大模型的接入。

在当前最新版本中,Spring Cloud Alibaba AI主要完成了几种常见生成式模型的适配,包括对话、文生图、文生语音等,开发者可以使用Spring Cloud Alibaba AI开发基于通义的聊天、图片或语音生成 AI 应用,框架还提供 OutParser、Prompt Template、Stuff 等实用能力。
Spring Cloud Alibaba AI官方还提供了包括聊天对话、文生图、文生语音等多种应用的开发示例,具体可以前往官网查看:https://sca.aliyun.com

1.4 Spring Cloud Alibaba AI 实践操作

首先新建一个Maven项目,JDK选的是17版本。

1.4.1 pom.xml

Maven文件需要引入spring-cloud-alibaba-dependenciesspring-cloud-starter-alibaba-ai两个依赖。

<dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2023.0.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-ai</artifactId> </dependency> </dependencies>
1.4.2 配置文件

配置阿里云通义千问的Api-Key,没有的读者可以从官网上申请。

server: port: 8080 spring: application: name: alibaba-spring-ai-demo cloud: ai: tongyi: api-key: 你的api-key

主要配置阿里云申请的api-key:https://dashscope.console.aliyun.com/model

1.4.3 对接文本模型

我们首先测试如何对接文本大模型。
新建一个控制器类:新建/simple接口,用来测试基本QA。

@RestController @RequestMapping("/ai") @CrossOrigin public class TongYiController { @Autowired @Qualifier("tongYiSimpleServiceImpl") private TongYiService tongYiSimpleService; @GetMapping("/simple") public String completion( @RequestParam(value = "message", defaultValue = "AI时代下Java开发者该何去何从?") String message ) { return tongYiSimpleService.completion(message); } }

新建一个TongyiService服务类:

public interface TongYiService { /** * 基本问答 */ String completion(String message); /** * 文生图 */ ImageResponse genImg(String imgPrompt); /** * 语音合成 */ String genAudio(String text); }

具体的实现类如下:由Spring AI自动注入ChatClient、StreamingChatClient,ChatClient屏蔽底层通义大模型交互细节,后者用于流式调用。

对于QA而言,仅仅通过client.call(prompt)一行代码就可以完成对模型的调用。

@Service @Slf4j public class TongYiSimpleServiceImpl extends AbstractTongYiServiceImpl { /** * 自动注入ChatClient、StreamingChatClient,屏蔽模型调用细节 */ private final ChatClient chatClient; private final StreamingChatClient streamingChatClient; @Autowired public TongYiSimpleServiceImpl(ChatClient chatClient, StreamingChatClient streamingChatClient) { this.chatClient = chatClient; this.streamingChatClient = streamingChatClient; } /** * 具体实现: */ @Override public String completion(String message) { Prompt prompt = new Prompt(new UserMessage(message)); return chatClient.call(prompt).getResult().getOutput().getContent(); } }

我们发送一个请求,prompt是AI时代下Java开发者该何去何从?测试结果如下:

1.4.4 文生图模型

这里只给出service的代码,其它代码同上面的文本问答。

可以看到,只需要实例化一个imagePrompt,再调用模型即可。

@Slf4j @Service public class TongYiImagesServiceImpl extends AbstractTongYiServiceImpl { private static final Logger logger = LoggerFactory.getLogger(TongYiService.class); private final ImageClient imageClient; @Autowired public TongYiImagesServiceImpl(ImageClient client) { this.imageClient = client; } @Override public ImageResponse genImg(String imgPrompt) { var prompt = new ImagePrompt(imgPrompt); return imageClient.call(prompt); } }

测试的prompt是:Painting a boy coding in front of the desk, with his dog.,测试结果如下,效果还是很不错的:

1.4.5 语音合成模型
@Slf4j @Service public class TongYiAudioSimpleServiceImpl extends AbstractTongYiServiceImpl { private static final Logger logger = LoggerFactory.getLogger(TongYiService.class); private final SpeechClient speechClient; @Autowired public TongYiAudioSimpleServiceImpl(SpeechClient client) { this.speechClient = client; } @Override public String genAudio(String text) { logger.info("gen audio prompt is: {}", text); var resWAV = speechClient.call(text); // save的代码省略,就是将音频保存到本地而已 return save(resWAV, SpeechSynthesisAudioFormat.WAV.getValue()); } }

测试结果也是成功的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1125329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AFP87432输入/输出端子板

AFP87432 输入/输出端子板是一块用于PLC系统的扩展模块&#xff0c;主要功能是让PLC与现场设备&#xff08;如开关、传感器、继电器、指示灯等&#xff09;进行信号交互。主要功能输入信号接收接入现场数字信号&#xff0c;例如按钮、限位开关或传感器的开关量。常见输入电压为…

机器人开发的“ChatGPT时刻”已到 老黄定调“物理AI”的路线图

作者&#xff1a;毛烁如果深入拆解黄仁勋的观点内核&#xff0c;就会发现“物理 AI&#xff08;Physical AI&#xff09;”这一概念的实际上是底层控制权交接——当物理 AI&#xff08;Physical AI&#xff09;通过了技术进化的临界点&#xff0c;从人类编写的确定性代码&#…

CC++链接数据库(MySQL)超级详细指南

C/C链接数据库&#xff08;MySQL&#xff09;超级详细指南 在C/C编程中&#xff0c;与数据库进行交互是一项常见的任务。MySQL作为一个广泛使用的开源关系型数据库管理系统&#xff0c;提供了丰富的API供C/C开发者使用。本文将详细介绍如何在C/C程序中链接MySQL数据库&#xf…

44-7145-55控制器模块

44‑7145‑55 控制器模块是一种工业或设备控制系统中的电子模块&#xff0c;主要作用是在现场设备和主控制器之间处理信号。功能和作用输入信号采集接收来自按钮、开关、传感器等的数字或模拟信号。对信号进行滤波、去抖动或状态转换&#xff0c;保证主控制器读取可靠。输出信号…

@RestController注解

1. 引言 在现代的Java Web开发中&#xff0c;Spring框架因其简洁、高效和强大的功能而受到广泛欢迎。Spring MVC是Spring框架的一个重要组成部分&#xff0c;用于构建Web应用程序。RestController注解是Spring MVC提供的一个关键注解&#xff0c;用于简化RESTful Web服务的开发…

0-073-0030-0可编程控制器

0‑073‑0030‑0 可编程控制器是一种工业自动化控制装置&#xff0c;属于可编程逻辑控制器&#xff08;PLC&#xff09;。它通过程序控制系统中输入信号的采集、逻辑处理以及输出信号的控制&#xff0c;实现对机械或设备的自动化管理。功能和作用输入采集接收来自开关、按钮、传…

5分钟快速搭建一个 SpringBoot3 + MyBatis-Plus 工程项目

环境 idea 2023.3.5 jdk 17 mysql 8 创建SpringBoot工程 创建SpringBoot工程&#xff0c;这里有两种方式可选&#xff0c;一种是使用idea提供的Spring Initializr自动创建&#xff0c;一种是通过Maven Archetype手动创建 自动创建SpringBoot工程 使用Spring Initializr创建&…

CES 2026最酷笔记本电脑:可拆卸设计成为新趋势

未来的笔记本电脑可能会拥有更长的使用寿命。AMD、Intel和高通在CES 2026上分别发布了新款移动处理器&#xff0c;将为今年的下一代笔记本电脑提供动力&#xff0c;承诺带来更好的CPU性能、更强的图形处理能力、改进的AI功能和更长的电池续航。这些新芯片将应用于各种类型的笔记…

3BSE022366R1通信接口模块

3BSE022366R1 通信接口模块是 ABB 自动化控制系统中的一款通信单元&#xff0c;主要用于控制器与现场设备或分布式 I/O 之间的数据通信&#xff0c;属于系统里的关键“通信桥梁”。核心作用系统通信接口连接主控制器&#xff08;PLC / DCS&#xff09;与远程 I/O、驱动器、仪表…

探讨 C++ 在工程实践中的独特价值、其对底层能力的深刻影响,以及在复杂系统设计中不可替代的作用,揭示技术发展的新趋势与面对的挑战

在互联网行业的早期阶段&#xff0c;技术红利极为明显。只要掌握一门主流语言&#xff0c;熟悉常见框架&#xff0c;就可以迅速参与项目、完成需求、获得不错的职业回报。但随着行业逐渐成熟&#xff0c;一个现实问题开始浮现&#xff1a;为什么技术工作年限相近的工程师&#…

基于Python+Django的框架的知否连锁花店管理系统毕设源码+文档+讲解视频

前言 本课题聚焦基于PythonDjango框架的知否连锁花店管理系统设计与实现&#xff0c;旨在解决知否连锁花店传统运营模式中门店协同低效、花卉库存管理混乱、订单跟踪不及时、会员档案零散及经营数据统计滞后等问题。系统采用B/S架构&#xff0c;依托浏览器即可实现多端便捷访问…

251524259-C控制器模块

251524259-C 控制器模块通常是指工业控制系统里的一个 控制单元/逻辑模块&#xff0c;它承担着 处理输入信号、执行控制逻辑、输出控制指令 的功能&#xff0c;是设备自动控制系统的重要组成部分。下面用通俗的方式帮你理解这类控制器模块的作用、工作方式和典型应用&#xff1…

AMD发布Instinct GPU新品挑战英伟达数据中心霸主地位

AMD在拉斯维加斯的CES展会上发布了针对企业客户的Instinct GPU产品线关键更新和Helios机架级系统&#xff0c;直指GPU霸主英伟达在数据中心领域的主导地位。1月6日&#xff0c;AMD公司发布了下一代Instinct MI500 GPU以及MI400系列的最新产品Instinct MI400X&#xff0c;专为处…

2024最新版Node.js下载安装及环境配置教程【保姆级】

一、进入官网地址下载安装包 Node.js 中文网 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…

基于Python+Django的框架的青岛开发区芳华美容院管理系统毕设源码+文档+讲解视频

前言 本课题聚焦基于PythonDjango框架的青岛开发区芳华美容院管理系统设计与实现&#xff0c;旨在解决青岛开发区芳华美容院传统运营模式中客户档案管理零散、服务项目调度混乱、预约流程繁琐、库存耗材管控低效等问题。系统采用B/S架构&#xff0c;依托浏览器即可实现多端便捷…

基于STM32的智能语音台灯系统设计与实现

基于STM32的智能语音台灯系统设计与实现摘要随着物联网技术的快速发展和人们生活水平的不断提高&#xff0c;智能家居产品正逐渐融入人们的日常生活。作为家居环境中不可或缺的照明设备&#xff0c;传统台灯功能单一、操作不便&#xff0c;已难以满足现代人对便捷、健康、智能化…

CentOS7安装Mysql5.7(ARM64架构)

1.第一步&#xff1a;下载 arm 版本离线 mysql 5.7 安装包 arm 版本离线 mysql 5.7 安装包 2.第二步&#xff1a;查询并卸载 CentOS 自带的数据库 Mariadb 找到数据库 mariadb&#xff0c;如果有会给出一个结果&#xff0c;结果是 mariadb 名称 rpm -qa | grep mariadb 如果…

java失业求职记录

这是小红书上一位上海的Java程序员失业想转行的分享贴。 Java开发的就业市场正在经历结构性调整&#xff0c;竞争日益激烈 传统纯业务开发岗位&#xff08;如仅完成增删改查业务的后端工程师&#xff09;的需求&#xff0c;特别是入门级岗位&#xff0c;正显著萎缩。随着企业…

80-02210-001 PCB模块

80-02210-001 PCB 模块是一种用于工业或专用设备中的印刷电路板组件&#xff0c;通常作为整机系统里的功能板卡使用&#xff0c;而不是单纯的空板。下面从结构、功能和应用角度&#xff0c;给你一个偏“工程理解”的说明。一、它是什么类型的模块80-02210-001 更像是一个厂家内…

7D-AI系列:Vibe Coding VS Spec Coding AI 编程的两种范式对比

文章目录一、概述二、基本概念对比三、开发流程对比3.1 Vibe Coding 流程3.2 Spec Coding 流程四、全方位特性对比五、实际应用案例5.1 Vibe Coding 典型用例5.2 Spec Coding 典型用例六、选择策略与混合模式6.1 选择建议6.2 混合模式策略七、工具生态概览7.1 主流工具分类7.2 …