OpenAI 影像生成

Spring AI 支援 OpenAI 的影像生成模型 DALL-E。

先決條件

您需要使用 OpenAI 建立 API 金鑰才能存取 ChatGPT 模型。在 OpenAI 註冊頁面 建立帳戶,並在 API 金鑰頁面 產生權杖。Spring AI 專案定義了一個名為 spring.ai.openai.api-key 的組態屬性,您應該將其設定為從 openai.com 取得的 API 金鑰 值。匯出環境變數是設定該組態屬性的一種方式

export SPRING_AI_OPENAI_API_KEY=<INSERT KEY HERE>

自動配置

Spring AI 為 OpenAI 影像生成用戶端提供 Spring Boot 自動配置。若要啟用它,請將以下相依性新增至專案的 Maven pom.xml 檔案

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

或 Gradle build.gradle 建置檔案。

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
請參閱 相依性管理 章節,將 Spring AI BOM 新增至您的建置檔案。

影像生成屬性

連線屬性

前綴詞 spring.ai.openai 用作屬性前綴詞,讓您可以連線到 OpenAI。

屬性

描述

預設值

spring.ai.openai.base-url

要連線的 URL

api.openai.com

spring.ai.openai.api-key

API 金鑰

-

spring.ai.openai.organization-id

您可以選擇性地指定用於 API 請求的組織。

-

spring.ai.openai.project-id

您可以選擇性地指定用於 API 請求的專案。

-

對於屬於多個組織的使用者(或透過其舊版使用者 API 金鑰存取其專案的使用者),您可以選擇性地指定用於 API 請求的組織和專案。這些 API 請求的使用量將計為指定組織和專案的使用量。

重試屬性

前綴詞 spring.ai.retry 用作屬性前綴詞,讓您可以設定 OpenAI 影像用戶端的重試機制。

屬性 描述 預設值

spring.ai.retry.max-attempts

最大重試次數。

10

spring.ai.retry.backoff.initial-interval

指數退避策略的初始睡眠持續時間。

2 秒。

spring.ai.retry.backoff.multiplier

退避間隔乘數。

5

spring.ai.retry.backoff.max-interval

最大退避持續時間。

3 分鐘。

spring.ai.retry.on-client-errors

如果為 false,則擲回 NonTransientAiException,且不嘗試重試 4xx 用戶端錯誤代碼

false

spring.ai.retry.exclude-on-http-codes

不應觸發重試的 HTTP 狀態代碼清單(例如,擲回 NonTransientAiException)。

空白

spring.ai.retry.on-http-codes

應觸發重試的 HTTP 狀態代碼清單(例如,擲回 TransientAiException)。

空白

組態屬性

前綴詞 spring.ai.openai.image 是屬性前綴詞,讓您可以為 OpenAI 設定 ImageModel 實作。

屬性

描述

預設值

spring.ai.openai.image.enabled

啟用 OpenAI 影像模型。

true

spring.ai.openai.image.base-url

選擇性地覆寫 spring.ai.openai.base-url 以提供聊天專用 URL

-

spring.ai.openai.image.api-key

選擇性地覆寫 spring.ai.openai.api-key 以提供聊天專用 API 金鑰

-

spring.ai.openai.image.organization-id

您可以選擇性地指定用於 API 請求的組織。

-

spring.ai.openai.image.project-id

您可以選擇性地指定用於 API 請求的專案。

-

spring.ai.openai.image.options.n

要產生的影像數量。必須介於 1 到 10 之間。對於 dall-e-3,僅支援 n=1。

-

spring.ai.openai.image.options.model

用於影像生成的模型。

OpenAiImageApi.DEFAULT_IMAGE_MODEL

spring.ai.openai.image.options.quality

將產生的影像品質。HD 會建立具有更精細細節且在整個影像中具有更高一致性的影像。此參數僅適用於 dall-e-3。

-

spring.ai.openai.image.options.response_format

傳回產生影像的格式。必須是 URL 或 b64_json 其中之一。

-

spring.ai.openai.image.options.size

產生影像的大小。對於 dall-e-2,必須是 256x256、512x512 或 1024x1024 其中之一。對於 dall-e-3 模型,必須是 1024x1024、1792x1024 或 1024x1792 其中之一。

-

spring.ai.openai.image.options.size_width

產生影像的寬度。對於 dall-e-2,必須是 256、512 或 1024 其中之一。

-

spring.ai.openai.image.options.size_height

產生影像的高度。對於 dall-e-2,必須是 256、512 或 1024 其中之一。

-

spring.ai.openai.image.options.style

產生影像的樣式。必須是 vivid 或 natural 其中之一。Vivid 會使模型傾向於產生超真實且戲劇化的影像。Natural 會使模型產生更自然、較不超真實的影像。此參數僅適用於 dall-e-3。

-

spring.ai.openai.image.options.user

代表您的終端使用者的唯一識別碼,這可以協助 OpenAI 監控和偵測濫用行為。

-

您可以覆寫常見的 spring.ai.openai.base-urlspring.ai.openai.api-keyspring.ai.openai.organization-idspring.ai.openai.project-id 屬性。如果設定了 spring.ai.openai.image.base-urlspring.ai.openai.image.api-keyspring.ai.openai.image.organization-idspring.ai.openai.image.project-id 屬性,則會優先於常見屬性。如果您想要針對不同的模型和不同的模型端點使用不同的 OpenAI 帳戶,這會很有用。
所有以 spring.ai.openai.image.options 為前綴詞的屬性都可以在執行階段覆寫。

執行階段選項

OpenAiImageOptions.java 提供模型組態,例如要使用的模型、品質、大小等等。

在啟動時,可以使用 OpenAiImageModel(OpenAiImageApi openAiImageApi) 建構子和 withDefaultOptions(OpenAiImageOptions defaultOptions) 方法設定預設選項。或者,使用先前描述的 spring.ai.openai.image.options.* 屬性。

在執行階段,您可以透過將新的、特定於請求的選項新增至 ImagePrompt 呼叫來覆寫預設選項。例如,若要覆寫 OpenAI 特定選項,例如品質和要建立的影像數量,請使用以下程式碼範例

ImageResponse response = openaiImageModel.call(
        new ImagePrompt("A light cream colored mini golden doodle",
        OpenAiImageOptions.builder()
                .withQuality("hd")
                .withN(4)
                .withHeight(1024)
                .withWidth(1024).build())

);
除了模型特定的 OpenAiImageOptions 之外,您還可以使用可攜式的 ImageOptions 實例,該實例是使用 ImageOptionsBuilder#builder() 建立的。