聊天模型 API

聊天模型 API 使開發人員能夠將 AI 驅動的聊天補全功能整合到其應用程式中。它利用預訓練的語言模型,例如 GPT (生成式預訓練 Transformer),以自然語言對使用者輸入生成類似人類的回應。

該 API 通常透過向 AI 模型傳送 Prompt 或部分對話來實現功能,然後模型根據其訓練資料和對自然語言模式的理解生成對話的補全或延續。完成的響應隨後返回給應用程式,應用程式可以將其呈現給使用者或用於進一步處理。

Spring AI Chat Model 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 getText();

	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 識別不同對話角色的訊息類別,如 system(系統)、user(使用者)、function(函式)或 assistant(助手)。

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

對於不使用特定角色的 AI 模型,UserMessage 實現充當標準類別,通常代表使用者生成的查詢或指令。要理解實際應用以及 PromptMessage 之間的關係,特別是在這些角色或訊息類別的上下文中,請參閱Prompts 部分的詳細解釋。

聊天選項

表示可以傳遞給 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. 執行時配置 - 對於每個請求,Prompt 可以包含執行時聊天選項:這些可以覆蓋啟動時選項。

  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 例項包含單個 Prompt 可能產生的多個輸出之一。

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 的 通用模型 API 之上,提供了特定於聊天的抽象和實現。這允許輕鬆整合和切換不同的 AI 服務,同時為客戶端應用程式維護一致的 API。以下類圖說明了 Spring AI 聊天模型 API 的主要類和介面。

spring ai chat api