在人工智能与软件开发深度融合的当下,Spring AI 作为构建 AI 驱动应用的有力框架,能够便捷集成各类 AI 能力。
文生图技术可将文本描述转化为图像,极具应用价值。接下来,我给大家详细讲解一下如何使用 Spring AI 调用文生图功能。
一、基础概念认知
(一)Spring AI 简介
Spring AI 是基于 Spring Boot 开发的框架,旨在简化 Java 应用与 AI 服务的集成过程。它提供了统一的编程模型,支持接入多种 AI 模型和服务,开发者无需深入了解复杂的 AI 底层技术,就能快速将 AI 能力融入应用中,例如实现智能问答、文本生成、图像生成等功能 。
(二)文生图技术
文生图(Text-to-Image)是一种基于深度学习的 AI 技术,通过训练模型学习文本与图像之间的映射关系,当输入一段文本描述后,模型能根据理解生成对应的图像。目前主流的文生图模型有 Stable Diffusion、DALL・E 等,这些模型在艺术创作、广告设计、游戏开发等领域都有广泛应用。
二、开发环境搭建
(一)JDK 安装
Spring AI 基于 Java 开发,首先确保已安装 Java Development Kit(JDK),建议使用 JDK 11 及以上版本。可以从 Oracle 官网或 OpenJDK 官网下载对应操作系统的 JDK 安装包,安装完成后,配置好JAVA_HOME
环境变量,确保在命令行中输入java -version
和javac -version
能正确显示版本信息。
(二)开发工具准备
推荐使用 IntelliJ IDEA 作为开发工具,它对 Spring 项目有良好的支持,能方便地创建、管理和运行 Spring Boot 项目。也可以使用 Eclipse 等其他 Java 开发工具,根据个人习惯选择即可。
三、项目创建与依赖引入
(一)创建 Spring Boot 项目
在 IntelliJ IDEA 中,通过 “Spring Initializr” 创建新的 Spring Boot 项目。在创建过程中,选择合适的项目坐标、依赖项。确保勾选 “Spring Web” 依赖,用于构建 Web 应用,后续可通过 API 接口调用文生图功能;同时,需要添加 Spring AI 相关依赖,在 Maven 项目的pom.xml
文件中,添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ai-stable-diffusion</artifactId>
<version>{具体版本号}</version>
</dependency>
如果使用 Gradle 构建项目,在build.gradle
文件中添加如下依赖:
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-ai-stable-diffusion:{具体版本号}'
这里以集成 Stable Diffusion 为例,具体版本号可在 Maven 中央仓库或 Spring 官方文档中查询。
(二)配置文生图服务
在application.yml
(或application.properties
)配置文件中,进行文生图服务的相关配置。如果使用本地部署的 Stable Diffusion 服务,配置其访问地址,例如:
spring:
ai:
stable-diffusion:
endpoint: http://localhost:7860
若使用第三方 API 服务,如 OpenAI 的 DALL・E 服务,除了配置 API 地址,还需设置 API 密钥:
spring:
ai:
openai:
api-key: {你的API密钥}
base-url: https://api.openai.com/v1
将{你的API密钥}
替换为实际获取到的 API 密钥。
四、编写调用代码
(一)创建 Controller 类
在项目的合适包路径下,创建一个 Controller 类,用于接收前端请求并调用文生图服务。示例代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.ai.stablediffusion.StableDiffusionPromptRequest;
import org.springframework.ai.stablediffusion.StableDiffusionPromptResponse;
import org.springframework.ai.stablediffusion.StableDiffusionService;
@RestController
@RequestMapping("/image-generation")
public class ImageGenerationController {
private final StableDiffusionService stableDiffusionService;
@Autowired
public ImageGenerationController(StableDiffusionService stableDiffusionService) {
this.stableDiffusionService = stableDiffusionService;
}
@PostMapping
public ResponseEntity<StableDiffusionPromptResponse> generateImage(@RequestBody StableDiffusionPromptRequest request) {
try {
StableDiffusionPromptResponse response = stableDiffusionService.generate(request);
return new ResponseEntity<>(response, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
上述代码定义了一个ImageGenerationController
类,通过@RestController
和@RequestMapping
注解将其配置为处理文生图请求的控制器。generateImage
方法接收前端传递的文本描述(封装在StableDiffusionPromptRequest
对象中),调用StableDiffusionService
的generate
方法生成图像,并将生成结果以StableDiffusionPromptResponse
对象返回给前端。
(二)前端调用示例
在项目的resources/static
目录下,创建一个 HTML 文件,编写前端代码调用后端 API 实现文生图功能:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Spring AI文生图示例</title>
</head>
<body>
<input type="text" id="prompt" placeholder="输入图像描述">
<button onclick="generateImage()">生成图像</button>
<img id="generated-image" src="" alt="生成的图像">
<script>
function generateImage() {
const prompt = document.getElementById('prompt').value;
const request = {
prompt: prompt
};
fetch('/image-generation', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(request)
})
.then(response => response.json())
.then(data => {
if (data.images && data.images.length > 0) {
document.getElementById('generated-image').src = data.images[0];
}
})
.catch(error => {
console.error('生成图像失败:', error);
});
}
</script>
</body>
</html>
上述前端代码创建了一个输入框用于输入文本描述,一个按钮触发图像生成操作,生成的图像将显示在页面的<img>
标签中。通过fetch
函数向后端发送 POST 请求,将文本描述传递给后端,并处理后端返回的图像数据。
五、项目运行与测试
完成代码编写后,启动 Spring Boot 项目。在浏览器中打开前端 HTML 页面,在输入框中输入图像描述,点击 “生成图像” 按钮,观察是否能成功调用文生图服务并显示生成的图像。
通过以上步骤,我们可以初步掌握使用 Spring AI 调用文生图的使用方法。实际应用中,还可以根据需求对功能进行扩展和优化,比如调整图像生成参数、增加用户认证等。