图像模型 API
`Spring Image Model API`旨在成为一个简单且可移植的接口,用于与各种AI模型进行交互,这些模型专门用于图像生成,使开发人员能够以最小的代码更改在不同图像相关模型之间切换。 这种设计与Spring的模块化和可互换性理念保持一致,确保开发人员能够快速适应与图像处理相关的不同AI功能。
此外,通过支持像`ImagePrompt`这样的输入封装和`ImageResponse`这样的输出处理的配套类,图像模型API统一了与专门用于图像生成的AI模型的通信。 它管理请求准备和响应解析的复杂性,为图像生成功能提供直接和简化的API交互。
Spring图像模型API建立在Spring AI `通用模型API`之上,提供图像特定的抽象和实现。
图像模型
这是ImageModel接口定义:
@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {
ImageResponse call(ImagePrompt request);
}
ImagePrompt
ImagePrompt是一个`ModelRequest`,它封装了一个https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/image/ImageMessage.java[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() {...}
// 构造函数和实用方法省略
}
ImageMessage
`ImageMessage`类封装了要使用的文本和该文本在影响生成图像时应该具有的权重。对于支持权重的模型,它们可以是正数或负数。
public class ImageMessage {
private String text;
private Float weight;
public String getText() {...}
public Float getWeight() {...}
// 构造函数和实用方法省略
}
ImageOptions
表示可以传递给图像生成模型的选项。`ImageOptions`接口扩展了`ModelOptions`接口,用于定义可以传递给AI模型的几个可移植选项。
`ImageOptions`接口定义如下:
public interface ImageOptions extends ModelOptions {
Integer getN();
String getModel();
Integer getWidth();
Integer getHeight();
String getResponseFormat(); // openai - url或base64 : stability ai byte[]或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() {
// 获取第一个结果
}
@Override
public List<ImageGeneration> getResults() {...}
@Override
public ImageResponseMetadata getMetadata() {...}
// 其他方法省略
}
ImageResponse类保存AI模型的输出,每个`ImageGeneration`实例包含从单个提示生成的潜在多个输出中的一个。
`ImageResponse`类还携带一个`ImageResponseMetadata`对象,保存有关AI模型响应的元数据。
ImageGeneration
最后,https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/image/ImageGeneration.java[ImageGeneration]类从`ModelResult`扩展而来,表示输出响应和与此结果相关的元数据:
public class ImageGeneration implements ModelResult<Image> {
private ImageGenerationMetadata imageGenerationMetadata;
private Image image;
@Override
public Image getOutput() {...}
@Override
public ImageGenerationMetadata getMetadata() {...}
// 其他方法省略
}