Chat Model API

聊天模型API為開發人員提供了將人工智能聊天完成功能集成到應用程序中的能力。它利用預訓練的語言模型,如GPT(生成預訓練轉換器),以自然語言對用戶輸入生成類似人類的響應。

API通常通過向人工智能模型發送提示或部分對話來工作,然后人工智能模型根據其訓練數據和對自然語言模式的理解生成對話的完成或繼續。然后將完成的響應返回給應用程序,應用程序可以將其呈現給用戶或用于進一步處理。

Spring人工智能聊天模型API設計為一個簡單便攜的界面,用于與各種人工智能模型交互,使開發人員能夠在不同的模型之間切換,只需最少的代碼更改。這種設計符合Spring的模塊化和互換性理念。

此外,在Prompt用于輸入封裝和ChatResponse用于輸出處理等配套類的幫助下,Chat Model API將與AI Model的通信統一起來。它管理請求準備和響應解析的復雜性,提供了一個直接和簡化的API交互。

您可以在“可用實現”部分找到有關可用實現的更多信息,也可以在“聊天模型比較”部分找到詳細的比較。

API Overview

本節提供了Spring AI Chat Model API接口和相關類的指南。

ChatModel

以下是ChatModel接口定義:

public interface ChatModel extends Model<Prompt, ChatResponse> {default String call(String message) {...}@OverrideChatResponse call(Prompt prompt);
}

帶有String參數的call()方法簡化了初始使用,避免了更復雜的Prompt和ChatResponse類的復雜性。在實際應用中,更常見的是使用call()方法,該方法接受Prompt實例并返回ChatResponse。

StreamingChatModel

以下是StreamingChatModel接口定義:

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {default Flux<String> stream(String message) {...}@OverrideFlux<ChatResponse> stream(Prompt prompt);
}

stream()方法采用類似于ChatModel的String或Prompt參數,但它使用reactive Flux API來流式傳輸響應。

Prompt

Prompt是一個ModelRequest,它封裝了Message對象和可選模型請求選項的列表。以下列表顯示了Prompt類的截斷版本,不包括構造函數和其他實用方法:

public class Prompt implements ModelRequest<List<Message>> {private final List<Message> messages;private ChatOptions modelOptions;@Overridepublic ChatOptions getOptions() {...}@Overridepublic 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接口。

public interface MediaContent extends Content {Collection<Media> getMedia();}

Message接口有各種實現,對應于AI模型可以處理的消息類別:

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

例如,OpenAI識別不同會話角色的消息類別,如系統、用戶、功能或助手。

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

對于不使用特定角色的AI模型,UserMessage實現充當標準類別,通常表示用戶生成的查詢或指令。要了解Prompt和Message之間的實際應用和關系,特別是在這些角色或消息類別的背景下,請參閱Prompts部分中的詳細說明。

Chat Options

表示可以傳遞給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如何處理聊天模型的配置和執行,結合啟動和運行時選項:

啟動和運行時選項的分離允許進行全局配置和特定于請求的調整。

ChatResponse

ChatResponse類的結構如下:

public class ChatResponse implements ModelResponse<Generation> {private final ChatResponseMetadata chatResponseMetadata;private final List<Generation> generations;@Overridepublic ChatResponseMetadata getMetadata() {...}@Overridepublic 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;@Overridepublic AssistantMessage getOutput() {...}@Overridepublic ChatGenerationMetadata getMetadata() {...}// other methods omitted
}

Available Implementations

該圖顯示了統一的界面ChatModel和StreamingChatModel,用于與來自不同提供商的各種人工智能聊天模型交互,允許在不同的人工智能服務之間輕松集成和切換,同時為客戶端應用程序維護一致的API。

OpenAI聊天完成(流媒體、多模態和功能調用支持)

Microsoft Azure開放式AI聊天完成(流媒體和函數調用支持)

Ollama聊天完成(流媒體、多模式和功能調用支持)

擁抱面部聊天完成(不支持流媒體)

Google Vertex AI Gemini聊天完成(流媒體、多模態和功能調用支持)

亞馬遜基巖

Mistral AI聊天完成(流媒體和功能調用支持)

人工聊天完成(流媒體和功能調用支持)

Find a detailed comparison of the available Chat Models in th

Chat Model API

Spring AI Chat Model API構建在Spring AI Generic Model API之上,提供特定于Chat的抽象和實現。這允許在不同的人工智能服務之間輕松集成和切換,同時為客戶端應用程序維護一致的API。下面的類圖說明了Spring AI聊天模型API的主要類和接口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87683.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【黑群暉】自組硬件/舊電腦nas改造(三)——使用Jellyfin創建家庭影音庫

一、打開套件中心安裝Jellyfin套件 如果找不到Jellyfin套件&#xff0c;需要手動添加三方套件源&#xff1a; 《群暉NAS必學技能&#xff1a;一鍵解鎖三方套件源&#xff0c;PT下載影音播放全搞定&#xff01;》 二、配置Jellyfin 訪問http://群暉IP:8096 進入Jellyfin初始化界…

泰山派編譯debian報錯 lb config: unrecognized option ‘--debootstrap-options‘

簡介 最近在編譯泰山派 編譯buildroot系統正常&#xff0c;但是編譯debian時總是報錯說lb 找不到一些參數&#xff0c;如下圖所示&#xff0c;應該當前的版本較低 不支持這些參數&#xff0c;我試了很多方法 升級次版本 但是提示的是最新的&#xff0c;最后經過一番搜索 在官方…

跨境證券交易系統合規升級白皮書:全鏈路微秒風控+開源替代,護航7月程序化交易新規落地

1 行業變革&#xff1a;四重驅動力重塑證券交易系統 當前全球證券行業正處于深刻變革期&#xff0c;跨境金融活動面臨前所未有的機遇與挑戰。今日央行開展的1310億元7天期逆回購操作&#xff0c;以及國家外匯管理局向合格境內機構投資者(QDII)新增發放30.8億美元投資額度等政策…

Node.js核心API(fs篇)

前言&#xff1a;在Node.js生態系統中&#xff0c;文件系統操作是后端開發不可或缺的一部分。fs模塊作為Node.js核心API的重要組成部分&#xff0c;提供了與文件系統交互的能力&#xff0c;涵蓋了從基礎的文件讀寫到復雜的目錄操作等功能。現代JavaScript開發中&#xff0c;處理…

HarmonyOS學習2---Stage模型

1、工程目錄結構 1.1、入口 UIAbility 1.2、入口page 1.3、配置文件 1、配置文件 1&#xff09;應用級配置文件 --- app.json5 2&#xff09;模塊級配置文件 --- module.json5 3、oh-package.json5 4、資源文件 1&#xff09;element目錄 2&#xff09;media目錄 3&#xff09…

【軟件工程】軟件復刻項目的完整流程指南

軟件復刻項目的完整流程指南 第一章、概述 一、前期準備&#xff1a;明確目標與合規性 1. 法律風險評估 版權排查&#xff1a;確認目標軟件的 UI 設計、代碼、商標是否受保護&#xff08;如界面元素、核心算法是否申請專利&#xff09;。規避侵權&#xff1a;避免直接復制 …

淺談Python 中的當前工作目錄與腳本目錄

Python 中的 os.path.exists() 和 __file__ 使用陷阱&#xff1a;工作目錄 ≠ 腳本目錄 在使用 os.path.exists() 或 open() 等函數操作文件路徑時&#xff0c;筆者常常忽略一個關鍵概念&#xff1a;當前運行目錄&#xff08;Current Working Directory, CWD&#xff09;并不等…

iOS檢測并阻止騷擾電話的方法

檢測并阻止騷擾電話 你可以在 iPhone 上使用“將未知來電者設置為靜音”或第三方 App 來阻止騷擾電話。 打開“將未知來電者設置為靜音” 在 iOS 13 及更高版本中&#xff0c;你可以打開“靜音未知來電”&#xff0c;以免接到陌生人的來電。這一功能可以阻止那些你從未聯系過…

TensorFlow源碼深度閱讀指南

TensorFlow源碼深度閱讀指南 本文基于《TensorFlow內核剖析》附錄A的代碼閱讀方法論&#xff0c;結合實例解析核心源碼閱讀技巧&#xff08;含關鍵圖示&#xff09;&#xff1a;一、源碼閱讀的四個維度 1. 分層切入策略&#xff08;圖A-1&#xff09; #mermaid-svg-ooLMzaWU5ky…

設計模式-責任鏈模式、策略模式

責任鏈模式 Chain of Responsibility&#xff08;職責鏈&#xff09;—對象行為型模式定義&#xff1a;使多個對象都有機會處理請求&#xff0c;從而避免了請求的發送者和接受者之間的耦合關系。將這些對象連成一條鏈&#xff0c;并沿著這條鏈傳遞該請求&#xff0c;直到有對象…

泛微e-cology remarkOperate遠程命令執行漏洞

【高危】泛微e-cology remarkOperate遠程命令執行漏洞 漏洞描述 泛微e-cology是泛微公司開發的協同管理應用平臺。 受影響版本中&#xff0c;接口 /api/workflow/reqform/remarkOperate 存在 SQL 注入漏洞&#xff0c;multipart 類型參數 requestid 直接拼接進 SQL 語句&…

Redis常用操作

1&#xff1a;redis常用操作&#xff1a; package com.shunaier.hhhh.biz.utils;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.shunaier.hhhh.common.enums.SystemErrorEnum; import com.shunaier.hhhh.common.exception.SNEB…

mybatis-plus-01-環境初始化及簡單應用

文章目錄 【README】【1】springboot集成mybatis-plus配置【1.1】目錄結構【相關說明】 【1.2】代碼示例【pom.xml】【application.properties】【MybatisPlusNoteController】【UserAppService】【UserMapper】【UserPO】【建表語句】 【2】演示 【README】 本文代碼參見&…

VR小鼠解剖虛擬仿真:開啟生命科學教育新視野?

VR 小鼠解剖虛擬仿真&#xff0c;是一項將虛擬現實(VR)技術深度融入小鼠解剖學習與研究過程的創新應用&#xff0c;即 VR 小鼠解剖虛擬仿真。其核心原理在于&#xff0c;借助 VR 技術所構建的高度逼真的虛擬環境&#xff0c;突破了傳統小鼠解剖在時間、空間以及實體操作上的諸多…

計算機網絡(網頁顯示過程,TCP三次握手,HTTP1.0,1.1,2.0,3.0,JWT cookie)

前言 最近一直在后端開發的面經&#x1f64c;&#xff0c;里面涉及到了好多計算機網絡的知識&#x1f601;&#xff0c;在這里以問題的形式寫一個學習筆記&#xff08;其中參考了: JavaGuide 和 小林coding 這兩個很好的學習網站&#x1f618;&#xff09; 1.當鍵入網址后&am…

Redis 消息的發布和訂閱

Redis 消息的發布和訂閱 1、什么是發布和訂閱 Redis 發布訂閱 (pub/sub) 是一種消息通信模式&#xff1a;發送者 (pub) 發送消息&#xff0c;訂閱者 (sub) 接收消息。 Redis 客戶端可以訂閱任意數量的頻道。 2、Redis的發布和訂閱示意 1、客戶端可以訂閱頻道如下圖 2、當…

python優先隊列使用

heapq 是 Python 的一個內置模塊&#xff0c;提供了堆隊列算法的實現&#xff0c;也稱為優先隊列算法。以下是關于 heapq 模塊的詳細使用說明。 基本概念 堆&#xff1a;一種特殊的二叉樹結構&#xff0c;滿足父節點總是小于或等于其子節點&#xff08;最小堆&#xff09;特性…

在 Windows 機器上安裝和配置 RabbitMQ

RabbitMQ 它是一款基于 AMQP&#xff08;高級消息隊列協議&#xff09;的流行消息代理。RabbitMQ 適用于 Windows、Linux 和 macOS&#xff0c;易于安裝和使用&#xff0c;并提供一系列強大的消息隊列和路由功能。要在 Windows 計算機上使用 RabbitMQ&#xff0c;您必須先安裝 …

第十五節:第六部分:日志技術:logback的核心配置文件詳解、日志級別

核心配置文件logback.xml 什么是日志級別&#xff0c;為什么要學日志級別

從入門到精通:數據庫全攻略

目錄一、數據庫基礎概念1.1 數據庫定義1.2 數據庫與文件系統的區別1.3 數據庫系統組成部分1.4 關系型數據庫與非關系型數據庫二、數據庫安裝與配置2.1 下載 MySQL2.2 安裝 MySQL2.3 初始化數據庫服務器2.4 啟動和停止 MySQL 服務2.5 登錄 MySQL2.6 創建數據庫2.7 創建數據表三、…