聊天模型API

聊天模型API為開發者提供了將AI驅動的聊天補全能力整合到其應用程式中的能力。它利用預訓練語言模型(如GPT)生成類人化的自然語言響應。

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

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>, StreamingChatModel {

	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識別針對不同對話角色的訊息類別,例如systemuserfunctionassistant

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

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

聊天選項

表示可以傳遞給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例項包含單個提示可能產生的多個輸出之一。

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
© . This site is unofficial and not affiliated with VMware.