spring AI (七) 文生图 DALLE3 + SD

Spring AI 是支持文生图的，当然也是基于现有的解决方案，文生图的代码很简单，也就 5 行左右，不过还是记录下吧。

DALLE3

这是 OpneAI 发布的文生图的模型，基本上也是最常用的吧，比起专业的 SD 和 MJ 也算可以的了，重点是简单，不要费脑子想提示词，用自然语言描述下即可。

因为之前已经设置过 OpneAI 的依赖和配置，所以也不用再改。

首先创建个 OpenAiImageModel 对象

Copy
private final OpenAiImageModel openAiImageModel;

然后把官方的示例copy 过来就行了

Copy
ImageResponse response = openaiImageModel.call(
new ImagePrompt("A light cream colored mini golden doodle",
OpenAiImageOptions.builder()
.withQuality("hd")
.withN(4)
.withHeight(1024)
.withWidth(1024).build())

);

其中构建时一些主要的参数解释如下:

参数 | 解释
Model | 模型，默认是 DALL_E_3
Quality | 生成的图片质量，仅 dall-e-3 支持
N | 生成的图片数量
Width | 生成图片的宽度，对于 dall-e-2，必须是 256x256、512x512 或 1024x1024 之一。对于 dall-e-3 型号，必须是 1024x1024、1792x1024 或 1024x1792 之一
Height | 生成图片的高度
Style | 生成的图片风格，必须是 vivid 或 natural，前一个图像更真实后一个更自然，仅支持 dall-e-3

最后将图片返回即可

Copy
/**
* 调用openAI的dall-e-3生成图片
* @param message 提示词
* @return ImageResponse
*/
@GetMapping(value = "/openImage", produces = "text/html")
public String openImage(@RequestParam String message) {
ImageResponse imageResponse = openAiImageModel.call(new ImagePrompt(message,
OpenAiImageOptions.builder()
.withModel(OpenAiImageApi.DEFAULT_IMAGE_MODEL)
.withQuality("hd")
.withN(1)
.withWidth(1024)
.withHeight(1024).build())
);

String url = imageResponse.getResult().getOutput().getUrl();
System.err.println(url);
return " ";
}

OpneAI 提供了 2 种返回方式，一种是返回图片的 URL，一种是返回图片的 BASE64 编码。

Stability AI

最开始我以为 Stability AI 这种方式可以调用本机的 Stable Diffusion 接口进行图片生成，试过才发现不行，Stability AI 是 Stability 官方推出的在线绘画平台，这 2 个是不一样的。

首先在Stability AI 官网 注册账户以获取免费额度。
完成后复制 API KEY

接着添加依赖

Copy

<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-stability-ai-spring-boot-starter</artifactId>
</dependency>

和配置

Copy
spring:
ai:
stabilityai:
api-key: sk-xxx

接着同样调用

Copy
/**
* 调用stability生成图片
* @param message 提示词
* @return ImageResponse
*/
@GetMapping(value = "/sdImage", produces = "text/html")
public String sdImage(@RequestParam String message) {
ImageResponse imageResponse = stabilityAiImageModel.call(
new ImagePrompt(message,
StabilityAiImageOptions.builder()
.withStylePreset("cinematic")
.withN(1)
.withHeight(512)
.withWidth(768).build())

);

String b64Json = imageResponse.getResult().getOutput().getB64Json();
String mimeType = "image/png";
String dataUrl = "data:" + mimeType + ";base64," + b64Json;

return " ";

}

需要注意的是

Stability AI 的提示词请使用英文，中文可能会 pass

Stability AI 的返回只有图片的 base64 格式，返回的 URL 是 null

智谱

另一个 AI 绘画模型智谱我也试了一下，结果发现注册后送的免费额度仅支持对话模型，不支持文生图的模型，而且要免费试用最新的模型还需要实名认证。。。有点离谱，遂放弃。