(二十一)springboot实战——Spring AI劲爆来袭

前言

本节内容是关于Spring生态新发布的Spring AI的介绍,Spring AI 是一个面向人工智能工程的应用框架。其目标是将 Spring 生态系统的设计原则,如可移植性和模块化设计,应用到人工智能领域,并推广使用普通的Java对象(POJOs)作为构建应用程序的基础。其官方文档地址如下:

Spring AI

目前其集成了主流的Chat Models(聊天模型)、Text-to-image Models(文生图模型)、Transcription (audio to text) Models(语音转文本模型)、Embedding Models(嵌入式模型)、Vector Databases(向量数据库模型)。通过引入spring-ai-openai-spring-boot-starter启动器,就可以很方便的调用各种ai客户端工具,例如openai、Ollama等文本模型。本节内容以open ai 调用为例。

正文

①项目工程版本,低版本springboot不支持此功能

版本说明
JDKJDK17
springboot3.2.5
spring-ai-openai-spring-boot-starter0.8.1

②使用springboot初始化向导创建一个springboot项目

 ③引入pom时可能存在无法引入pom依赖的情况,这是因为在maven中心仓库还没有发布此启动器,我们需要配置spring仓库下载springai相关的启动器,本地如果使用了阿里云的maven仓库也需要屏蔽掉

④ 在application.properties中配置OpenAI的相关参数

⑤创建一个open ai请求,用于测试open ai的功能

package com.yundi.atp.controller;

import org.springframework.ai.openai.OpenAiChatClient;
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;

import java.util.Map;

@RestController
public class OpenAiController {

    @Autowired
    private OpenAiChatClient openAiChatClient;

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "你叫什么名字?") String message) {
        return Map.of("generation", openAiChatClient.call(message));
    }
    
}

⑥测试open ai chat会话模型,注意,这里需要开启魔法,需要能够访问open ai的地址,集成一个web客户端就能实现自己的chat ai聊天室

⑦ spring ai还提供了许多的ai场景启动器,需要集成什么ai功能就引入什么ai场景启动器,例如Ollama开源模型、微软openai模型等,相信其生态会越来越丰富,当然我们也可以自定义一些自己的ai启动器

<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
</dependency>

⑧文生图的AI模型

 

结语

至此,关于spring ai相关的内容到这里就结束了,我们下期见。。。。。。

### 使用 Spring Boot 实现文学一言的文生图和图生图接口 为了实现基于Spring Boot 的文学一言文生图(Text-to-Image)以及图生图(Image-to-Image)功能,通常会涉及到调用第三方AI服务提供商所提供的API。这里以百度云平台上的文心一言为例来说明如何集成这些特性。 #### 准备工作 首先,在开始编码之前,需要完成如下准备工作: - 注册并登录到百度智能云控制台。 - 创建应用获取 `AK` 和 `SK` (Access Key 和 Secret Key),这是访问API所必需的身份验证凭证[^2]。 - 添加所需的依赖项至项目的pom.xml文件中以便能够方便地发起HTTP请求并与JSON数据交互。 对于Maven项目来说,可以在`pom.xml`里加入以下内容: ```xml <dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>5.0.1</version> </dependency> <!-- JSON处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` #### 构建Service层逻辑 接下来定义一个名为`AIService.java`的服务类用来封装与AI服务器通信的具体细节。此部分代码负责构建URL、设置参数、发送POST请求并将响应解析成Java对象等形式的工作。 ```java @Service public class AIService { private static final String HOST = "https://aip.baidubce.com/rpc/2.0/ernievilg/v1/txt2img"; @Value("${baidu.api.key}") private String apiKey; @Value("${baidu.secret.key}") private String secretKey; public byte[] generateImageByText(String text){ try { AipRequest request = new AipRequest(); Map<String, Object> params = new HashMap<>(); params.put("text", text); // 获取token String accessToken = AuthService.getAuth(apiKey,secretKey); URL url = new URL(HOST+"?access_token="+accessToken); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); ObjectMapper mapper = new ObjectMapper(); String jsonInputString=mapper.writeValueAsString(params); // 设置请求方法为 POST 并写入输入流 connection.setRequestMethod("POST"); connection.setDoOutput(true); DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); wr.writeBytes(jsonInputString); wr.flush(); wr.close(); int responseCode = connection.getResponseCode(); InputStream inputStream; if(responseCode >= 400){ inputStream=connection.getErrorStream(); }else{ inputStream=connection.getInputStream(); } return IOUtils.toByteArray(inputStream); } catch (Exception e) { throw new RuntimeException(e.getMessage(),e); } } } ``` 上述代码片段展示了通过给定的文字描述向百度ERNIE-ViLG v1 API发出请求的过程,并返回由该文字生成的图片字节数组形式的结果。 请注意实际开发过程中还需要考虑错误处理机制和服务端限流等问题;此外,针对不同的应用场景可能也需要调整具体的业务流程设计。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厉害哥哥吖

您的支持是我创作下去的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值