使用Spring AI集成OpenAI的DALL-E 3生成图片步骤详解

后端 潘老师 2个月前 (02-08) 69 ℃ (0) 扫码查看

本文详细介绍了如何借助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模型支持的尺寸有1024x10241792x10241024x1792这几种。
  • Style:选vivid风格生成的图片会更超现实;要是想让图片看起来更真实,就把值设成natural
  • Quality:有standardHD这两个选项。
  • Response-format:有urlb64_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。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/14039.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】