Spring Image Generation API` 旨在成为一个简单、可移植的接口,用于与专门从事图像生成的各种AI 模型进行交互,允许开发者通过最少的代码变动在不同的图像相关模型之间切换。这种设计与 Spring 的模块化和可互换性哲学相一致,确保开发者可以快速地将他们的应用程序适应于不同的与图像处理相关的 AI 能力。
此外,在`ImagePrompt`这样的伴随类的支持下,用于输入封装,以及`ImageResponse`用于输出处理,图像生成API统一了与专门用于图像生成的AI模型的通信。它管理了请求准备和响应解析的复杂性,为图像生成功能提供了直接而简化的API交互方式。
Spring 图片生成 API 是基于 Spring AI Generic Model API
构建的,提供了针对图片的特定抽象和实现。
API概览
这部分提供了Spring图像生成API接口及其相关类的指南。
图像客户端
这是链接:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/image/ImageClient.java[ImageClient] 接口定义:
@FunctionalInterface
public interface ImageClient extends ModelClient<ImagePrompt, ImageResponse> {
ImageResponse call(ImagePrompt request);
}
图像提示
[ImagePrompt]是一个`ModelRequest`,它封装了一个https://github.com/spring-projects/spring-ai/blob/main/spring-ai-core/src/main/java/org/springframework/ai/image/ImageMessage.java[ImageMessage]对象列表和可选的模型请求选项。以下列表显示了`ImagePrompt`类的一个截断版本,不包括构造函数和其他实用方法:
public class ImagePrompt implements ModelRequest<List<ImageMessage>> {
private final List<ImageMessage> messages;
私有 ImageOptions 类型的 imageModelOptions 属性/字段。
@Override
public List<ImageMessage> getInstructions() {...}
java
@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
类扩展了 ModelOptions
接口,用于定义可以传递给AI模型的几个可移植选项。
ImageOptions` 类被定义如下:
public interface ImageOptions extends ModelOptions {
获取整数n的值。
获取模型();
Integer getWidth();
Integer getHeight();
String getResponseFormat(); // openai - url or base64 : stability ai byte[] or base64
}
此外,每个特定模型的ImageClient实现可以有其自己的选项,这些选项可以传递给AI模型。例如,OpenAI图像生成模型就有其自己的选项,如`quality`(质量)、style
(风格)等。
这是一个强大的特性,它允许开发者在启动应用程序时使用模型特定的选项,然后在运行时通过`ImagePrompt`来覆盖这些选项。
图像响应
ChatResponse` 类的结构如下:
public class ImageResponse implements ModelResponse<ImageGeneration> {
private final ImageResponseMetadata imageResponseMetadata;
private final List<ImageGeneration> imageGenerations;
java
@Override
public ImageGeneration getResult() {
// get the first result
}
@Override
public List<ImageGeneration> getResults() {...}
java
@Override
public ImageResponseMetadata getMetadata() {...}
// other methods omitted
}
ImageResponse` 类保存了AI模型的输出,每一个 ImageGeneration
实例包含了来自单一提示可能产生的多个输出中的一个。
ImageResponse` 类还携带了关于AI模型响应的`ImageResponseMetadata`元数据。
图像生成
最后,这个[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
}
可用实现
"`ImageClient` 的实现是为以下模型提供者提供的:"
API文档
你可以在这里找到Javadoc文档 here.