如何在5步内使用 Spring AI 和 OpenAI 的 DALL-E 3 生成图像
将 Spring AI 与 OpenAI 的 DALL-E 3 集成,以生成图像。轻松设置 Spring Boot、配置 API 集成并自定义设置。
大家好!这是关于 Spring AI 系列介绍文章的第一篇。今天,我们将了解如何通过文本提示轻松生成图片。为此,我们将利用 OpenAI API 和 DALL-E 3 模型。
在本文中,我将跳过一些 Spring 基础概念的讲解,比如 Bean 管理、启动器等,因为本文的主要目的是探索 Spring AI 的功能。同样,我也不会详细介绍如何生成 OpenAI API 密钥。
前提条件
如果你还没有有效的 OpenAI API 密钥,请按以下步骤操作:
- 在 OpenAI 上创建一个账户。
- 在 API 密钥页面生成令牌。
步骤 1:设置项目
要快速生成包含所有必要依赖项的项目模板,可以使用https://start.spring.io/ 。
在我的示例中,我将使用 Java 17 和 Spring Boot 3.4.1。我们还需要包含以下依赖项:
- Spring WEB:该依赖项使我们能够创建一个 Web 服务器,并将 REST 端点作为应用程序的入口点公开。
- OpenAI:通过编写几行代码和配置,这个依赖项能让我们顺利地与 OpenAI 集成。
点击生成后,在你使用的 IDE 中打开下载的文件,并确认pom.xml中存在所有必要的依赖项。
<dependency>
<groupId>org.spring framework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
步骤 2:设置配置文件
接下来,我们需要配置属性文件。默认情况下,Spring 使用application.yaml或application.properties文件。在这个示例中,我将使用 yaml 格式。如果你更习惯使用.properties 格式,可以将代码重新格式化为.properties文件。
我们需要在application.yaml文件中添加以下所有配置:
spring:
ai:
openai:
api-key: [你的OpenAI API密钥]
image:
options:
model: dall-e-3
size: 1024x1024
style: vivid
quality: standard
response-format: url
- 模型:在撰写本文时,Spring AI 中唯一可用的模型是dall-e-3,所以我们将使用它。
- 尺寸:用于配置生成图像的大小。对于 dall-e-3 模型,它必须是1024x1024、1792x1024或1024x1792中的一种。
- 风格:vivid风格会生成更超现实的图像。如果你希望图片看起来更真实,可以将值设置为natural。
- 质量:有两个选项,standard(标准)或HD(高清)。
- 响应格式:有两个选项,url和b64_json。为了演示方便,我将使用 URL。生成后,图像将在一小时内通过 URL 可用。
步骤 3:创建 ImageGenerationService
让我们创建一个负责生成图像的服务。
@Service
public class ImageGenerationService {
@Autowired
ImageModel imageModel;
public String generateImage(String prompt) {
ImagePrompt imagePrompt = new ImagePrompt(prompt);
ImageResponse imageResponse = imageModel.call(imagePrompt);
return imageResponse.getResult().getOutput().getUrl();
}
}
我们创建了一个新类,并将其标注为Service。我们还自动注入了ImageModel Bean。
ImageModel是用于生成图片的主要接口。由于我们在步骤 2 中提供了所有必要的配置,Spring Boot Starter 会自动为我们生成这个接口的一个实现类OpenAiImageModel。
配置好类后,我们可以开始实现一个方法,该方法调用 OpenAI API,使用我们的提示生成图片。这就是 Spring AI 真正神奇的地方。让我们来看看。
使用 Spring AI 生成图像实际上只需要三行代码。是不是很神奇?
第一步,我们通过提供一个字符串提示创建了一个新的ImagePrompt。
接下来,我们使用imageModel.call(imagePrompt)进行 API 调用,并将响应存储在ImageResponse变量中。
最后一步,我们返回生成图像的 URL。请记住,图像仅在一小时内可用;之后,链接将不再可用。所以别忘了保存你的杰作!
步骤 4:创建 ImageGenerationController 来运行代码
我们需要创建最后一个文件,以便用户执行我们的集成。它可能如下所示:
@RestController()
@RequestMapping("/image")
public class ImageGenerationController {
@Autowired
ImageGenerationService imageService;
@GetMapping("/generate")
public ResponseEntity<String> generateImage(@RequestParam String prompt) {
return ResponseEntity.ok(imageService.generateImage(prompt));
}
}
如你所见,我们创建了一个简单的控制器,其中只有一个 GET 端点。这个端点将在
localhost:8080/image/generate可用。
步骤 5:运行应用程序
要启动我们的应用程序,需要运行以下命令:
mvn spring-boot:run
应用程序运行后,我们可以通过执行以下 curl 命令(使用你想要的任何提示)来查看结果。我使用的是:“Cute cat playing chess”。如果你使用命令行调用端点,别忘了用%20代替空格:
curl -X GET "http://localhost:8080/image/generate?prompt=Cute%20cat%20playing%20chess"
执行后,等待几秒钟,因为 OpenAI 生成图像需要一些时间。
恭喜!你刚刚创建并测试了你的第一个 Spring AI 应用程序,它可以使用自定义提示生成图像!
步骤 6:在生成图像时提供更多灵活性(可选)
在第二步中,我们为模型配置了默认行为,并在application.yaml文件中提供了所有必要的配置。但是,我们能否为用户提供更多灵活性,让他们自行提供配置呢?答案是肯定的!
要做到这一点,我们需要使用ImageOptions接口。
以下是一个示例:
public String generateImage(GenerateImageRequest imageRequest) {
ImageOptions options = OpenAiImageOptions.builder()
.withQuality("standard")
.withStyle("vivid")
.withHeight(1024)
.withWidth(1024)
.withResponseFormat("url")
.build();
ImagePrompt imagePrompt = new ImagePrompt(imageRequest.getPrompt(), options);
ImageResponse imageResponse = imageModel.call(imagePrompt);
return imageResponse.getResult().getOutput().getUrl();
}
为了实现这一点,我们需要使用在application.yaml中设置的所有配置以编程方式构建选项,并在创建ImagePrompt对象时提供这些选项。你可以在 Spring AI 文档中找到更多配置选项。
结论
Spring AI 是一个很棒的工具,它帮助开发人员顺利地与不同的 AI 模型集成。在撰写本文时,Spring AI 支持五种图像模型,包括但不限于 Azure AI 和 Stability。
希望本文对你有所帮助,并能激发你更深入地探索 Spring AI。