赞
踩
Spring AI提供了图片生成接口,该接口可以用于与各种专门用于图像生成的人工智能模型进行交互,允许开发人员以最少的代码更在在不同的图像相关模型之间切换。
目前,图像生成接口支持OpenAI和Stability AI。后者的API格式是OpenAI的格式。
对于OpenAI的图像生成,我们继续使用spring-ai-openai-spring-boot-starter
依赖即可,对于Stability AI的图像生成,我们就需要引入下面的依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId>
</dependency>
这里我们主要还是以OpenAI为主。
引入spring-ai-openai-spring-boot-starter
后将相关信息进行配置。
在Chat API那章中,我们的对话使用的是ChatClient,举一反三得,绘图接口就是ImageClient。Spring AI的核心绘图接口就是ImageClient
,spring-ai-openai
中对该接口进行具体的实现是OpenAiImageClient
类。
在调用绘图时,我们只需要像调用对话一样传入一个Prompt:ImagePrompt
。ImagePrompt中包含了我们需要绘制的图片信息,包括:ImageMessage(绘图指令)、ImageOptions(图片数、图片配置、返回的图片格式、绘图模型等)。AI拿到我们的Prompt后会根据里面的内容对图像进行生产。
在调用绘图时,我们只需要重点关注ImageOptions
即可。ImageMessage
一般是以字符串的形式构建,例如:“帮我画一张小狗的图片”、“帮我画一张小猫的图片”。而ImageOptions则涉及到图片的大小、数量、返回的格式以及调用模型等。
OpenAI的绘图调用有一个对ImageOptions
接口的具体实现:OpenAiImageOptions
。该类对象的创建采用建造者模式,默认调用的模型是dall-e-3
。
需要注意的是,每个模型所支持的图片尺寸有所不同:
图片的响应格式主要有两种:url 和 b64_json。
下面我们就简单的实现下dall-e-3
模型的绘图接口:
package com.ningning0111.controller; import org.springframework.ai.image.ImageClient; import org.springframework.ai.image.ImageGeneration; import org.springframework.ai.image.ImagePrompt; import org.springframework.ai.image.ImageResponse; import org.springframework.ai.openai.OpenAiImageOptions; import org.springframework.ai.openai.api.OpenAiImageApi; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class ImageController { private final ImageClient imageClient; public ImageController(ImageClient imageClient) { this.imageClient = imageClient; } @GetMapping("/image") public String image(String prompt) { ImagePrompt imagePrompt = new ImagePrompt(prompt, OpenAiImageOptions.builder() .withModel(OpenAiImageApi.ImageModel.DALL_E_3.getValue()) .withHeight(1024) .withWidth(1024) .withResponseFormat("url") // URL or b64_json .build()); ImageResponse imageResponse = imageClient.call(imagePrompt); List<ImageGeneration> results = imageResponse.getResults(); // 图片url String url = results.get(0).getOutput().getUrl(); return String.format("<img src='%s' alt='%s'>",url,prompt); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。