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

server/2024/10/18 1:06:47/

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/server/132635.html

相关文章

kafka创建多个分区时,分区会自动分配到多个不同的broker

1.分区只有一个时所有的消息生产和消费都集中在单个Broker上&#xff0c;多个broker只是提高了抗风险能力&#xff08;因为副本存在不同的broker上&#xff0c;主节点挂掉&#xff0c;可以重新选取副本为主节点&#xff09;。 2.没有消息顺序性要求可以多个分区&#xff0c;注意…

LIN从节点:波特率测试

文章目录 1、为什么需要测&#xff1f;2、如何实现测试&#xff1f;3、测试结果4、注意事项 1、为什么需要测&#xff1f; 调节波特率的变化&#xff0c;使主节点同步场位速率变化&#xff0c;验证从节点能否通过同步段进行调节自身位速率。对应ISO17987协议。 2、如何实现测…

基于微信小程序的在线点歌系统(论文+源码)-kaic

摘 要 随着社会与互联网的发展&#xff0c;人们已经不在停留在温饱的层面上&#xff0c;而是开始了享受生活&#xff0c;而最能突出网络飞速发展的当属娱乐&#xff0c;从最初的网吧上网到现在的我们可以随时随地上网&#xff0c;观看自己喜欢的各式各样的电影电视剧和短视频&a…

双十一购物节:数码达人的必买清单,你准备好了吗?

双十一购物节即将来临&#xff0c;对于数码爱好者来说&#xff0c;这是一年一度的狂欢时刻。在这个特殊的日子里&#xff0c;各大电商平台纷纷推出各种优惠活动&#xff0c;让每一位消费者都能以更实惠的价格购买到心仪已久的数码产品。 作为一名数码达人&#xff0c;如何在众…

PROFINET 转 EtherCAT, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 PROFINET 转 EtherCAT GW系列型号 MS-GW31 概述 简介 MS-GW31 是 PROFINET 和 EtherCAT 协议转换网关&#xff0c;为用户提供两…

番茄小说逆向爬取

前言&#xff1a; 之前有人向我请教番茄小说的爬虫&#xff0c;这不就是ab参数加一个字体加密吗 首先ab参数 就在这里生成&#xff0c;之前讲过不细讲&#xff0c;注意参数是什么就行 然后是字体加密&#xff0c; 可以先讲字体文件处理为图片 然后使用ddddocur来处理图像识…

设计模式概览

设计模式是一种解决常见编程问题的经验总结&#xff0c;提供了代码的可重用性、可扩展性和可维护性。常见的设计模式有23个&#xff0c;主要分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。下面是这三类设计模式的详细分类和讲解&#xff1a; 一、创建型模式 创建…

10月15日,每日信息差

第一、《哈利・波特与魔法石》在中国内地总票房突破 3 亿元&#xff0c;包括 2002 年首映的 5600 万&#xff0c;2020 年重映的 1.923 亿&#xff0c;以及 2024 年重映的 5170 万。 第二、全国铁路实施新货物列车运行图&#xff0c;增开城际班列至 131 列&#xff0c;多式联运…