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×10241024×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);
}

实现逻辑:

  1. 接收文本描述参数prompt
  2. 创建ImagePrompt对象
  3. 通过ImageModel的*call()*方法发送请求
  4. 根据配置的response-format,响应包含URL或Base64编码字符串
  5. 通过*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属性,需单独设置heightwidth
  • user选项将请求与特定用户关联,这是防止滥用的安全最佳实践
  • 可根据需要覆盖stylequality等参数

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获取。


原始标题:AI Image Generation With OpenAI DALL·E 3 in Java | Baeldung