聊天模型 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()
方法簡化了初始使用,避免了更複雜的 Prompt
和 ChatResponse
類別的複雜性。在實際應用程式中,更常見的是使用接受 Prompt
實例並傳回 ChatResponse
的 call()
方法。
StreamingChatModel
以下是 StreamingChatModel 介面定義
public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {
default Flux<String> stream(String message) {...}
@Override
Flux<ChatResponse> stream(Prompt prompt);
}
stream()
方法接受 String
或 Prompt
參數,類似於 ChatModel
,但它使用反應式 Flux API 串流回應。
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 模型可以處理的訊息類別

聊天完成端點根據對話角色區分訊息類別,有效地由 MessageType
映射。
例如,OpenAI 識別用於不同對話角色的訊息類別,例如 system
、user
、function
或 assistant
。
雖然術語 MessageType
可能暗示特定的訊息格式,但在這種情況下,它有效地指定了訊息在對話中扮演的角色。
對於不使用特定角色的 AI 模型,UserMessage
實作充當標準類別,通常代表用戶產生的查詢或指示。若要了解實際應用以及 Prompt
和 Message
之間的關係,尤其是在這些角色或訊息類別的上下文中,請參閱提示章節中的詳細說明。
聊天選項
表示可以傳遞給 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 聊天完成模型有自己的選項,例如 logitBias
、seed
和 user
。
這是一個強大的功能,讓開發人員能夠在啟動應用程式時使用模型特定的選項,然後在執行階段使用 Prompt
請求覆蓋它們。
Spring AI 提供了一個複雜的系統來配置和使用聊天模型。它允許在啟動時設定預設配置,同時也提供了在每個請求的基礎上覆蓋這些設定的彈性。這種方法使開發人員能夠輕鬆地使用不同的 AI 模型,並根據需要調整參數,所有這些都在 Spring AI 框架提供的統一介面中完成。
以下流程圖說明了 Spring AI 如何處理聊天模型的配置和執行,結合了啟動和執行階段選項

-
啟動配置 - ChatModel/StreamingChatModel 使用「啟動」聊天選項初始化。這些選項在 ChatModel 初始化期間設定,旨在提供預設配置。
-
執行階段配置 - 對於每個請求,提示可以包含執行階段聊天選項:這些選項可以覆蓋啟動選項。
-
選項合併程序 - 「合併選項」步驟結合了啟動和執行階段選項。如果提供了執行階段選項,它們將優先於啟動選項。
-
輸入處理 - 「轉換輸入」步驟將輸入指令轉換為原生、模型特定的格式。
-
輸出處理 - 「轉換輸出」步驟將模型的回應轉換為標準化的
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
}
可用實作
此圖表說明了統一介面 ChatModel
和 StreamingChatModel
用於與來自不同提供者的各種 AI 聊天模型互動,允許輕鬆整合和在不同 AI 服務之間切換,同時為用戶端應用程式維護一致的 API。

-
OpenAI 聊天完成 (串流、多模態和函數呼叫支援)
-
Microsoft Azure OpenAI 聊天完成 (串流和函數呼叫支援)
-
Ollama 聊天完成 (串流、多模態和函數呼叫支援)
-
Hugging Face 聊天完成 (無串流支援)
-
Google Vertex AI Gemini 聊天完成 (串流、多模態和函數呼叫支援)
-
Mistral AI 聊天完成 (串流和函數呼叫支援)
-
Anthropic 聊天完成 (串流和函數呼叫支援)
在聊天模型比較章節中找到可用聊天模型的詳細比較。 |