图像模型 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 接口及相关类的指南。
图像模型
以下是 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
类封装了要使用的文本以及该文本在影响生成图像时应具有的权重。对于支持权重的模型,权重可以是正数或负数。
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
Spring AI 支持 OpenAI 的图像生成模型 DALL-E。
📄️ 稳定性
Spring AI 支持 Stability AI 的文本生成图像模型。
📄️ 智谱AI
Spring AI 支持智谱AI的图像生成模型 CogView。
📄️ 千帆
Spring AI 支持来自 QianFan 的 CogView 图像生成模型。