AI 概念
本節描述了 Spring AI 使用的核心概念。我們建議仔細閱讀以理解 Spring AI 實現背後的思想。
模型
AI 模型是旨在處理和生成資訊的演算法,通常模仿人類認知功能。透過從大型資料集中學習模式和見解,這些模型可以進行預測,生成文字、影像或其他輸出,從而增強各行業的各種應用。
AI 模型有許多不同的型別,每種都適用於特定的用例。雖然 ChatGPT 及其生成式 AI 功能透過文字輸入和輸出吸引了使用者,但許多模型和公司提供了多樣化的輸入和輸出。在 ChatGPT 之前,許多人對文字到影像生成模型如 Midjourney 和 Stable Diffusion 感到著迷。
下表根據模型的輸入和輸出型別對其進行了分類。
Spring AI 目前支援處理語言、影像和音訊作為輸入和輸出的模型。上表中最後一行,接受文字作為輸入並輸出數字的,通常被稱為嵌入文字,它代表了 AI 模型中使用的內部資料結構。Spring AI 支援嵌入以實現更高階的用例。
像 GPT 這樣的模型之所以與眾不同,是因為它們的預訓練特性,正如 GPT 中的“P”所指——Chat Generative Pre-trained Transformer(聊天生成型預訓練變換模型)。這種預訓練特性將 AI 轉化為一種通用的開發工具,無需廣泛的機器學習或模型訓練背景。
提示
提示是基於語言的輸入的基礎,它們引導 AI 模型生成特定的輸出。對於熟悉 ChatGPT 的人來說,提示可能看起來只是輸入到對話方塊中併發送到 API 的文字。然而,它包含的遠不止這些。在許多 AI 模型中,提示的文字不僅僅是一個簡單的字串。
ChatGPT 的 API 在一個提示中有多個文字輸入,每個文字輸入都被分配了一個角色。例如,有系統角色,它告訴模型如何行為併為互動設定上下文。還有使用者角色,通常是來自使用者的輸入。
精心設計有效的提示既是一門藝術,也是一門科學。ChatGPT 是為人類對話而設計的。這與使用 SQL “提問”有很大的不同。必須像與另一個人交談一樣與 AI 模型進行交流。
這種互動風格的重要性使得“提示工程”成為一個獨立的學科。目前有大量技術可以提高提示的有效性。投入時間製作提示可以大大改善最終輸出。
分享提示已成為一種常見的做法,並且正在對此主題進行積極的學術研究。作為一個說明建立有效提示(例如,與 SQL 對比)如何違反直覺的例子,一篇最近的研究論文發現,最有效的提示之一以“深呼吸,一步步來”這句話開頭。這應該能讓你明白語言為何如此重要。我們尚未完全理解如何最有效地利用這項技術的早期迭代,例如 ChatGPT 3.5,更不用說正在開發的新版本了。
提示模板
建立有效提示涉及建立請求的上下文,並用使用者輸入特定的值替換請求的部分。
此過程使用傳統的基於文字的模板引擎進行提示建立和管理。Spring AI 為此目的採用了 OSS 庫 StringTemplate。
例如,考慮這個簡單的提示模板:
Tell me a {adjective} joke about {content}.
在 Spring AI 中,提示模板可以比作 Spring MVC 架構中的“檢視”。提供一個模型物件,通常是 java.util.Map,用於填充模板中的佔位符。“渲染”的字串成為提供給 AI 模型的提示內容。
傳送到模型的提示的具體資料格式存在相當大的差異。最初作為簡單的字串開始,提示已經發展到包含多條訊息,其中每條訊息中的每個字串都代表模型的不同角色。
嵌入
嵌入是文字、影像或影片的數值表示,用於捕獲輸入之間的關係。
嵌入透過將文字、影像和影片轉換為浮點數陣列(稱為向量)來工作。這些向量旨在捕獲文字、影像和影片的含義。嵌入陣列的長度稱為向量的維度。
透過計算兩個文字的向量表示之間的數值距離,應用程式可以確定用於生成嵌入向量的物件之間的相似性。
作為一名探索 AI 的 Java 開發人員,不必理解這些向量表示背後的複雜數學理論或具體實現。對它們在 AI 系統中的作用和功能有一個基本瞭解就足夠了,尤其是在將 AI 功能整合到應用程式中時。
嵌入在檢索增強生成(RAG)模式等實際應用中特別重要。它們能夠將資料表示為語義空間中的點,這類似於歐幾里得幾何的二維空間,但在更高的維度中。這意味著,就像歐幾里得幾何中平面上的點可以根據它們的座標接近或遠離一樣,在語義空間中,點的接近反映了意義上的相似性。關於相似主題的句子在這個多維空間中位置更接近,就像圖表上相互靠近的點一樣。這種接近性有助於文字分類、語義搜尋,甚至是產品推薦等任務,因為它允許 AI 根據這些擴充套件語義景觀中的“位置”來識別和分組相關概念。
您可以將此語義空間視為一個向量。
Token(令牌)
Token 是 AI 模型工作方式的基本組成部分。在輸入時,模型將單詞轉換為 token。在輸出時,它們將 token 轉換回單詞。
在英語中,一個 token 大致相當於一個單詞的 75%。作為參考,莎士比亞的全部作品,總計約 90 萬字,大約轉換為 120 萬個 token。
更重要的是,Tokens = 金錢。在託管 AI 模型的背景下,您的費用取決於使用的 token 數量。輸入和輸出都計入總 token 數量。
此外,模型受 token 限制,這限制了單個 API 呼叫中處理的文字量。這個閾值通常被稱為“上下文視窗”。模型不會處理任何超出此限制的文字。
例如,ChatGPT3 有 4K token 限制,而 GPT4 提供不同的選項,例如 8K、16K 和 32K。Anthropic 的 Claude AI 模型具有 100K token 限制,Meta 最近的研究產生了一個 1M token 限制的模型。
要用 GPT4 總結莎士比亞的全部作品,您需要設計軟體工程策略來切分資料,並在模型的上下文視窗限制內呈現資料。Spring AI 專案可以幫助您完成這項任務。
結構化輸出
AI 模型的輸出傳統上以 java.lang.String 的形式出現,即使您要求回覆是 JSON 格式。它可能是一個正確的 JSON,但它不是 JSON 資料結構。它只是一個字串。此外,在提示中要求“JSON”並不是 100% 準確。
這種複雜性導致了一個專業領域的出現,涉及建立提示以產生預期的輸出,然後將生成的簡單字串轉換為可用於應用程式整合的可用資料結構。
結構化輸出轉換採用精心製作的提示,通常需要與模型進行多次互動才能實現所需的格式。
將您的資料和 API 帶到 AI 模型
您如何為 AI 模型提供它尚未訓練過的資訊?
請注意,GPT 3.5/4.0 資料集僅延伸到 2021 年 9 月。因此,模型表示它不知道需要此日期之後知識的問題的答案。一個有趣的瑣事是,這個資料集大約有 650GB。
有三種技術可以自定義 AI 模型以納入您的資料
-
微調:這種傳統的機器學習技術涉及調整模型並更改其內部權重。然而,對於機器學習專家來說,這是一個具有挑戰性的過程,對於像 GPT 這樣規模的模型來說,計算資源消耗極大。此外,有些模型可能不提供此選項。
-
提示填充:一種更實用的替代方法是將您的資料嵌入到提供給模型的提示中。鑑於模型的 Token 限制,需要採用技術在模型的上下文視窗中呈現相關資料。這種方法通俗地稱為“填充提示”。Spring AI 庫可幫助您實現基於“填充提示”技術(又稱檢索增強生成(RAG))的解決方案。
檢索增強生成
一種稱為檢索增強生成(RAG)的技術已經出現,以解決將相關資料整合到提示中以實現準確 AI 模型響應的挑戰。
該方法涉及批處理風格的程式設計模型,其中作業從文件中讀取非結構化資料,對其進行轉換,然後將其寫入向量資料庫。從高層次來看,這是一個 ETL(提取、轉換和載入)管道。向量資料庫用於 RAG 技術的檢索部分。
在將非結構化資料載入到向量資料庫的過程中,最重要的轉換之一是將原始文件分成更小的片段。將原始文件分成更小片段的過程包括兩個重要步驟:
-
在保持內容語義邊界的同時將文件分成多個部分。例如,對於包含段落和表格的文件,應避免在段落或表格中間分割文件。對於程式碼,應避免在方法實現中間分割程式碼。
-
將文件的各個部分進一步分割成大小僅佔 AI 模型 token 限制一小部分的部分。
RAG 的下一階段是處理使用者輸入。當 AI 模型需要回答使用者問題時,問題和所有“相似”的文件片段都會被放入傳送給 AI 模型的提示中。這就是使用向量資料庫的原因。它非常擅長查詢相似內容。
-
ETL 管道提供了更多關於協調從資料來源提取資料並將其儲存在結構化向量儲存中的資訊,確保資料以最佳格式進行檢索,以便將其傳遞給 AI 模型。
-
ChatClient - RAG 解釋瞭如何使用
QuestionAnswerAdvisor在您的應用程式中啟用 RAG 功能。
工具呼叫
大型語言模型(LLM)在訓練後是固定的,導致知識陳舊,並且無法訪問或修改外部資料。
工具呼叫機制解決了這些缺點。它允許您將自己的服務註冊為工具,以將大型語言模型連線到外部系統的 API。這些系統可以為 LLM 提供即時資料,並代表它們執行資料處理操作。
Spring AI 極大地簡化了您為支援工具呼叫而需要編寫的程式碼。它為您處理工具呼叫對話。您可以將您的工具作為帶 @Tool 註解的方法提供,並在您的提示選項中提供它,以使其可供模型使用。此外,您可以在單個提示中定義和引用多個工具。
-
當我們要使某個工具可供模型使用時,我們會將其定義包含在聊天請求中。每個工具定義都包含名稱、描述和輸入引數的模式。
-
當模型決定呼叫工具時,它會發送一個響應,其中包含工具名稱和根據定義模式建模的輸入引數。
-
應用程式負責使用工具名稱識別並執行帶有提供的輸入引數的工具。
-
工具呼叫的結果由應用程式處理。
-
應用程式將工具呼叫結果傳送回模型。
-
模型使用工具呼叫結果作為附加上下文生成最終響應。
請遵循工具呼叫文件以獲取有關如何將此功能與不同 AI 模型一起使用的更多資訊。
評估 AI 響應
有效評估 AI 系統響應使用者請求的輸出對於確保最終應用程式的準確性和實用性至關重要。一些新興技術允許使用預訓練模型本身來實現此目的。
此評估過程涉及分析生成的響應是否符合使用者意圖和查詢上下文。相關性、連貫性和事實正確性等指標用於衡量 AI 生成響應的質量。
一種方法是將使用者的請求和 AI 模型的響應都呈現給模型,查詢響應是否與提供的資料一致。
此外,利用儲存在向量資料庫中的資訊作為補充資料可以增強評估過程,有助於確定響應的相關性。
Spring AI 專案提供了 Evaluator API,目前可訪問評估模型響應的基本策略。請遵循評估測試文件以獲取更多資訊。