Image Model API
Spring Image Model API 旨在为各种专注于图像生成的 AI 模型 提供一个简单且可移植的接口,使开发者能够以最小的代码改动在不同的图像相关模型之间切换。此设计契合 Spring 的模块化和可替换性理念,确保开发者能够快速将应用适配于不同的图像处理 AI 能力。
同时,通过 ImagePrompt(用于封装输入)和 ImageResponse(用于处理输出)等辅助类的支持,图像模型 API 统一了与专注于图像生成的 AI 模型的通信。它管理了请求准备和响应解析的复杂性,为图像生成功能提供了直接且简化的 API 交互方式。
Spring 图像模型 API 构建在 Spring AI 通用模型 API 之上,提供了针对图像的特定抽象和实现。
API 概览
本节提供了 Spring 图像模型(Image Model)API 接口及相关类的使用指南。
图像模型
以下是 ImageModel 接口的定义:
@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {
ImageResponse call(ImagePrompt request);
}
ImageModel 接口继承自通用的 Model 接口,专门用于图像生成。它通过 call(ImagePrompt request) 方法接收图像输入请求,并返回 ImageResponse 结果。
图像提示(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() { ... }
// 构造方法和工具方法省略
}
ImageMessage
ImageMessage 类用于封装用于生成图像的文本及该文本在图像生成中应起的权重。对于支持权重的模型,权重可以为正数或负数。
public class ImageMessage {
private String text;
private Float weight;
public String getText() { ... }
public Float getWeight() { ... }
// 构造方法和工具方法省略
}
ImageOptions
ImageOptions 表示可以传递给图像生成模型的参数选项。ImageOptions 接口继承自 ModelOptions,用于定义可移植的模型参数。
public interface ImageOptions extends ModelOptions {
Integer getN();
String getModel();
Integer getWidth();
Integer getHeight();
String getResponseFormat(); // openai - url 或 base64 : stability ai - byte[] 或 base64
}
此外,每个具体的 ImageModel 实现可以有自己的模型专用选项,例如 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 实例对应单个提示(prompt)生成的一个或多个图像结果。
此外,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() { ... }
// 其他方法省略
}
ImageGeneration 包含生成的图像对象 image 以及 imageGenerationMetadata,用于记录该图像生成的相关信息和元数据。
可用实现
ImageModel 的实现提供了对以下模型提供商的支持:
API 文档
你可以在 此处 查看 Javadoc。
反馈与贡献
项目的 GitHub 讨论区 是提交反馈的绝佳渠道。