1. 概述
人工智能正在改变我们构建Web应用的方式。其中一项令人兴奋的应用就是根据文本描述生成图像。OpenAI的DALL·E 3是当前主流的文本到图像模型之一。
本教程将探讨如何使用Spring AI集成OpenAI的DALL·E 3模型来生成图像。
跟随本教程前,请确保已准备好OpenAI API密钥。
2. 项目搭建
在开始生成AI图像之前,我们需要添加Spring Boot starter依赖并正确配置应用。
2.1. 依赖配置
首先在项目的pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M3</version>
</dependency>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
该仓库用于发布里程碑版本,而非标准的Maven中央仓库。
上述starter依赖提供了与OpenAI服务交互所需的类,让我们能通过DALL·E 3模型生成AI图像。
2.2. 配置OpenAI API密钥
在application.yaml文件中配置API密钥:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
我们使用*${}*占位符从环境变量加载密钥值。
配置有效API密钥后,Spring AI会自动创建ImageModel bean。我们将在服务层自动装配它并发送图像生成请求。
2.3. 配置默认图像选项
接下来配置几个默认图像生成参数:
spring:
ai:
openai:
image:
options:
model: dall-e-3
size: 1024x1024
style: vivid
quality: standard
response-format: url
关键配置说明:
- ✅ model: 指定使用dall-e-3模型
- ✅ size: 设置为1024×1024正方形尺寸(可选尺寸还有1792×1024和1024×1792)
- ✅ style: vivid风格生成超现实戏剧化图像(可选natural生成更自然的图像)
- ✅ quality: standard质量适用于大多数场景(hd质量细节更优但生成更慢)
- ✅ response-format: url返回60分钟有效期的图像链接(b64_json返回Base64编码字符串)
后续我们会展示如何覆盖这些默认配置。
3. 使用DALL·E 3生成AI图像
创建ImageGenerator类,自动装配ImageModel bean:
public String generate(String prompt) {
ImagePrompt imagePrompt = new ImagePrompt(prompt);
ImageResponse imageResponse = imageModel.call(imagePrompt);
return resolveImageContent(imageResponse);
}
private String resolveImageContent(ImageResponse imageResponse) {
Image image = imageResponse.getResult().getOutput();
return Optional
.ofNullable(image.getUrl())
.orElseGet(image::getB64Json);
}
实现逻辑:
- 接收文本描述参数prompt
- 创建ImagePrompt对象
- 通过ImageModel的*call()*方法发送请求
- 根据配置的response-format,响应包含URL或Base64编码字符串
- 通过*resolveImageContent()*辅助方法解析返回结果
4. 覆盖默认图像选项
有时需要动态覆盖application.yaml中的默认配置。通过重载*generate()*方法实现:
public String generate(ImageGenerationRequest request) {
ImageOptions imageOptions = OpenAiImageOptions
.builder()
.withUser(request.username())
.withHeight(request.height())
.withWidth(request.width())
.build();
ImagePrompt imagePrompt = new ImagePrompt(request.prompt(), imageOptions);
ImageResponse imageResponse = imageModel.call(imagePrompt);
return resolveImageContent(imageResponse);
}
record ImageGenerationRequest(
String prompt,
String username,
Integer height,
Integer width
) {}
关键点说明:
- ⚠️ OpenAiImageOptions类没有size属性,需单独设置height和width
- ✅ user选项将请求与特定用户关联,这是防止滥用的安全最佳实践
- 可根据需要覆盖style、quality等参数
5. 测试ImageGenerator类
测试图像生成功能:
String prompt = """
A cartoon depicting a gangster donkey wearing
sunglasses and eating grapes in a city street.
""";
String response = imageGenerator.generate(prompt);
根据配置的response-format,将返回图像URL或Base64字符串。DALL·E 3生成的图像示例:
生成结果完美匹配文本描述,展示了DALL·E 3理解自然语言并转化为图像的强大能力。
6. 总结
本文介绍了如何使用Spring AI通过文本描述生成AI图像,底层使用OpenAI的DALL·E 3模型。我们完成了:
- ✅ 必要的配置工作
- ✅ 开发图像生成服务类
- ✅ 默认参数配置与动态覆盖
通过Spring AI集成DALL·E 3,我们无需训练和托管自有模型,就能轻松为Java应用添加图像生成能力。
本文所有代码示例可在GitHub获取。