6.1 Spring AI Image Model API

25 阅读3分钟

Spring AI Image Model 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接口和相关类的指南。

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实例包含来自单个提示的潜在多个输出之一的结果。

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

}

可用实现

为以下模型提供器提供ImageModel实现:

API 文档

您可以在此处找到Javadoc 文档