Spring AI Java程序员的AI之Spring AI(一)

ops/2024/10/18 0:04:44/

SpringAI 基础使用

  • 前言
  • Spring AI
    • ChatClient
    • ImageClient
    • OpenAiAudioTranscriptionClient
    • EmbeddingClient
  • 总结

前言

Spring AI,听着名字就感觉很好使用,快速上手,虽然功能没有太完善,但是社区活跃度很高,可以看看源码,让我们一起成为贡献者吧。

Spring AI

新建SpringBoot工程,然后添加以下依赖:

java"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.1</version>
</parent><groupId>com.qjc</groupId>
<artifactId>spring-ai-demo</artifactId>
<version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><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><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId></dependency>
</dependencies><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository>
</repositories>

需要注意的是:由于版本的不同,可能会引起很多的问题,因为底层的版本使用的webflux,需要对应,这是我碰到的问题。

java"> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>

然后定义一个ChatController:

java">package com.qjc.demo.controller;import org.springframework.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;/**** @projectName spring-ai-demo* @packageName com.qjc.demo.controller* @author qjc* @description TODO* @Email qjc1024@aliyun.com* @date 2024-10-16 09:05**/
@RestController
public class ChatController {@Autowiredprivate ChatClient chatClient;@GetMapping("/chat")public String generate(@RequestParam String message) {return chatClient.call(message);}}

由于依赖了:

java"><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

该starter中间接依赖了:

java"><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><version>0.8.1-SNAPSHOT</version><scope>compile</scope>
</dependency>

而该依赖中针对各个大模型提供了一个对应的自动配置类,比如OpenAiAutoConfiguration,而在该自动配置类中定义了以下几个Bean:

  1. OpenAiChatClient:文字聊天客户端
  2. OpenAiEmbeddingClient:文本向量化客户端
  3. OpenAiImageClient:文生图客户端
  4. OpenAiAudioTranscriptionClient:语音转文字客户端

这些Bean在创建时就会构造底层连接OpenAi的客户端OpenAiApi对象,其中会用到以下几种配置:

  1. OpenAiConnectionProperties:连接配置
  2. OpenAiChatProperties:聊天配置
  3. OpenAiEmbeddingProperties:向量化配置
  4. OpenAiImageProperties:文生图配置
  5. OpenAiAudioTranscriptionProperties:语音转文字配置

连接OpenAi的地址就apiKey就在OpenAiConnectionProperties中,比如application.properties的配置为:

java">spring.ai.openai.base-url=http://localhost:3000
spring.ai.openai.api-key=sk-xxxxx

ChatClient

所以,当我们需要基于OpenAI来提问时,直接注入ChatClient或OpenAiChatClient就可以了:

java">@Autowired
private ChatClient chatClient;

然后就可以使用call()方法来进行提问了:

java">@GetMapping("/chat")
public String chat(@RequestParam String message) {return chatClient.call(message);
}

在这里插入图片描述

ImageClient

使用下文生图的API:

java">@Autowired
private ImageClient imageClient;@GetMapping("/image")
public String image(@RequestParam String message) {ImagePrompt imagePrompt = new ImagePrompt(message);ImageResponse imageResponse = imageClient.call(imagePrompt);return imageResponse.getResult().getOutput().getUrl();
}

在这里插入图片描述
访问该URL即可拿到对应图片。

OpenAiAudioTranscriptionClient

也可以使用语音转文字的API:

java">@Value("classpath:/abc.flac")
private Resource audioFile;@Autowired
private OpenAiAudioTranscriptionClient audioTranscriptionClient;@GetMapping("/audio")
public String audio() {AudioTranscriptionPrompt transcriptionRequest = new AudioTranscriptionPrompt(audioFile);AudioTranscriptionResponse response = audioTranscriptionClient.call(transcriptionRequest);return response.getResult().getOutput();
}

EmbeddingClient

也可以用来对文本进行向量化:

java">@Autowired
private EmbeddingClient embeddingClient;@GetMapping("/embedding")
public List<Double> embedding(@RequestParam String message) {return embeddingClient.embed(message);
}

在这里插入图片描述

总结

SpringBoot的自动配置,基于自动配置,我们只需要直接依赖注入对应的Client就可以使用了,还是那么的善解人意,LangChain4j虽好但不是我的最爱,我更加的偏向Spring AI,因为使用简单,扩展方便,拥有强大的自动配置等,更适用于SpringBoot 让开发更加简洁。


http://www.ppmy.cn/ops/126326.html

相关文章

PG 17 增量备份功能介绍

背景 PG 17 新增了增量备份功能&#xff0c;可以通过 pg_basebackup --incrementalPATH_TO_MANIFEST 命令进行增量备份。 官方文档&#xff1a;https://www.postgresql.org/docs/current/app-pgbasebackup.html 在先前版本&#xff0c;其实我们也可以利用 WAL 进行增量备份&…

mysql-数据库的操作

目录 认识数据库的基本操作 1、创建数据库 &#xff08;1&#xff09;校验集、编码集 &#xff08;2&#xff09;指定字符集和校验集创建数据库 2、展示所建立的数据库&#xff1a; 3、查看自己当前数据库&#xff1a; 4、修改数据库 5、删除数据库 6、库的备份与恢复…

java HashMap源码剖析

HashMap 是 Java 集合框架中的一个重要类&#xff0c;它基于哈希表实现&#xff0c;提供了快速的插入、删除和查找操作。 以下是一些关键点&#xff1a; 序列化&#xff1a;HashMap 类实现了 Serializable 接口&#xff0c;这意味着它可以被序列化和反序列化。 初始容量和负载…

日志分析是什么?如何进行日志分析?

日志分析是对诸如计算机系统、网络设备、应用程序等产生的日志文件进行收集、处理、分析和解读的一个过程。这些日志文件记录了系统和应用在运行过程中的各种事件、状态变化、错误信息等详细数据。 通过对这些日志数据的分析&#xff0c;可以深入了解系统的运行情况、发现潜在…

探索Spring Boot在医疗病历B2B交互中的潜力

第2章 设计技术与开发环境 2.1 相关技术介绍 2.1.1 B/S模式分析 C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据组件交互。服务器程序负责系统资源&#xff0c;如管理信息数据库的有效管理&…

SSM(5)(动态sql <if>、<where>、返回主键值)

返回主键值&#xff1a; 方法一&#xff1a; useGeneratedKeys 为ture 声明 返回主键 keyProperty 表示要返回的值 封装到对象的属性中 但是这一种方法不支持Orcal数据库。 <insert id"save2" parameterType"com.findyou.entity.User" useGenerated…

python从0快速上手(二)IDE选择

在这个代码横飞的世界里&#xff0c;选择一个合适的Python IDE就好比是选择一把顺手的武器。今天&#xff0c;就让我来带你一探究竟&#xff0c;看看市面上有哪些让人眼花缭乱的Python IDE&#xff0c;并一较高下。 1. PyCharm PyCharm&#xff0c;由大名鼎鼎的JetBrains出品…

【C++11】可变模板参数详解

个人主页&#xff1a;chian-ocean 文章专栏 C 可变模板参数详解 1. 引言 C模板是现代C编程中一个非常强大且灵活的工具。在C11标准中&#xff0c;引入了可变模板参数&#xff08;variadic templates&#xff09;&#xff0c;它为模板编程带来了革命性改变。它的出现允许我们…