Spring AI支持DALL-E,这是OpenAI的图像生成模型。
前提条件
您需要使用OpenAI创建一个API密钥才能访问ChatGPT模型。
在OpenAI的注册页面创建一个账户,并在API密钥页面生成令牌。
Spring AI 项目定义了一个名为 spring.ai.openai.api-key 的配置属性,您应将其设置为从 openai.com 获取的 API 密钥的值。
您可以在application.properties文件中设置此配置属性:
spring.ai.openai.api-key=<your-openai-api-key>为了在处理API密钥等敏感信息时增强安全性,您可以使用Spring表达式语言(SpEL)来引用自定义环境变量:
# In application.ymlspring:ai:openai:api-key: ${OPENAI_API_KEY}
# In your environment or .env fileexport OPENAI_API_KEY=<your-openai-api-key>
您还可以在应用程序代码中以编程方式设置此配置:
// Retrieve API key from a secure source or environment variableString apiKey = System.getenv("OPENAI_API_KEY");
自动配置
Spring AI 为 OpenAI 图像生成客户端提供了 Spring Boot 自动配置功能。要启用该功能,请将以下依赖项添加到项目的 Maven pom.xml 文件中:
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId></dependency>
或者添加到你的Gradle build.gradle构建文件中。
dependencies {implementation 'org.springframework.ai:spring-ai-starter-model-openai'}
图像生成属性
连接属性
前缀“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 Image客户端的重试机制。
| 描述 | 默认值 | |
|---|---|---|
spring.ai.retry.max-attempts | 重试尝试的最大次数。 | 10 |
spring.ai.retry.backoff.initial-interval | 指数回退策略的初始睡眠持续时间。 | 2 sec. |
spring.ai.retry.backoff.multiplier | 回退间隔倍数。 | 5 |
spring.ai.retry.backoff.max-interval | 最大回退持续时间。 | 3 min. |
spring.ai.retry.on-client-errors | 如果为false,则抛出NonTransientAiException,并且不尝试重试
| false |
spring.ai.retry.exclude-on-http-codes | 不应该触发重试的HTTP状态代码列表(例如,抛出NonTransientAiException)。 | empty |
spring.ai.retry.on-http-codes | 应该触发重试的HTTP状态代码列表(例如,抛出TransientAiException)。 | empty |
配置属性
现在,图像自动配置的启用和禁用可通过带有前缀spring.ai.model.image的顶层属性进行配置。
要启用,请将 spring.ai.model.image 设置为 openai(默认情况下已启用)
要禁用,请将 spring.ai.model.image 设置为 none(或任何与 openai 不匹配的值)
这一更改是为了允许配置多个模型。
前缀“spring.ai.openai.image”是属性前缀,用于配置OpenAI的ImageModel实现。
属性 | 描述 | 默认值 |
spring.ai.openai.image.enabled(已移除且不再有效) | 启用OpenAI图像模型。 | true |
spring.ai.model.image | 启用OpenAI图像模型。 | openai |
spring.ai.openai.image.base-url | 可选,覆盖spring.ai.openai.base-url以提供聊天特定的url | - |
spring.ai.openai.image.api-key | 可选,覆盖spring.ai.openai.api-key以提供聊天特定的api-key | - |
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之一。 | - |
| - | |
| 生成的图像的宽度。dall-e-2必须是256、512或1024中的一个。 | - |
| 生成的图像的高度。dall-e-2必须是256、512或1024中的一个。 | - |
| 生成的图像的样式。必须是生动或自然的。生动使模型倾向于生成超真实和戏剧性的图像。自然会使模型产生更自然、更不真实的图像。仅dall-e-3支持此参数。 | - |
| 代表最终用户的唯一标识符,可以帮助OpenAI监控和检测滥用行为。 | - |
您可以覆盖common的spring.ai.openai.base-url、spring.ai.openai.api-key、spring.ai.openai.organization-id和spring.ai.openai.project-id属性。如果设置了spring.ai.openai.image.base-url、spring.ai.openai.image.api-key、spring.ai.openai.image.organization-id和spring.ai.openai.image.project-id属性,则这些属性将优先于common属性。如果您想为不同的模型和不同的模型端点使用不同的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().quality("hd").N(4).height(1024).width(1024).build()));
除了特定于模型的OpenAiImageOptions之外,您还可以使用一个可移植的ImageOptions实例,该实例是通过ImageOptionsBuilder#builder()创建的。