【Spring AI】03. 图像生成 API

时间:2024-04-29 16:50:18

文章目录

  • 图像生成 API
    • 概览
    • Image Client
      • ImagePrompt
        • ImageMessage
        • ImageOptions
      • ImageResponse
      • ImageGeneration
    • 可用实现
    • API 文档
    • 反馈与贡献

图像生成 API

Spring Image Generation API 的设计目的是为了提供一个简单且便携的接口,用于与专门从事图像生成的各种 AI 模型进行交互,允许开发者在不同的图像相关模型之间进行最小代码更改即可切换。这种设计与 Spring 的模块化和可互换性理念相一致,确保开发者可以快速地将他们的应用程序适配不同的图像处理相关的 AI 能力。
此外,借助像ImagePrompt这样的伴生类对输入进行封装,ImageResponse用于输出处理,图像生成 API 统一了与专门进行图像生成的 AI 模型的通信。它管理着请求封装和响应解析的复杂工作,为图像生成功能提供了一个直接且简化的 API 交互。
Spring Image Generation API 是建立在 Spring AIGeneric Model API之上的,提供了特定于图像的抽象和实现。

概览


本节提供了 Spring Image Generation API 及相关类的指南。


Image Client


ImageClient 接口定义如下:

@FunctionalInterface
public interface ImageClient extends ModelClient<ImagePrompt, ImageResponse> {

	ImageResponse call(ImagePrompt request);

}

ImagePrompt

ImagePrompt 是一个 ModelRequest ,它封装了一个 ImageMessage 对象列表可选的模型请求参数 ImageOptions 。以下列表显示了 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

}

此外,每个特定模型的 ImageClient 实现都可以有自己的选项参数,这些选项参数可以传递给 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类还携带了关于 AI 模型响应的ImageResponseMetadata元数据。

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

}

可用实现


为以下模型提供商提供了ImageClient实现:

  • OpenAI Image Generation OpenAI
  • StabilityAI Image Generation

API 文档


你可以在这里找到 Javadoc。


反馈与贡献

该项目的 GitHub 讨论区 是发送反馈的好地方。