跳到主要内容

OpenAI SDK 图像生成(官方)

Deepseek 3.2 中英对照 OpenAI SDK (Official) OpenAI SDK Image Generation (Official)

Spring AI 通过 OpenAI Java SDK 支持 OpenAI 的 DALL-E 图像生成模型,提供了与 OpenAI 服务(包括 Microsoft Foundry 和 GitHub Models)的稳健且官方维护的集成。

备注

此实现使用了 OpenAI 官方的 OpenAI Java SDK。关于 Spring AI 的替代实现,请参阅 OpenAI 图像生成

DALL-E是OpenAI开发的一款前沿图像生成模型,能够根据自然语言描述生成逼真的图像和艺术作品。

OpenAI SDK模块会根据您提供的基础URL自动检测服务提供商(OpenAI、Microsoft Foundry或GitHub Models)。

认证

身份验证通过基础URL和API密钥完成。该实现通过Spring Boot属性或环境变量提供了灵活的配置选项。

使用 OpenAI

如果您直接使用OpenAI,请在OpenAI注册页面创建账户,并在API密钥页面生成API密钥。

基础 URL 无需设置,因为其默认值为 [api.openai.com/v1](https://api.openai.com/v1)

spring.ai.openai-sdk.api-key=<your-openai-api-key>
# base-url is optional, defaults to https://api.openai.com/v1

或者使用环境变量:

export OPENAI_API_KEY=<your-openai-api-key>
# OPENAI_BASE_URL is optional, defaults to https://api.openai.com/v1

使用 Microsoft Foundry

当使用 Microsoft Foundry URL 时,Microsoft Foundry 会被自动检测到。您可以使用以下属性进行配置:

spring.ai.openai-sdk.base-url=https://<your-deployment-url>.openai.azure.com
spring.ai.openai-sdk.api-key=<your-api-key>
spring.ai.openai-sdk.microsoft-deployment-name=<your-deployment-name>

或者使用环境变量:

export OPENAI_BASE_URL=https://<your-deployment-url>.openai.azure.com
export OPENAI_API_KEY=<your-api-key>

无密码身份验证(Azure 推荐使用):

Microsoft Foundry 支持无密码身份验证,无需提供 API 密钥,在 Azure 上运行时安全性更高。

要启用无密码身份验证,请添加 com.azure:azure-identity 依赖项:

<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>

然后配置时无需API密钥:

spring.ai.openai-sdk.base-url=https://<your-deployment-url>.openai.azure.com
spring.ai.openai-sdk.microsoft-deployment-name=<your-deployment-name>
# No api-key needed - will use Azure credentials from environment

使用 GitHub 模型

GitHub Models 在使用 GitHub Models 基础 URL 时会自动检测。您需要创建一个具有 models:read 范围的 GitHub 个人访问令牌 (PAT)。

spring.ai.openai-sdk.base-url=https://models.inference.ai.azure.com
spring.ai.openai-sdk.api-key=github_pat_XXXXXXXXXXX

或者使用环境变量:

export OPENAI_BASE_URL=https://models.inference.ai.azure.com
export OPENAI_API_KEY=github_pat_XXXXXXXXXXX
提示

为了在处理敏感信息(如 API 密钥)时增强安全性,您可以在属性中使用 Spring Expression Language (SpEL):

spring.ai.openai-sdk.api-key=${OPENAI_API_KEY}

添加存储库和物料清单(BOM)

Spring AI 项目构件已发布至 Maven Central 与 Spring Snapshot 仓库。请参阅构件仓库章节,将这些仓库添加至您的构建系统中。

为辅助依赖管理,Spring AI 提供了物料清单(BOM),以确保在整个项目中使用的 Spring AI 版本一致。请参阅依赖管理部分,将 Spring AI BOM 添加至您的构建系统。

自动配置

Spring AI 为 OpenAI SDK 的图像模型提供了 Spring Boot 自动配置。要启用此功能,请将以下依赖项添加到项目的 Maven pom.xml 或 Gradle build.gradle 构建文件中:

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

:::提示
请参考 依赖管理 章节,将 Spring AI BOM 添加到你的构建文件中。
:::

配置属性

连接属性

前缀 spring.ai.openai-sdk 用作属性前缀,允许您配置 OpenAI SDK 客户端。

属性描述默认值
spring.ai.openai-sdk.base-url连接到的 URL。如果未设置,将从 OPENAI_BASE_URL 环境变量自动检测。api.openai.com/v1
spring.ai.openai-sdk.api-keyAPI 密钥。如果未设置,将从 OPENAI_API_KEY 环境变量自动检测。-
spring.ai.openai-sdk.organization-id可选参数,指定用于 API 请求的组织。-
spring.ai.openai-sdk.timeout请求超时时长。-
spring.ai.openai-sdk.max-retries失败请求的最大重试次数。-
spring.ai.openai-sdk.proxyOpenAI 客户端的代理设置 (Java Proxy 对象)。-
spring.ai.openai-sdk.custom-headers请求中包含的自定义 HTTP 头。头名称到头值的映射。-

Microsoft Foundry 属性

OpenAI SDK 实现为 Microsoft Foundry 提供了原生支持,并具备自动配置功能:

属性说明默认值
spring.ai.openai-sdk.microsoft-foundry启用 Microsoft Foundry 模式。若基础 URL 包含 openai.azure.comcognitiveservices.azure.com.openai.microsoftFoundry.com 则自动检测启用。false
spring.ai.openai-sdk.microsoft-deployment-nameMicrosoft Foundry 部署名称。若未指定,将使用模型名称。也可通过别名 deployment-name 访问。-
spring.ai.openai-sdk.microsoft-foundry-service-versionMicrosoft Foundry API 服务版本。-
spring.ai.openai-sdk.credential用于无密码身份验证的凭据对象(需要 com.azure:azure-identity 依赖)。-
提示

Microsoft Foundry 支持无密码身份验证。添加 com.azure:azure-identity 依赖项后,当未提供 API 密钥时,实现将自动尝试使用环境中的 Azure 凭据。

GitHub 模型属性

原生支持 GitHub Models 现已可用:

属性描述默认值
spring.ai.openai-sdk.github-models启用 GitHub Models 模式。如果基础 URL 包含 models.github.aimodels.inference.ai.azure.com 则自动检测启用。false

:::提示
GitHub Models 需要一个具有 models:read 范围的个人访问令牌。通过 OPENAI_API_KEY 环境变量或 spring.ai.openai-sdk.api-key 属性进行设置。
:::

图像模型属性

前缀 spring.ai.openai-sdk.image 是用于配置图像模型实现的属性前缀:

属性描述默认值
spring.ai.openai-sdk.image.options.model用于图像生成的模型。可用模型:dall-e-2dall-e-3。更多信息请参阅模型页面。dall-e-3
spring.ai.openai-sdk.image.options.n要生成的图像数量。必须在 1 到 10 之间。对于 dall-e-3,仅支持 n=1。-
spring.ai.openai-sdk.image.options.quality将要生成的图像质量。hd 创建具有更精细细节和图像整体更高一致性的图像。此参数仅 dall-e-3 支持。可用值:standardhd-
spring.ai.openai-sdk.image.options.response-format返回生成图像的格式。必须是 urlb64_json 之一。-
spring.ai.openai-sdk.image.options.size生成图像的尺寸。对于 dall-e-2,必须是 256x256512x5121024x1024 之一。对于 dall-e-3 模型,必须是 1024x10241792x10241024x1792 之一。-
spring.ai.openai-sdk.image.options.width生成图像的宽度。对于 dall-e-2,必须是 256、512 或 1024 之一。-
spring.ai.openai-sdk.image.options.height生成图像的高度。对于 dall-e-2,必须是 256、512 或 1024 之一。-
spring.ai.openai-sdk.image.options.style生成图像的风格。必须是 vividnatural 之一。Vivid 使模型倾向于生成超现实和戏剧性的图像。Natural 使模型生成更自然、不那么超现实的图像。此参数仅 dall-e-3 支持。-
spring.ai.openai-sdk.image.options.user代表您最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。-

:::提示
所有以 spring.ai.openai-sdk.image.options 为前缀的属性,都可以在运行时通过向 ImagePrompt 调用添加请求特定的运行时选项来覆盖。
:::

运行时选项

OpenAiSdkImageOptions.java 提供了 OpenAI 的配置,例如要使用的模型、质量、尺寸、样式以及要生成的图像数量。

默认选项也可以通过 spring.ai.openai-sdk.image.options 属性进行配置。

在启动时,使用 OpenAiSdkImageModel 构造函数来设置所有图像生成请求使用的默认选项。在运行时,你可以通过 ImagePrompt 的一部分——OpenAiSdkImageOptions 实例——来覆盖这些默认选项。

例如,为特定请求覆盖默认模型和质量设置:

ImageResponse response = imageModel.call(
new ImagePrompt("A light cream colored mini golden doodle",
OpenAiSdkImageOptions.builder()
.model("dall-e-3")
.quality("hd")
.N(1)
.width(1024)
.height(1024)
.style("vivid")
.build()));
提示

除了模型特定的 OpenAiSdkImageOptions 之外,你也可以使用可移植的 ImageOptions 实例,该实例可以通过 ImageOptionsBuilder#builder() 创建。

示例控制器

创建一个新的Spring Boot项目,并在你的pom(或gradle)依赖中添加 spring-ai-openai-sdk

src/main/resources 目录下添加一个 application.properties 文件,用于配置 OpenAI SDK 图像模型:

spring.ai.openai-sdk.api-key=YOUR_API_KEY
spring.ai.openai-sdk.image.options.model=dall-e-3

:::提示
api-key 替换为你的 OpenAI 凭证。
:::

这将创建一个 OpenAiSdkImageModel 实现,你可以将其注入到你的类中。以下是一个使用该图像模型的简单 @RestController 类的示例。

@RestController
public class ImageController {

private final ImageModel imageModel;

@Autowired
public ImageController(ImageModel imageModel) {
this.imageModel = imageModel;
}

@GetMapping("/ai/image")
public Map<String, Object> generateImage(
@RequestParam(value = "prompt", defaultValue = "A light cream colored mini golden doodle") String prompt) {
ImageResponse response = this.imageModel.call(
new ImagePrompt(prompt,
OpenAiSdkImageOptions.builder()
.quality("hd")
.N(1)
.width(1024)
.height(1024)
.build()));

String imageUrl = response.getResult().getOutput().getUrl();
return Map.of("url", imageUrl);
}
}

手动配置

OpenAiSdkImageModel 实现了 ImageModel 接口,并使用官方的 OpenAI Java SDK 来连接 OpenAI 服务。

如果你不使用 Spring Boot 自动配置,可以手动配置 OpenAI SDK 图像模型。为此,请将 spring-ai-openai-sdk 依赖添加到项目的 Maven pom.xml 文件中:

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

或添加到您的 Gradle build.gradle 构建文件:

dependencies {
implementation 'org.springframework.ai:spring-ai-openai-sdk'
}
提示

请参考 依赖管理 部分,将 Spring AI BOM 添加到你的构建文件中。

备注

spring-ai-openai-sdk 依赖同样提供了对 OpenAiSdkChatModelOpenAiSdkEmbeddingModel 的访问。有关 OpenAiSdkChatModel 的更多信息,请参阅 OpenAI SDK Chat 章节。

接下来,创建 OpenAiSdkImageModel 实例并使用它来生成图像:

var imageOptions = OpenAiSdkImageOptions.builder()
.model("dall-e-3")
.quality("hd")
.apiKey(System.getenv("OPENAI_API_KEY"))
.build();

var imageModel = new OpenAiSdkImageModel(imageOptions);

ImageResponse response = imageModel.call(
new ImagePrompt("A light cream colored mini golden doodle",
OpenAiSdkImageOptions.builder()
.N(1)
.width(1024)
.height(1024)
.build()));

OpenAiSdkImageOptions 提供了图像生成请求的配置信息。该选项类提供了一个 builder() 方法,以便于轻松创建配置选项。

Microsoft Foundry 配置

针对 Microsoft Foundry:

var imageOptions = OpenAiSdkImageOptions.builder()
.baseUrl("https://your-resource.openai.azure.com")
.apiKey(System.getenv("OPENAI_API_KEY"))
.deploymentName("dall-e-3")
.azureOpenAIServiceVersion(AzureOpenAIServiceVersion.V2024_10_01_PREVIEW)
.azure(true) // Enables Microsoft Foundry mode
.build();

var imageModel = new OpenAiSdkImageModel(imageOptions);

:::提示
Microsoft Foundry 支持无密码身份验证。请将 com.azure:azure-identity 依赖项添加到你的项目中。如果不提供 API 密钥,实现将自动尝试使用你环境中的 Azure 凭据。
:::

GitHub 模型配置

对于 GitHub 模型:

var imageOptions = OpenAiSdkImageOptions.builder()
.baseUrl("https://models.inference.ai.azure.com")
.apiKey(System.getenv("GITHUB_TOKEN"))
.model("dall-e-3")
.githubModels(true)
.build();

var imageModel = new OpenAiSdkImageModel(imageOptions);

可观测性

OpenAI SDK实现通过Micrometer支持Spring AI的可观测性功能。所有图像模型操作均经过插装,以便进行监控和追踪。

额外资源