图像模型 API
Spring Image Model API 旨在提供一个简单且可移植的接口,用于与专注于图像生成的各种 AI 模型 进行交互,使开发者能够以最少的代码改动在不同图像相关模型之间切换。这种设计符合 Spring 的模块化和可互换性理念,确保开发者能够快速调整其应用程序,以适应与图像处理相关的不同 AI 能力。
此外,通过ImagePrompt等配套类支持输入封装,以及ImageResponse支持输出处理,图像模型API统一了与专门用于图像生成的AI模型的通信。它管理了请求准备和响应解析的复杂性,为图像生成功能提供了直接且简化的API交互。
Spring Image Model API 构建于 Spring AI Generic Model API 之上,提供了针对图像的特定抽象和实现。
API 概览
本节提供了Spring图像模型API接口及相关类别的指南。
图像模型
以下是 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 类继承自 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 的实现已为以下模型提供商提供:
API 文档
你可以在这里找到 Javadoc。
反馈与贡献
该项目的 GitHub discussions 是提交反馈的理想平台。
章节总结
📄️ Azure OpenAI
Spring AI 支持 Azure OpenAI 的图像生成模型 DALL-E。
📄️ OpenAI SDK (官方)
Spring AI通过OpenAI Java SDK支持OpenAI的DALL-E图像生成模型,提供了与OpenAI服务(包括Microsoft Foundry和GitHub Models)的稳健且官方维护的集成。
📄️ OpenAI
Spring AI 支持 OpenAI 的图像生成模型 DALL-E。
📄️ 稳定性
Spring AI 支持 Stability AI 的文本转图像生成模型。
📄️ 智谱AI
Spring AI 支持智谱AI的 CogView 图像生成模型。
📄️ 千帆
此功能已移至 Spring AI 社区仓库。