聊天模型 API

聊天模型 API 讓開發人員能夠將 AI 驅動的聊天完成功能整合到他們的應用程式中。它利用預先訓練的語言模型,例如 GPT(Generative Pre-trained Transformer),以自然語言產生類似人類的回應用戶輸入。

API 的運作方式通常是將提示或部分對話發送到 AI 模型,然後 AI 模型根據其訓練資料和對自然語言模式的理解,產生對話的完成或延續。然後將完成的回應傳回給應用程式,應用程式可以將其呈現給用戶或用於進一步處理。

Spring AI 聊天模型 API 旨在成為與各種AI 模型互動的簡單且可移植的介面,讓開發人員能夠以最少的程式碼變更在不同模型之間切換。此設計符合 Spring 的模組化和可互換性哲學。

此外,在 Prompt 輸入封裝和 ChatResponse 輸出處理等配套類別的幫助下,聊天模型 API 統一了與 AI 模型的通訊。它管理請求準備和回應解析的複雜性,提供直接且簡化的 API 互動。

您可以在可用實作章節中找到有關可用實作的更多資訊,並在聊天模型比較章節中找到詳細的比較。

API 概觀

本節提供 Spring AI 聊天模型 API 介面和相關類別的指南。

ChatModel

以下是 ChatModel 介面定義

public interface ChatModel extends Model<Prompt, ChatResponse> {

	default String call(String message) {...}

    @Override
	ChatResponse call(Prompt prompt);
}

具有 String 參數的 call() 方法簡化了初始使用,避免了更複雜的 PromptChatResponse 類別的複雜性。在實際應用程式中,更常見的是使用接受 Prompt 實例並傳回 ChatResponsecall() 方法。

StreamingChatModel

以下是 StreamingChatModel 介面定義

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {

    default Flux<String> stream(String message) {...}

    @Override
	Flux<ChatResponse> stream(Prompt prompt);
}

stream() 方法接受 StringPrompt 參數,類似於 ChatModel,但它使用反應式 Flux API 串流回應。

Prompt

Prompt 是一個 ModelRequest,它封裝了 Message 物件和可選模型請求選項的列表。以下列表顯示了 Prompt 類別的截斷版本,不包括建構子和其他公用程式方法

public class Prompt implements ModelRequest<List<Message>> {

    private final List<Message> messages;

    private ChatOptions modelOptions;

	@Override
	public ChatOptions getOptions() {...}

	@Override
	public List<Message> getInstructions() {...}

    // constructors and utility methods omitted
}

Message

Message 介面封裝了 Prompt 文字內容、中繼資料屬性的集合以及稱為 MessageType 的分類。

介面定義如下

public interface Content {

	String getContent();

	Map<String, Object> getMetadata();
}

public interface Message extends Content {

	MessageType getMessageType();
}

多模態訊息類型也實作了 MediaContent 介面,提供 Media 內容物件的列表。

public interface MediaContent extends Content {

	Collection<Media> getMedia();

}

Message 介面有各種實作,對應於 AI 模型可以處理的訊息類別

Spring AI Message API

聊天完成端點根據對話角色區分訊息類別,有效地由 MessageType 映射。

例如,OpenAI 識別用於不同對話角色的訊息類別,例如 systemuserfunctionassistant

雖然術語 MessageType 可能暗示特定的訊息格式,但在這種情況下,它有效地指定了訊息在對話中扮演的角色。

對於不使用特定角色的 AI 模型,UserMessage 實作充當標準類別,通常代表用戶產生的查詢或指示。若要了解實際應用以及 PromptMessage 之間的關係,尤其是在這些角色或訊息類別的上下文中,請參閱提示章節中的詳細說明。

聊天選項

表示可以傳遞給 AI 模型的選項。ChatOptions 類別是 ModelOptions 的子類別,用於定義可以傳遞給 AI 模型的少量可移植選項。ChatOptions 類別定義如下

public interface ChatOptions extends ModelOptions {

	String getModel();
	Float getFrequencyPenalty();
	Integer getMaxTokens();
	Float getPresencePenalty();
	List<String> getStopSequences();
	Float getTemperature();
	Integer getTopK();
	Float getTopP();
	ChatOptions copy();

}

此外,每個模型特定的 ChatModel/StreamingChatModel 實作都可以有自己的選項,這些選項可以傳遞給 AI 模型。例如,OpenAI 聊天完成模型有自己的選項,例如 logitBiasseeduser

這是一個強大的功能,讓開發人員能夠在啟動應用程式時使用模型特定的選項,然後在執行階段使用 Prompt 請求覆蓋它們。

Spring AI 提供了一個複雜的系統來配置和使用聊天模型。它允許在啟動時設定預設配置,同時也提供了在每個請求的基礎上覆蓋這些設定的彈性。這種方法使開發人員能夠輕鬆地使用不同的 AI 模型,並根據需要調整參數,所有這些都在 Spring AI 框架提供的統一介面中完成。

以下流程圖說明了 Spring AI 如何處理聊天模型的配置和執行,結合了啟動和執行階段選項

chat options flow
  1. 啟動配置 - ChatModel/StreamingChatModel 使用「啟動」聊天選項初始化。這些選項在 ChatModel 初始化期間設定,旨在提供預設配置。

  2. 執行階段配置 - 對於每個請求,提示可以包含執行階段聊天選項:這些選項可以覆蓋啟動選項。

  3. 選項合併程序 - 「合併選項」步驟結合了啟動和執行階段選項。如果提供了執行階段選項,它們將優先於啟動選項。

  4. 輸入處理 - 「轉換輸入」步驟將輸入指令轉換為原生、模型特定的格式。

  5. 輸出處理 - 「轉換輸出」步驟將模型的回應轉換為標準化的 ChatResponse 格式。

啟動和執行階段選項的分離允許全域配置和請求特定的調整。

ChatResponse

ChatResponse 類別的結構如下

public class ChatResponse implements ModelResponse<Generation> {

    private final ChatResponseMetadata chatResponseMetadata;
	private final List<Generation> generations;

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

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

    // other methods omitted
}

ChatResponse 類別保存 AI 模型的輸出,每個 Generation 實例包含單一提示可能產生的多個輸出之一。

ChatResponse 類別也攜帶有關 AI 模型回應的 ChatResponseMetadata 中繼資料。

Generation

最後,Generation 類別從 ModelResult 擴展,以表示模型輸出(助理訊息)和相關中繼資料

public class Generation implements ModelResult<AssistantMessage> {

	private final AssistantMessage assistantMessage;
	private ChatGenerationMetadata chatGenerationMetadata;

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

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

    // other methods omitted
}

可用實作

此圖表說明了統一介面 ChatModelStreamingChatModel 用於與來自不同提供者的各種 AI 聊天模型互動,允許輕鬆整合和在不同 AI 服務之間切換,同時為用戶端應用程式維護一致的 API。

spring ai chat completions clients
聊天模型比較章節中找到可用聊天模型的詳細比較。

聊天模型 API

Spring AI 聊天模型 API 建構於 Spring AI Generic Model API 之上,提供聊天特定的抽象和實作。這允許輕鬆整合和在不同 AI 服務之間切換,同時為用戶端應用程式維護一致的 API。以下類別圖說明了 Spring AI 聊天模型 API 的主要類別和介面。

spring ai chat api