當前位置: 妍妍網 > 碼農

探索 LLamaWorker:基於LLamaSharp的.NET本地大模型服務

2024-06-27碼農

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 文件。

swagger

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.csprojdotnet run --project ChatUI\ChatUI.csproj

然後開啟瀏覽器存取 Gradio UI 演示。

ChatUI

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