譯者 | 陳峻
審校 | 重樓
最近,我們實施了一個定制化的人工智能(AI)項目。鑒于甲方持有著非常敏感的客戶信息,為了安全起見,我們不能將它們傳遞給OpenAI或其他專有模型。因此,我們在AWS虛擬機中下載并運行了一個開源的AI模型,使之完全處于我們的控制之下。同時,Rails應用可以在安全的環(huán)境中,對AI進行API調(diào)用。當然,如果不必考慮安全問題,我們更傾向于直接與OpenAI合作。
下面,我將和大家分享如何在本地下載開源的AI模型,讓它運行起來,以及如何針對其運行Ruby腳本。
為什么要定制?
這個項目背后的原因很簡單:數(shù)據(jù)安全。在處理敏感的客戶信息時,最安全的方法往往是在公司內(nèi)部進行。為此,我們需要定制化的AI模型,來提供更高級別的安全控制和隱私保護。
開源模式
在過去的6個月里,市場上出現(xiàn)了諸如:Mistral、Mixtral和Lama等大量開源的AI模型。它們雖然沒有GPT-4那么強大,但是其中不少模型的性能已經(jīng)超過了GPT-3.5,而且隨著時間的推移,它們會越來越強。當然,該選用哪種模型,則完全取決于您的處理能力和需要實現(xiàn)的目標。
由于我們將在本地運行AI模型,因此選擇了大小約為4GB的Mistral。它在大多數(shù)指標上都優(yōu)于GPT-3.5。盡管Mixtral的性能優(yōu)于Mistral,但它是一個龐大的模型,至少需要48GB內(nèi)存才能運行。
參數(shù)
在談論大語言模型(LLM)時,我們往往會考慮提到它們的參數(shù)大小。在此,我們將在本地運行的Mistral模型是一個70億參數(shù)的模型(當然,Mixtral擁有700億個參數(shù),而GPT-3.5大約有1750億個參數(shù))。
大語言模型通常需要基于神經(jīng)網(wǎng)絡。而神經(jīng)網(wǎng)絡是神經(jīng)元的集合,每個神經(jīng)元都會連接到下一層的所有其他神經(jīng)元上。
如上圖所示,每個連接都有一個權重,通常用百分比表示。每個神經(jīng)元還有一個偏差(bias),當數(shù)據(jù)通過某個節(jié)點時,偏差會對數(shù)據(jù)進行修正。
神經(jīng)網(wǎng)絡的目的是要“學到”一種先進的算法、一種模式匹配的算法。通過在大量文本中接受訓練,它將逐漸學會預測文本模式的能力,進而對我們給出的提示做出有意義的回應。簡單而言,參數(shù)就是模型中權重和偏差的數(shù)量。它可以讓我們了解神經(jīng)網(wǎng)絡中有多少個神經(jīng)元。例如,對于一個70億參數(shù)的模型來說,大約有100層,每層都有數(shù)千個神經(jīng)元。
在本地運行模型
要在本地運行開源模型,首先必須下載相關應用。雖然市場上有多種選擇,但是我發(fā)現(xiàn)最簡單,也便于在英特爾Mac上運行的是Ollama。
雖然Ollama目前只能在Mac和Linux上運行,不過它未來還能運行在Windows上。當然,您可以在Windows上使用WSL(Windows Subsystem for Linux)來運行Linux shell。
Ollama不但允許您下載并運行各種開源模型,而且會在本地端口上打開模型,讓您能夠通過Ruby代碼進行API調(diào)用。這便方便了Ruby開發(fā)者編寫能夠與本地模型相集成的Ruby應用。
獲取Ollama
由于Ollama主要基于命令行,因此在Mac和Linux系統(tǒng)上安裝Ollama非常簡單。您只需通過鏈接https://olama.ai/下載Ollama,花5分鐘左右時間安裝軟件包,再運行模型即可。
安裝首個模型
在設置并運行Ollama之后,您將在瀏覽器的任務欄中看到Ollama圖標。這意味著它正在后臺運行,并可運行您的模型。為了下載模型,您可以打開終端并運行如下命令:
ollama run mistral
由于Mistral約有4GB大小,因此您需要花一段時間完成下載。下載完成后,它將自動打開Ollama提示符,以便您與Mistral進行交互和通信。
下一次您再通過Ollama運行mistral時,便可直接運行相應的模型了。
定制模型
類似我們在OpenAI中創(chuàng)建自定義的GPT,通過Ollama,您可以對基礎模型進行定制。在此,我們可以簡單地創(chuàng)建一個自定義的模型。更多詳細案例,請參考Ollama的聯(lián)機文檔。
首先,您可以創(chuàng)建一個Modelfile(模型文件),并在其中添加如下文本:
FROM mistral
# Set the temperature set the randomness or creativity of the response
PARAMETER temperature 0.3
# Set the system message
SYSTEM ”””
You are an excerpt Ruby developer.
You will be asked questions about the Ruby Programming
language.
You will provide an explanation along with code examples.
”””
上面出現(xiàn)的系統(tǒng)消息是AI模型做出特定反應的基礎。
接著,您可以在終端上運行如下命令,以創(chuàng)建新的模型:
ollama create <model-name> -f './Modelfile
在我們的項目案例中,我將該模型命名為Ruby。
ollama create ruby -f './Modelfile'
同時,您可以使用如下命令羅列顯示自己的現(xiàn)有模型:
ollama list
至此,您可以用如下命令運行自定義的模型了:
Ollama run ruby
與Ruby集成
雖然Ollama尚沒有專用的gem,但是Ruby開發(fā)人員可以使用基本的HTTP請求方法與模型進行交互。在后臺運行的Ollama可以通過11434端口打開模型,因此您可以通過“http://localhost:11434”訪問它。此外,OllamaAPI的文檔也為聊天對話和創(chuàng)建嵌入等基本命令提供了不同的端點。
在本項目案例中,我們希望使用/api/chat端點向AI模型發(fā)送提示。下圖展示了一些與模型交互的基本Ruby代碼:
上述Ruby代碼段的功能包括:
- 通過“net/http”、“uri”和“json”三個庫,分別執(zhí)行HTTP請求、解析URI和處理JSON數(shù)據(jù)。
- 創(chuàng)建包含API端點地址(http://localhost:11434/api/chat)的URI對象。
- 使用以URI為參數(shù)的Net::HTTP::Post.new方法,創(chuàng)建新的HTTP POST請求。請求的內(nèi)容類型設置為“application/json”。
- 請求的正文被設置為一個代表了哈希值的JSON字符串。該哈希值包含了三個鍵:“模型”、“消息”和“流”。其中,模型鍵被設置為“ruby”,也就是我們的模型;消息鍵被設置為一個數(shù)組,其中包含了代表用戶消息的單個哈希值;而流鍵被設置為false。
- 系統(tǒng)引導模型該如何回應信息。我們已經(jīng)在Modelfile中予以了設置。用戶信息是我們的標準提示。模型會以輔助信息作出回應。消息哈希遵循與AI模型交叉的模式。它帶有一個角色和內(nèi)容。此處的角色可以是系統(tǒng)、用戶和輔助。
- HTTP請求使用Net::HTTP.start方法被發(fā)送。該方法會打開與指定主機名和端口的網(wǎng)絡連接,然后發(fā)送請求。連接的讀取超時時間被設置為120秒,畢竟我運行的是2019款英特爾Mac,所以響應速度可能有點慢。而在相應的AWS服務器上運行時,這將不是問題。
- 服務器的響應被存儲在“response”變量中。
案例小結
如上所述,運行本地AI模型的真正價值體現(xiàn)在,協(xié)助持有敏感數(shù)據(jù)的公司,處理電子郵件或文檔等非結構化的數(shù)據(jù),并提取有價值的結構化信息。在我們參加的項目案例中,我們對客戶關系管理(CRM)系統(tǒng)中的所有客戶信息進行了模型培訓。據(jù)此,用戶可以詢問其任何有關客戶的問題,而無需翻閱數(shù)百份記錄。
譯者介紹
陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風險實施管控,專注傳播網(wǎng)絡與信息安全知識與經(jīng)驗。
原文標題:How To Run Open-Source AI Models Locally With Ruby,作者:Kane Hooper