知識庫 / Spring / Spring AI RSS 訂閱

Java中使用OpenAI DALL·E 3 AI圖像生成

Artificial Intelligence,Spring AI
HongKong
5
10:54 AM · Dec 06 ,2025

1. 概述

人工智能正在改變我們構建 Web 應用程序的方式。人工智能的一個激動人心的應用是從文本描述生成圖像。OpenAI 的 DALL·E 3 是一個流行的文本到圖像模型,幫助我們實現這一目標。

在本教程中,我們將探索如何使用 Spring AI 生成圖像,利用 OpenAI 的 DALL·E 3 模型。

要遵循本教程,我們需要一個 OpenAI API 密鑰

2. 項目設置

為了開始生成 AI 圖像,我們需要包含 Spring Boot starter 依賴項並正確配置應用程序。

2.1. 依賴項

讓我們首先將 <a href="https://mvnrepository.com/artifact/org.springframework.ai/spring-ai-openai/latest"><em >spring-ai-openai-spring-boot-starter</em></a > 依賴項添加到我們項目的 `pom.xml 文件中:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M3</version>
</dependency>
<div>
 <div>
  當前版本 <em >1.0.0-M3</em> 是一個里程碑發佈,因此我們需要在 <em >pom.xml</em> 中添加 Spring Milestones 倉庫:
 </div>
</div>
<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 Central 倉庫不同。

上述啓動依賴項為我們提供了與 OpenAI 服務以及使用其 DALL·E 3 模型生成 AI 圖像所需的類。

2.2. 配置 OpenAI API 密鑰

現在,要與 OpenAI 服務交互,我們需要在我們的 application.yaml 文件中配置 API 密鑰:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}

我們使用 ${} 屬性佔位符從環境變量中加載我們的屬性值。

在配置有效的 API 密鑰後,Spring AI 將自動為我們創建 ImageModel Bean。我們將將其自動注入到我們的服務層,併發送請求以生成 AI 圖像。

2.3. 配置默認圖片選項

接下來,我們還將配置一些默認圖片選項,這些選項將被用於生成我們的圖片:

spring:
  ai:
    openai:
      image:
        options:
          model: dall-e-3
          size: 1024x1024
          style: vivid
          quality: standard
          response-format: url

我們首先配置 dall-e-3 作為用於圖像生成的 模型

為了獲得完美的正方形圖像,我們指定 1024×1024 作為尺寸。 另外兩個允許的尺寸選項是 1792×10241024×1792

接下來,我們將樣式設置為 vivid —— 這會告訴 AI 模型生成超現實和戲劇性的圖像。 另一個可用的選項是 natural,我們可以使用它來生成更自然、不太超現實的圖像。

對於 quality 選項,我們將其設置為 standard,這將適用於大多數用例。 但是,如果我們需要具有增強細節和更好一致性的圖像,我們可以將其設置為 hd需要注意的是,具有 hd 質量的圖像生成所需時間更長

最後,我們將 response-format 選項設置為 url生成的圖像將可通過 60 分鐘有效期的 URL 訪問。 或者,我們可以將其設置為 b64_json 以接收圖像為 Base64 編碼的字符串

稍後在本教程中,我們將探討如何覆蓋這些默認圖像選項。

3. 使用 DALL·E 3 生成 AI 圖像

現在我們已經配置好應用程序,接下來讓我們創建一個 ImageGenerator 類。我們將自動注入 ImageModel Bean 並將其用於生成 AI 圖像:

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

在這裏,我們創建了一個 generate() 方法,它接受一個 prompt String,代表我們想要生成的圖像的文本描述。

接下來,我們創建一個 ImagePrompt 對象,並使用我們的 prompt 參數。然後,我們將它傳遞給我們的 ImageModel bean 的 call() 方法,以發送圖像生成請求。

imageResponse 將包含一個 URL 或一個 Base64 編碼的 String 格式的圖像表示,具體取決於我們在 application.yaml 文件中配置的 response-format 選項。為了解決正確的輸出屬性,我們創建一個 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
) {}

我們首先創建一個 ImageGenerationRequest 記錄,該記錄除了包含我們的 prompt 之外,還包含 username 和所需的圖像 heightwidth

我們使用這些附加值來創建 ImageOptions 實例並將其傳遞給 ImagePrompt 構造函數。 重要的是要注意,OpenAiImageOptions 類沒有 size 屬性,因此我們分別提供 heightwidth 值。

user 選項 幫助我們將圖像生成請求與特定終端用户關聯。 這是一個推薦的安全最佳實踐,以防止濫用。

根據要求,我們還可以覆蓋其他圖像選項,例如 stylequalityresponse-format 在我們的 ImageOptions 對象中。

5. 測試我們的 ImageGenerator

現在我們已經實現了 ImageGenerator 類,讓我們對其進行測試:

String prompt = """
    A cartoon depicting a gangster donkey wearing 
    sunglasses and eating grapes in a city street.
""";
String response = imageGenerator.generate(prompt);

在這裏,我們將我們的 提示詞 傳遞給 ImageGenerator 的 generate() 方法。經過短暫的處理時間,我們將收到一個 響應,其中包含我們生成的圖像的 URL 或 Base64 編碼字符串,具體取決於配置的 response-format 屬性。

讓我們看看 DALL·E 3 為我們生成的圖像:

正如我們所見,生成的圖像準確匹配了我們的 提示詞這展示了 DALL·E 3 理解自然語言描述並將其轉換為圖像的能力

6. 結論

在本文中,我們探討了如何使用 Spring AI 從文本描述生成 AI 圖像。我們使用了 OpenAI 的 DALL·E 3 模型作為底層。

我們詳細介紹了所需的配置,並開發了一個服務類來生成 AI 圖像。此外,我們還研究了默認圖像選項以及如何動態地覆蓋它們。

通過將 DALL·E 3 集成到我們的 Java 應用程序中,並通過 Spring AI 實現,我們可以輕鬆地在應用程序中添加圖像生成功能,而無需訓練和託管我們自己的模型。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.