图像模型 API

Spring 图像模型 API 设计为一个简单且可移植的接口,用于与各种专门从事图像生成的 AI 模型 进行交互,允许开发者以最少的代码更改在不同的图像相关模型之间切换。这种设计与 Spring 的模块化和可互换性理念一致,确保开发者可以快速使其应用程序适应与图像处理相关的不同 AI 能力。

此外,借助 ImagePrompt 用于输入封装和 ImageResponse 用于输出处理等伴随类,图像模型 API 统一了与专门用于图像生成的 AI 模型之间的通信。它管理请求准备和响应解析的复杂性,为图像生成功能提供了直接且简化的 API 交互。

Spring 图像模型 API 构建在 Spring AI 通用模型 API 之上,提供了图像特定的抽象和实现。

API 概述

本节提供 Spring 图像模型 API 接口和相关类的指南。

Image Model

以下是 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 图像生成模型有其自己的选项,例如 qualitystyle 等。

这是一项强大的功能,允许开发者在启动应用程序时使用模型特定的选项,然后在运行时使用 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 实例包含一个由单个 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() {...}

    // other methods omitted

}

API 文档

你可以在这里找到 Javadoc。

反馈与贡献

项目的 GitHub discussions 是提交反馈的好地方。