LLamaWorker 是一個基於 LLamaSharp 計畫開發的 HTTP API 伺服器。它提供與 OpenAI 相容的 API,使得開發者可以輕松地將大型語言模型(LLM)整合到自己的應用程式中。
1. 背景
在人工智慧領域,大型語言模型(LLM)正在以其強大的自然語言處理能力改變遊戲規則。隨著技術的進步,越來越多的開發者希望將這些模型整合到自己的應用程式中。為了滿足這一需求,我開發了 LLamaWorker,一個基於 LLamaSharp [1] 計畫的 ASP.NET Web API 服務。LLamaWorker 提供了與 OpenAI 相容的 API,可以方便地接入其他應用程式,例如 Semantic Kernel 等相關框架或是禪道AI助手等需要接入AI服務的套用。
LLamaWorker 計畫地址:https://github.com/sangyuxiaowu/LLamaWorker?wt.mc_id=DT-MVP-5005195
2. LLamaWorker 的特色
LLamaWorker 的設計初衷是為了使開發者能夠輕松、高效地將大型語言模型整合到各種套用中。以下是它的一些核心特性:
• 相容 OpenAI API :LLamaWorker 提供了與 OpenAI 類似的 API,使得從 OpenAI 平台遷移至使用自己托管的模型變得無縫且便捷。 • 多模型支持 :無論您的需求是文本生成、對話系統還是文本嵌入,LLamaWorker 都能夠支持配置和切換不同的模型,滿足您的不同場景需求。 • 流式響應 :對於大型響應內容,LLamaWorker 支持流式響應,極大提高了處理效率和使用者體驗。 • 嵌入支持 :除了文本生成和處理,LLamaWorker 還提供了文本嵌入功能,支持開啟模型的嵌入生成,同時也支持轉發嵌入請求到其他模型服務。 • 對話模版 :為了幫助開發者更快地實作套用,LLamaWorker 還提供了一些常見的對話模版。 • 自動釋放 : 支持自動釋放已載入模型。 • API Key 認證 : 支持 API Key 認證。 • Gradio UI Demo : 提供了一個基於 Gradio.NET 的 UI 演示。
3. 快速開始
LLamaWorker 主要面向 .NET 開發者,要開始使用 LLamaWorker,您只需要幾個簡單的步驟:
1. 複制倉庫到本地
git clone https://github.com/sangyuxiaowu/LLamaWorker.git
2. 進入計畫目錄
cd LLamaWorker
3. 根據您的需求選擇計畫檔。計畫提供了三個版本的計畫檔:
•
LLamaWorker
:適用於 CPU 環境。
•
LLamaWorker_Cuad11
:適用於搭載 CUDA 11 的 GPU 環境。
•
LLamaWorker_Cuad12
:適用於搭載 CUDA 12 的 GPU 環境。
選擇適合您環境的計畫檔進行下一步。
4. 安裝依賴項
dotnet restore LLamaWorker\LLamaWorker.csproj
如果您使用的是 CUDA 版本,請替換計畫檔名。
5.
修改配置檔
appsettings.json
。預設配置已包含一些常見的開源模型配置,您只需按需修改模型檔路徑(
ModelPath
)即可。
6.
啟動伺服器
dotnet run --project LLamaWorker\LLamaWorker.csproj
如果您使用的是 CUDA 版本,請替換計畫檔名。
如果你以偵錯模式啟動,即可在瀏覽器中開啟 swagger 頁面檢視 API 文件。
4. 配件檔介紹
LLamaWorker 配置檔內容如下:
{
"AutoReleaseTime": 0,
"ApiKey":"",
"LLmModelSettings": [
],
"EmbedingForward": "http://127.0.0.1:5000/embeddings"
}
•
AutoReleaseTime
:自動釋放時間,分鐘。0 表示不自動釋放。
•
ApiKey
:API 金鑰,預設為空,即不需要 API 金鑰。
•
LLmModelSettings
:模型配置。
•
EmbedingForward
:嵌入轉發地址。
在 LLamaWorker 計畫的
appsettings.json
已經提供了一些常見的開源模型配置檔,您可以根據自己的需求選擇合適的模型,以下是 Qwen2 的配置範例:
{
"Name": "qwen2_7b",
"Description": "通義千問 v2 7b instruct q5_k_m",
"Version": "2",
"WebSite": "https://github.com/QwenLM/Qwen2",
// 系統角色提示詞,未指定時使用預設配置,可配置為空,則不自動添加
"SystemPrompt": "You are a helpful assistant",
// LLm ModelParams, LLamaSharp 的模型參數
"ModelParams": {
"ModelPath": "H:\\workspace\\gpt\\models\\qwen2-7b-instruct-q5_k_m.gguf",
"ContextSize": 32768,
"Seed": 1337,
"GpuLayerCount": 50,
"FlashAttention": true, // 是否啟用快閃記憶體註意力,註意 qwen2 模型需要啟用
"Embeddings": true// 是否啟用嵌入
},
"AntiPrompts": [ "<|im_start|>", "<|im_end|>" ],
"WithTransform": { // 對話模版選擇類
"HistoryTransform": "LLamaWorker.Transform.BaseHistoryTransform",
"OutputTransform": "LLamaWorker.Transform.BaseTextStreamTransform"
}
}
5. API 參考
LLamaWorker 除了提供OpenAI常用的
chat
和
completions
、
embeddings
介面外,還提供了一些其他介面,例如:
•
/models/info
: 返回模型的基本資訊
•
/models/config
: 返回已配置的模型資訊
•
/models/{modelId}/switch
: 切換到指定模型
6. ChatUI
LLamaWorker 提供了一個基於 Gradio.NET [2] 的 ChatUI 計畫。透過這個計畫你可以方便的與大模型進行互動測試。
在啟用 LLamaWorker 計畫後,你也可以透過執行以下命令嘗試 Gradio UI 演示:
dotnet restore ChatUI\ChatUI.csproj
dotnet run --project ChatUI\ChatUI.csproj
然後開啟瀏覽器存取 Gradio UI 演示。
6. 結語
LLamaWorker 計畫的目標是為開發者社群提供一個高效能、易於使用的工具,以便更好地利用大型語言模型的能力。無論您是在構建聊天機器人、內容生成工具還是任何需要自然語言處理能力的套用,LLamaWorker 都能為您提供強大的支持。
我非常期待看到社群成員如何使用 LLamaWorker 來實作他們的創意和計畫。如果您對 LLamaWorker 有任何反饋或建議,歡迎透過 GitHub Issues 或 Pull Requests 與我交流。讓我們一起推動開源社群的發展,解鎖更多的可能性!
References
[1]
LLamaSharp:
https://github.com/SciSharp/LLamaSharp?wt.mc_id=DT-MVP-5005195
[2]
Gradio.NET:
https://github.com/feiyun0112/Gradio.Net?wt.mc_id=DT-MVP-5005195