影像模型 API

Spring 影像模型 API 的設計宗旨是成為一個簡單且可攜式的介面,用於與各種專門用於影像產生的 AI 模型 互動,讓開發人員能夠以最少的程式碼變更在不同的影像相關模型之間切換。此設計符合 Spring 的模組化和可互換性理念,確保開發人員可以快速調整其應用程式,以適應與影像處理相關的不同 AI 功能。

此外,在 ImagePrompt(用於輸入封裝)和 ImageResponse(用於輸出處理)等配套類別的支援下,影像模型 API 統一了與專用於影像產生的 AI 模型之間的通訊。它管理了請求準備和回應解析的複雜性,為影像產生功能提供了直接且簡化的 API 互動。

Spring 影像模型 API 建構於 Spring AI Generic Model API 之上,提供影像特定的抽象化和實作。

API 總覽

本節提供 Spring 影像模型 API 介面和相關類別的指南。

影像模型

以下是 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

}

可用的實作

API 文件

您可以在此處找到 Javadoc。

意見回饋與貢獻

專案的 GitHub 討論區 是發送意見回饋的好地方。