【AI】Spring AI Alibaba 的介紹

目錄

一、Spring AI Alibaba 的介紹

1.1?什么是 Spring AI Alibaba?

1.2?Spring AI 項目簡介

二、核心概念

2.1?模型

2.2?提示(Prompt)

2.3?提示詞模板(Prompt Template)

2.4?嵌入(Embedding)

2.5?Token

2.6?結構化輸出(Structured Output)

2.7?檢索增強生成(RAG)

2.8?函數調用(Function Calling)


一、Spring AI Alibaba 的介紹

1.1?什么是 Spring AI Alibaba?

Spring AI Alibaba 開源項目基于 Spring AI 構建,是阿里云通義系列模型及服務在 Java AI 應用開發領域的最佳實踐,提供高層次的 AI API 抽象與云原生基礎設施集成方案,幫助開發者快速構建 AI 應用。

Spring AI Alibaba 作為開發 AI 應用程序的基礎框架,定義了以下抽象概念與 API,并提供了 API 與通義系列模型的適配。

  • 開發復雜 AI 應用的高階抽象 Fluent API — ChatClient
  • 提供多種大模型服務對接能力,包括主流開源與阿里云通義大模型服務(百煉)等
  • 支持的模型類型包括聊天、文生圖、音頻轉錄、文生語音等
  • 支持同步和流式 API,在保持應用層 API 不變的情況下支持靈活切換底層模型服務,支持特定模型的定制化能力(參數傳遞)
  • 支持 Structured Output,即將 AI 模型輸出映射到 POJOs
  • 支持矢量數據庫存儲與檢索
  • 支持函數調用 Function Calling
  • 支持構建 AI Agent 所需要的工具調用和對話內存記憶能力
  • 支持 RAG 開發模式,包括離線文檔處理如 DocumentReader、Splitter、Embedding、VectorStore 等,支持 Retrieve 檢索

以上框架功能可讓您實現常見 AI 應用的快速開發,例如 “通過文檔進行問答” 或 “通過文檔進行聊天” 等。

1.2?Spring AI 項目簡介

Spring AI?項目由 Spring 官方開源并維護的 AI 應用開發框架,該項目目標是簡化包含人工智能(AI)功能的應用程序的開發,避免不必要的復雜性。該項目從著名的 Python 項目(例如 LangChain 和 LlamaIndex)中汲取靈感,但 Spring AI 并非這些項目的直接移植,該項目的成立基于這樣的信念:下一波生成式 AI 應用將不僅面向 Python 開發人員,還將遍及多種編程語言。從本質上講,Spring AI 解決了 AI 集成的基本挑戰:Connecting your enterprise Data and APIs with the AI Models。

二、核心概念

2.1?模型

AI 模型是旨在處理和生成信息的算法,通常模仿人類的認知功能。通過從大型數據集中學習模式和見解,這些模型可以做出預測、文本、圖像或其他輸出,從而增強各個行業的各種應用。

AI 模型有很多種,每種都適用于特定的用例。雖然 ChatGPT 及其生成 AI 功能通過文本輸入和輸出吸引了用戶,但許多模型和公司都提供不同的輸入和輸出。在 ChatGPT 之前,許多人都對文本到圖像的生成模型著迷,例如 Midjourney 和 Stable Diffusion。

Spring AI 目前支持以語言、圖像和音頻形式處理輸入和輸出的模型。上表中的最后一行接受文本作為輸入并輸出數字,通常稱為嵌入文本(Embedding Text),用來表示 AI 模型中使用的內部數據結構。Spring AI 提供了對 Embedding 的支持以支持開發更高級的應用場景。

GPT 等模型的獨特之處在于其預訓練特性,正如 GPT 中的“P”所示——Chat Generative Pre-trained Transformer。這種預訓練功能將 AI 轉變為通用的開發工具,開發者使用這種工具不再需要廣泛的機器學習或模型訓練背景。

2.2?提示(Prompt)

Prompt 作為語言基礎輸入的基礎,指導 AI 模型生成特定的輸出。對于熟悉 ChatGPT 的人來說,Prompt 似乎只是輸入到對話框中的文本,然后發送到 API。然而,它的內涵遠不止于此。在許多 AI 模型中,Prompt 的文本不僅僅是一個簡單的字符串。

ChatGPT 的 API 包含多個文本輸入,每個文本輸入都有其角色。例如,系統角色用于告知模型如何行為并設定交互的背景。還有用戶角色,通常是來自用戶的輸入。

分享 Prompt 已成為一種共同的實踐,且正在進行積極的學術研究。例如,最近的一篇研究論文發現,最有效的 Prompt 之一可以以“深呼吸一下,分步進行此任務”開頭。這表明語言的重要性之高。我們尚未完全了解如何充分利用這一技術的前幾代版本,例如 ChatGPT 3.5,更不用說正在開發的新版本了。

2.3?提示詞模板(Prompt Template)

創建有效的 Prompt 涉及建立請求的上下文,并用用戶輸入的特定值替換請求的部分內容。這個過程使用傳統的基于文本的模板引擎來進行 Prompt 的創建和管理。Spring AI 采用開源庫 StringTemplate 來實現這一目的。

Tell me a {adjective} joke about {content}.

在 Spring AI 中,Prompt 模板可以類比于 Spring MVC 架構中的“視圖”。一個模型對象,通常是 java.util.Map,提供給 Template,以填充模板中的占位符。渲染后的字符串成為傳遞給 AI 模型的 Prompt 的內容。

傳遞給模型的 Prompt 在具體數據格式上有相當大的變化。從最初的簡單字符串開始,Prompt 逐漸演變為包含多條消息的格式,其中每條消息中的每個字符串代表模型的不同角色。

2.4?嵌入(Embedding)

嵌入(Embedding)是文本、圖像或視頻的數值表示,能夠捕捉輸入之間的關系,Embedding 通過將文本、圖像和視頻轉換為稱為向量(Vector)的浮點數數組來工作。這些向量旨在捕捉文本、圖像和視頻的含義,Embedding 數組的長度稱為向量的維度。

通過計算兩個文本片段的向量表示之間的數值距離,應用程序可以確定用于生成嵌入向量的對象之間的相似性。

Embedding 在實際應用中,特別是在檢索增強生成(RAG)模式中,具有重要意義。它們使數據能夠在語義空間中表示為點,這類似于歐幾里得幾何的二維空間,但在更高的維度中。這意味著,就像歐幾里得幾何中平面上的點可以根據其坐標的遠近關系而接近或遠離一樣,在語義空間中,點的接近程度反映了意義的相似性。關于相似主題的句子在這個多維空間中的位置較近,就像圖表上彼此靠近的點。這種接近性有助于文本分類、語義搜索,甚至產品推薦等任務,因為它允許人工智能根據這些點在擴展的語義空間中的“位置”來辨別和分組相關概念。

2.5?Token

token 是 AI 模型工作原理的基石。輸入時,模型將單詞轉換為 token。輸出時,它們將 token 轉換回單詞。

在英語中,一個 token 大約對應一個單詞的 75%。作為參考,莎士比亞的全集總共約 90 萬個單詞,翻譯過來大約有 120 萬個 token。

也許更重要的是 “token = 金錢”。在托管 AI 模型的背景下,您的費用由使用的 token 數量決定。輸入和輸出都會影響總 token 數量。

此外,模型還受到 token 限制,這會限制單個 API 調用中處理的文本量。此閾值通常稱為“上下文窗口”。模型不會處理超出此限制的任何文本。

例如,ChatGPT3 的 token 限制為 4K,而 GPT4 則提供不同的選項,例如 8K、16K 和 32K。Anthropic 的 Claude AI 模型的 token 限制為 100K,而 Meta 的最新研究則產生了 1M token 限制模型。

2.6?結構化輸出(Structured Output)

即使您要求回復為 JSON ,AI 模型的輸出通常也會以?java.lang.String?的形式出現。它可能是正確的 JSON,但它可能并不是你想要的 JSON 數據結構,它只是一個字符串。此外,在提示詞 Prompt 中要求 “返回 JSON” 并非 100% 準確

這種復雜性導致了一個專門領域的出現,涉及創建 Prompt 以產生預期的輸出,然后將生成的簡單字符串轉換為可用于應用程序集成的數據結構。

2.7?檢索增強生成(RAG)

一種稱為檢索增強生成 (RAG) 的技術已經出現,旨在解決為 AI 模型提供額外的知識輸入,以輔助模型更好的回答問題。

該方法涉及批處理式的編程模型,其中涉及到:從文檔中讀取非結構化數據、對其進行轉換、然后將其寫入矢量數據庫。從高層次上講,這是一個 ETL(提取、轉換和加載)管道。矢量數據庫則用于 RAG 技術的檢索部分。

在將非結構化數據加載到矢量數據庫的過程中,最重要的轉換之一是將原始文檔拆分成較小的部分。將原始文檔拆分成較小部分的過程有兩個重要步驟:

  1. 將文檔拆分成幾部分,同時保留內容的語義邊界。例如,對于包含段落和表格的文檔,應避免在段落或表格中間拆分文檔;對于代碼,應避免在方法實現的中間拆分代碼。
  2. 將文檔的各部分進一步拆分成大小僅為 AI 模型令牌 token 限制的一小部分的部分。

RAG 的下一個階段是處理用戶輸入。當用戶的問題需要由 AI 模型回答時,問題和所有“類似”的文檔片段都會被放入發送給 AI 模型的提示中。這就是使用矢量數據庫的原因,它非常擅長查找具有一定相似度的“類似”內容。

2.8?函數調用(Function Calling)

大型語言模型 (LLM) 在訓練后即被凍結,導致知識陳舊,并且無法訪問或修改外部數據。

Function Calling機制解決了這些缺點,它允許您注冊自己的函數,以將大型語言模型連接到外部系統的 API。這些系統可以為 LLM 提供實時數據并代表它們執行數據處理操作。

Spring AI 大大簡化了您需要編寫的代碼以支持函數調用。它為您處理函數調用對話。您可以將函數作為提供,@Bean然后在提示選項中提供該函數的 bean 名稱以激活該函數。此外,您可以在單個提示中定義和引用多個函數。

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

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

相關文章

從main()函數的執行發散開來

大多數程序員的第一行代碼可能都是從輸出“Hello&#xff0c;World!開始的吧。如果請你寫一個c程序&#xff0c;在屏幕上打印“Hello&#xff0c;World!”&#xff0c;下面的代碼對擁有扎實編程基本功的你而言肯定so easy&#xff1a; #include <stdio.h>int main() {pr…

(16)java+ selenium->自動化測試-元素定位之By xpath下篇

1.簡介 老規矩,我們還是接著前面兩篇的Xpath 5.自動測試實戰 以百度首頁為例,將xpath的各種定位方法一一講解和分享一下。 5.1大致步驟 1.訪問百度首頁。 2.通過xpath定位到元素,點擊一下。 5.2模糊定位starts-with關鍵字 有一種特殊的情況:頁面元素的屬性值會被動態…

45-Oracle 索引的新建與重建

小伙們日常里有沒有被業務和BOSS要求新建索引或是重建索引&#xff1f;他們都想著既快又穩&#xff0c;那么索引在在Oracle上如何實現、新建、重建。原則是什么&#xff1a; 1、新建索引&#xff0c;查詢是否高頻且慢&#xff0c;索引列是否高選擇性&#xff0c;新增索引對寫負…

使用 Rust Clippy 的詳細方案

使用 Rust Clippy 的詳細方案 Rust Clippy 是一個強大的靜態分析工具&#xff0c;幫助開發者識別代碼中的潛在問題并改善代碼質量。以下是如何充分利用 Clippy 的方法&#xff1a; 安裝 Clippy 確保 Rust 工具鏈已安裝。通過以下命令安裝 Clippy&#xff1a; rustup compon…

21.什么是JSBridge(1)

1.Native與H5交互的常用交互機制&#xff0c;主流選擇是jsbridge 2.jsbridge是什么&#xff1f; JSBridge 是 Android 官方 WebView 提供的 addJavascriptInterface() 能力 項目方&#xff08;或三方庫&#xff09;封裝的橋梁通信協議。 底層機制由 Android 官方 WebView 提…

什么是Flink

Apache Flink&#xff1a;流批一體的大數據處理引擎 什么是Apache Flink&#xff1f; Apache Flink是一個開源的分布式流處理框架&#xff0c;最初由柏林工業大學開發&#xff0c;后成為Apache軟件基金會的頂級項目。它能夠以高吞吐、低延遲的方式處理無界數據流(流處理)和有…

區塊鏈+智能合約如何解決上門按摩行業的信任問題?——App開發案例

你是不是覺得上門按摩市場已經人滿為患&#xff1f;擔心自己入局太晚或者缺乏行業經驗&#xff1f;一組真實數據可能會讓你改變看法&#xff1a;全國按摩服務需求正以月均8%的速度迅猛增長&#xff0c;但專業技師的供給量僅能跟上5%的增幅&#xff01;這意味著每個月都有相當于…

修改windows hosts文件的軟件

修改hosts文件的軟件推薦及使用教程 這個軟件我用了10多年 推薦工具&#xff1a;Hosts Host軟件不用安裝綠色 如何使用 注意事項 如何沒有安裝.net 3.5 請根據提示安裝就可以了 內容綁定了軟件下載資源&#xff0c;在頂部有需要的自己取

Java web非Maven項目中引入EasyExcel踩坑記錄

最近在幫朋友在老項目上做二次開發&#xff0c;有讀取Excel的需求&#xff0c;習慣性的引入了EasyExcel&#xff0c;但是出現了很多問題&#xff0c;最主要就是jar包的問題,需要依賴的jar包版本問題 項目技術棧&#xff1a; tomcat9 Amazon Corretto JDK 8 (亞馬遜的openJDK…

Flutter——數據庫Drift開發詳細教程(七)

目錄 入門設置 漂移文件入門變量數組定義表支持的列類型漂移特有的功能 導入嵌套結果LIST子查詢Dart 互操作SQL 中的 Dart 組件類型轉換器現有的行類Dart 文檔注釋 結果類名稱支持的語句 入門 Drift 提供了一個dart_api來定義表和編寫 SQL 查詢。尤其當您已經熟悉 SQL 時&#…

【排坑指南】MySQL初始化后,Nacos與微服務無法連接??

Date&#xff1a;2025/06/18 你好&#xff01; 今天&#xff0c;分享一個工作中遇到的一個 MySQL 問題。在這之前都不知道是 MySQL 的問題&#xff0c;特離譜&#xff01; 昨天和今天大多數時間都用來處理了這一個問題&#xff1a;《MySQL進行了數據庫初始化之后&#xff0c…

springboot獲取工程目錄

在springboot中使用ApplicationHome獲取工程所在目錄的時候&#xff0c;開發環境和生產運行環境輸出的目錄是不同的&#xff0c;開發環境到target/classes目錄&#xff0c;而生產運行則是需要的wzkj-server.jar所在目錄 ApplicationHome home new ApplicationHome(CollectTas…

深入ZGC并發處理的原理

大型Java應用的核心痛點之一&#xff1a;當JVM進行垃圾回收時強制程序暫停&#xff08;STW&#xff09;的代價。在要求低延遲的應用場景——高頻交易系統、實時在線服務或全球性大型平臺——中&#xff0c;這種"時空靜止"的成本可能極高。但JDK從16版本&#xff08;生…

配置DHCP服務(小白的“升級打怪”成長之路)

目錄 項目前準備 一、DHCP服務器配置&#xff08;Rocky8&#xff09; 1&#xff0c;關閉防火墻、安全上下文 2、配置網卡文件 3、安裝hdcp-server 4、配置dhcp服務 5、重啟dhcp服務 二、配置路由器 1、添加兩塊網卡并更改網卡配置文件 2、配置路由功能 3、掛載本地鏡…

云原生安全

云原生 | T Wiki 以下大部分內容參考了這篇文章 什么是云原生 云原生&#xff08;Cloud Native&#xff09; “云原生”可以從字面上拆解為“云”和“原生”兩個部分來理解&#xff1a; “云”&#xff0c;是相對于“本地”而言的。傳統應用部署在本地數據中心或物理服務器…

rapidocr v3.2.0發布

粗略更新日志 rapidocr v3.2.0 發布了。令我感到很開心的是&#xff1a;有 3 個小伙伴提了 PR&#xff0c;他們積極參與了進來。 更新要點如下&#xff1a; 采納了小伙伴qianliyx 的建議&#xff0c;按照行返回單字坐標&#xff1a;同一行的單字坐標是在同一個 tuple 中的。…

Java 操作數類型沖突: varbinary 與 real 不兼容, Java中BigDecimal與SQL Server real類型沖突解決方案

要解決Java中BigDecimal類型與SQL Server中real類型沖突導致的varbinary與real不兼容錯誤&#xff0c;請按以下步驟操作&#xff1a; 錯誤原因分析 類型映射錯誤&#xff1a;JDBC驅動嘗試將BigDecimal轉換為varbinary&#xff08;二進制類型&#xff09;&#xff0c;而非目標字…

25.多子句查詢

MySQL 中包含 GROUP BY、HAVING、ORDER BY、LIMIT 時的查詢語法規則及應用&#xff0c;核心知識總結如下&#xff1a; 1.語法順序規則 當 SELECT 語句同時包含 GROUP BY、HAVING、ORDER BY、LIMIT 時&#xff0c;執行順序為&#xff1a; GROUP BY → HAVING → ORDER BY → L…

Vue3 × DataV:三步上手炫酷數據可視化組件庫

DataV&#xff08;kjgl77/datav-vue3&#xff09;是專為“大屏可視化”場景打造的 Vue3 組件庫&#xff0c;提供邊框、裝飾、等數十個開箱即用的視覺組件。本文聚焦 “在 Vue3 項目中如何正確使用 DataV”&#xff0c;從安裝、全局注冊到常見坑點&#xff0c;帶你迅速玩轉這款酷…

本地KMS服務器激活常用命令

OpenWRT內置了KMS激活的相關服務&#xff0c;配置后需要電腦本地切換到該KMS服務。相關命令如下&#xff1a; 基本功能與定義? slmgr是Windows內置的軟件授權管理工具&#xff0c;全稱為Software License Manager。其核心功能包括產品密鑰安裝/卸載、許可證信息查詢、KMS服務器…