使用Spring AI集成OpenAI的DALL-E 3生成图片步骤详解
本文详细介绍了如何借助Spring AI和OpenAI的DALL-E 3模型来实现图片生成功能。文中一步步教你搭建项目、配置相关文件、创建服务和控制器,还分享了提升图片生成灵活性的方法,带你轻松上手用代码生成创意图片。
今天,咱们来看看怎么用文本提示轻松生成图片,实现这个功能要借助OpenAI的API和DALL-E 3模型。这篇文章主要聚焦Spring AI的能力探索,所以像Spring的一些基础概念,比如bean管理、启动器这些,我就不细说了,同时也不会详细讲怎么获取OpenAI API密钥。要是你还没有可用的OpenAI API密钥,可以去OpenAI官网注册账号,然后在API密钥页面生成令牌。
第一步:搭建项目
想要快速生成包含所有必要依赖的项目模板,可以用https://start.spring.io/ 这个工具。我在示例里用的是Java 17和Spring Boot 3.4.1 ,还添加了下面这些依赖:
- Spring WEB:这个依赖能帮我们创建一个Web服务器,把REST端点作为应用程序的入口。
- OpenAI:添加这个依赖后,只要写几行代码、做一些配置,就能轻松和OpenAI集成。
点击生成后,在你用的IDE里打开下载的文件,确认pom.xml
文件里有所有需要的依赖,代码如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency>
第二步:配置文件
接下来要配置属性文件,Spring默认用application.yaml
或者application.properties
文件,我这里用的是yaml格式,要是你习惯.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
下面解释一下这些配置:
- Model:写这篇文章的时候,Spring AI里能用的模型只有
dall-e-3
,所以就选它。 - Size:这个是设置生成图片的尺寸,
dall-e-3
模型支持的尺寸有1024x1024
、1792x1024
、1024x1792
这几种。 - Style:选
vivid
风格生成的图片会更超现实;要是想让图片看起来更真实,就把值设成natural
。 - Quality:有
standard
和HD
这两个选项。 - Response-format:有
url
和b64_json
两种选择,我为了演示方便,选的是url
,用这个选项生成图片一小时内可以通过链接访问。
第三步:创建图片生成服务
下面创建一个负责生成图片的服务。代码如下:
// 声明这是一个服务类 @Service public class ImageGenerationService { // 自动注入ImageModel这个bean @Autowired ImageModel imageModel; }
我们新建了一个类,并用@Service
注解标注它。还自动注入了ImageModel
这个bean,它是生成图片的主要接口。在第二步配置好之后,Spring Boot Starter会自动帮我们生成ImageModel
接口的实现类OpenAiImageModel
。类配置好后,就可以写一个方法,调用OpenAI API,用我们的文本提示生成图片了,真正展示Spring AI强大功能的时候到啦!代码如下:
// 定义生成图片的方法,接收一个文本提示作为参数 public String generateImage(String prompt) { // 根据文本提示创建一个ImagePrompt对象 ImagePrompt imagePrompt = new ImagePrompt(prompt); // 调用imageModel的call方法,传入ImagePrompt对象,得到图片生成的响应结果 ImageResponse imageResponse = imageModel.call(imagePrompt); // 从响应结果里获取生成图片的URL并返回 return imageResponse.getResult().getOutput().getUrl(); }
就这么简单,用Spring AI生成一张图片,实际上只需要三行代码!先根据文本提示创建ImagePrompt
对象,接着用imageModel.call(imagePrompt)
调用API,把响应结果存到ImageResponse
变量里,最后返回生成图片的URL。不过要注意,图片生成后链接只有一小时的有效期,记得及时保存你的“大作”哦!
第四步:创建图片生成控制器来运行代码
还需要创建一个文件,让用户能执行我们的集成代码,代码如下:
// 声明这是一个处理REST请求的控制器 @RestController() // 设置请求映射路径为/image @RequestMapping("/image") public class ImageGenerationController { // 自动注入ImageGenerationService服务 @Autowired ImageGenerationService imageService; // 处理GET请求,路径为/generate @GetMapping("/generate") // 接收一个名为prompt的请求参数,返回一个包含生成图片URL的响应实体 public ResponseEntity<String> generateImage(@RequestParam String prompt) { return ResponseEntity.ok(imageService.generateImage(prompt)); } }
可以看到,我们创建了一个很简单的控制器,里面只有一个GET请求端点,访问localhost:8080/image/generate
就能用这个端点。
第五步:运行应用程序
要启动应用程序,在命令行执行下面这条命令:
mvn spring-boot:run
应用运行起来后,就能用curl
命令测试效果啦,随便输入一个文本提示,我用的是“Cute cat playing chess”。要是在命令行调用端点,记得把空格替换成%20
,命令如下:
curl -X GET "http://localhost:8080/image/generate?prompt=Cute%20cat%20playing%20chess"
执行命令后,等几秒,OpenAI需要点时间生成图片,生成成功就大功告成啦!
第六步:让图片生成更灵活(可选)
第二步里,我们在application.yaml
文件里给模型配置了默认行为。能不能让用户自己来配置呢?当然可以!这时候就要用到ImageOptions
接口了。示例代码如下:
// 定义生成图片的方法,接收一个GenerateImageRequest对象作为参数 public String generateImage(GenerateImageRequest imageRequest) { // 用OpenAiImageOptions的构建器来构建ImageOptions对象 ImageOptions options = OpenAiImageOptions.builder() // 设置图片质量为standard .withQuality("standard") // 设置图片风格为vivid .withStyle("vivid") // 设置图片高度为1024 .withHeight(1024) // 设置图片宽度为1024 .withWidth(1024) // 设置响应格式为url .withResponseFormat("url") // 构建ImageOptions对象 .build(); // 根据用户传入的文本提示和构建好的ImageOptions对象创建ImagePrompt对象 ImagePrompt imagePrompt = new ImagePrompt(imageRequest.getPrompt(), options); // 调用imageModel的call方法,传入ImagePrompt对象,得到图片生成的响应结果 ImageResponse imageResponse = imageModel.call(imagePrompt); // 从响应结果里获取生成图片的URL并返回 return imageResponse.getResult().getOutput().getUrl(); }
实现这个功能,要按照application.yaml
里的配置,用代码构建ImageOptions
对象,然后在创建ImagePrompt
对象的时候把这些配置传进去。要是还想了解更多配置选项,可以去Spring AI的文档里看看。
总结
Spring AI是个很棒的工具,能帮开发者轻松和各种AI模型集成。写这篇文章的时候,Spring AI支持包括Azure AI、Stability等在内的五种图片模型。希望这篇文章能帮到你,也能让你更有兴趣深入探索Spring AI。