Spring AI Image Model API
前言
Spring Image Model API 旨在成为一个简单且可移植的接口,用于与各种专门从事图像生成的AI模型进行交互,允许开发者以最少的代码更改在不同的图像相关模型之间切换。
这种设计符合Spring的模块化和可互换性理念,确保开发者能够快速将其应用程序调整到与图像处理相关的不同AI能力。
此外,通过支持诸如用于输入封装的ImagePrompt和用于输出处理的ImageResponse等伴随类,Image Model API统一了与专门用于图像生成的AI模型的通信。它管理请求准备和响应解析的复杂性,为图像生成功能提供直接且简化的API交互。
Spring Image Model API构建在Spring AI Generic Model API之上,提供图像特定的抽象和实现。
API 概述
本节提供关于Spring Image Model API接口和相关类的指南。
Image Model
以下是ImageModel接口定义:
@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {
ImageResponse call(ImagePrompt request);
}
ImagePrompt
ImagePrompt是一个ModelRequest,封装了ImageMessage对象列表和可选的模型请求选项。以下列表显示了ImagePrompt类的简化版本,排除了构造函数和其他实用方法:
public class ImagePrompt implements ModelRequest<List<ImageMessage>> {
private final List<ImageMessage> messages;
private ImageOptions imageModelOptions;
@Override
public List<ImageMessage> getInstructions() {...}
@Override
public ImageOptions getOptions() {...}
// constructors and utility methods omitted
}
ImageMessage
ImageMessage类封装了要使用的文本以及文本在影响生成图像时应具有的权重。对于支持权重的模型,权重可以是正数或负数。
public class ImageMessage {
private String text;
private Float weight;
public String getText() {...}
public Float getWeight() {...}
// constructors and utility methods omitted
}
ImageOptions
表示可以传递给图像生成模型的选项。ImageOptions接口扩展了ModelOptions接口,用于定义可以传递给AI模型的一些可移植选项。
ImageOptions接口定义如下:
public interface ImageOptions extends ModelOptions {
Integer getN();
String getModel();
Integer getWidth();
Integer getHeight();
String getResponseFormat(); // openai - url or base64 : stability ai byte[] or base64
}
此外,每个模型特定的ImageModel实现都可以有自己的选项传递给AI模型。例如,OpenAI图像生成模型有自己的选项,如quality、style等。
这是一个强大的功能,允许开发者在启动应用程序时使用模型特定的选项,然后在运行时使用ImagePrompt覆盖它们。
ImageResponse
ImageResponse类的结构如下:
public class ImageResponse implements ModelResponse<ImageGeneration> {
private final ImageResponseMetadata imageResponseMetadata;
private final List<ImageGeneration> imageGenerations;
@Override
public ImageGeneration getResult() {
// get the first result
}
@Override
public List<ImageGeneration> getResults() {...}
@Override
public ImageResponseMetadata getMetadata() {...}
// other methods omitted
}
ImageResponse类保存AI模型的输出,每个ImageGeneration实例包含来自单个提示的潜在多个输出之一的结果。
ImageResponse类还携带一个ImageResponseMetadata对象,保存有关AI模型响应的元数据。
ImageGeneration
最后,ImageGeneration类扩展自ModelResult,用于表示输出响应和有关此结果的相关元数据:
public class ImageGeneration implements ModelResult<Image> {
private ImageGenerationMetadata imageGenerationMetadata;
private Image image;
@Override
public Image getOutput() {...}
@Override
public ImageGenerationMetadata getMetadata() {...}
// other methods omitted
}
可用实现
为以下模型提供器提供ImageModel实现:
- OpenAI Image Generation
- Azure OpenAI Image Generation
- QianFan Image Generation
- StabilityAI Image Generation
- ZhiPuAI Image Generation
API 文档
您可以在此处找到Javadoc 文档。