图像模型 API

`Spring Image Model API`旨在成为一个简单且可移植的接口,用于与各种AI模型进行交互,这些模型专门用于图像生成,使开发人员能够以最小的代码更改在不同图像相关模型之间切换。 这种设计与Spring的模块化和可互换性理念保持一致,确保开发人员能够快速适应与图像处理相关的不同AI功能。

此外,通过支持像`ImagePrompt`这样的输入封装和`ImageResponse`这样的输出处理的配套类,图像模型API统一了与专门用于图像生成的AI模型的通信。 它管理请求准备和响应解析的复杂性,为图像生成功能提供直接和简化的API交互。

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

API概述

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

图像模型

这是ImageModel接口定义:

@FunctionalInterface
public interface ImageModel extends Model<ImagePrompt, ImageResponse> {

	ImageResponse call(ImagePrompt request);

}

ImagePrompt

ImagePrompt是一个`ModelRequest`,它封装了一个https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/image/ImageMessage.java[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() {...}

    // 构造函数和实用方法省略
}

ImageMessage

`ImageMessage`类封装了要使用的文本和该文本在影响生成图像时应该具有的权重。对于支持权重的模型,它们可以是正数或负数。

public class ImageMessage {

	private String text;

	private Float weight;

    public String getText() {...}

	public Float getWeight() {...}

   // 构造函数和实用方法省略
}

ImageOptions

表示可以传递给图像生成模型的选项。`ImageOptions`接口扩展了`ModelOptions`接口,用于定义可以传递给AI模型的几个可移植选项。

`ImageOptions`接口定义如下:

public interface ImageOptions extends ModelOptions {

	Integer getN();

	String getModel();

	Integer getWidth();

	Integer getHeight();

	String getResponseFormat(); // openai - url或base64 : stability ai byte[]或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() {
		// 获取第一个结果
	}

	@Override
	public List<ImageGeneration> getResults() {...}

	@Override
	public ImageResponseMetadata getMetadata() {...}

    // 其他方法省略

}

ImageResponse类保存AI模型的输出,每个`ImageGeneration`实例包含从单个提示生成的潜在多个输出中的一个。

`ImageResponse`类还携带一个`ImageResponseMetadata`对象,保存有关AI模型响应的元数据。

ImageGeneration

最后,https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/image/ImageGeneration.java[ImageGeneration]类从`ModelResult`扩展而来,表示输出响应和与此结果相关的元数据:

public class ImageGeneration implements ModelResult<Image> {

	private ImageGenerationMetadata imageGenerationMetadata;

	private Image image;

    @Override
	public Image getOutput() {...}

	@Override
	public ImageGenerationMetadata getMetadata() {...}

    // 其他方法省略

}

可用实现

API文档

您可以在https://docs.spring.io/spring-ai/docs/current-SNAPSHOT/[这里]找到Javadoc。

反馈和贡献

项目的https://github.com/spring-projects/spring-ai/discussions[GitHub讨论]是发送反馈的好地方。