Use a Simple Web Wrapper to Share the Local DeepSeek-R1 Model Service to LAN Users

  liuyuancheng        2025-03-03 00:55:05       327        0          English  简体中文  繁体中文  ภาษาไทย  Tiếng Việt 

title15.png

在前一篇文章Deploying DeepSeek-R1 Locally with a Custom RAG Knowledge Data Base中,我們詳細介紹了如何在配備 RTX3060 的桌上型電腦上,使用客製化的 RAG 知識庫在本機部署 DeepSeek-R1:7b 的步驟。一旦 LLM deepseek-r1:7b 在本機配備 GPU 的電腦上運行,就會出現一個新的挑戰:我們只能在 GPU 電腦上使用 LLM 服務,如果我們想從 LAN 中的其他裝置使用它該怎麼辦?有沒有辦法可以從行動裝置存取它,或與同一網路中的其他電腦分享此服務?預設情況下,Ollama 只會將其 API 開放給 localhost,這表示 LAN 中的外部裝置無法輕易地與模型互動。變更組態以完全公開 API 可能可以解決連線問題,但同時也會移除限制潛在風險操作(例如建立完整的對話鏈)的保護措施。使用者需要一個受控的介面,可以:

  • 限制僅存取必要的功能(例如,傳送問題和接收回應)。

  • 為行動裝置提供直觀的網頁介面。

  • 啟用具有受控存取的程式化 API 呼叫。

  • 作為連接到多個 GPU 伺服器和不同 DeepSeek LLM 版本的中央樞紐。

# Created:     2025/02/28
# version:     v_0.0.1
# Copyright:   Copyright (c) 2025 LiuYuancheng
# License:     MIT License

簡介

本文概述了 Flask 封裝器,探討了實際的使用案例情境,並說明如何設定 Ollama 以公開 LLM API 呼叫的服務。我們將探討一個簡單的基於 Python-Flask 的 Web 封裝器如何作為本機 LLM 服務 (deepseek-r1) 和 LAN 使用者之間的受控「橋樑」,並滿足以下五個請求:

  • 連接子網路中運行不同 DeepSeek LLM 版本的多個本機 GPU 伺服器。

  • 限制或過濾 LAN 使用者的 Ollama API 存取。

  • 啟用 LLM 回應的遠端測試和效能比較。

  • 提供對特殊/微調模型的受控存取,而無需公開伺服器憑證。

  • 透過在提交模型之前修改使用者查詢來促進提示工程。

透過實作此 Web 封裝器,使用者可以透過使用者友好的介面安全地、受控地存取 DeepSeek-R1 模型,該介面適用於基於 Web 的互動和程式化互動。


DeepSeek Flask Web 封裝器簡介

此應用程式提供了一個使用者友好的介面,用於遠端存取在不同 GPU 上運行的多個 LLM 模型(使用 Ollama 託管模型)。聊天機器人旨在用於以下目的:

  • 測試 GPU 託管的 Ollama LLM 實例的功能。

  • 允許共享存取專門的 LLM(微調或 RAG 嵌入),而無需直接 SSH 存取。

  • 比較不同 LLM 模型(例如 DeepSeek R1-1.5B 和 DeepSeek R1-7B)對相同查詢的回應效能。

工作流程非常簡單:

User → Web Wrapper (Port 5000) → Ollama API (Port 11434, localhost-only/remote) → Response  

聊天機器人 Web UI 如下所示:

s_035.png

Figure-02: Flask Deepseek service wrapper web chat bot UI , version v_0.0.1 (2025)

使用者可以透過基於 Web 的 UI 與聊天機器人互動,該 UI 在導覽列中包含一個模型選擇下拉式選單。行動裝置(手機)視圖如下所示:

s_048.png

Figure-03: Flask Deepseek service wrapper web chat bot UI on Iphone , version v_0.0.1 (2025)

遠端程式 API 函數呼叫 (Http GET ) 如下所示:

resp = requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})
print(resp.content)

 

Program source repo: https://github.com/LiuYuancheng/Deepseek_Local_LATA/tree/main/Testing/1_Simple_Flask_Deepseek_ChatBot


在 LAN 中公開 Ollama 服務 API

使用 Web 封裝器,您可以安全地將 Ollama 服務公開給 LAN 使用者。封裝器充當中間人,而不是直接修改 Ollama 的組態(這會公開所有 API 函數)。

例如,透過封裝器的典型 API 請求可能如下所示:

curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "Why is the sky blue?"}'

這種受控存取可確保使用者可以傳送問題並接收答案,但我們無法修改內部系統狀態或存取日誌和偵錯詳細資訊,如果您使用手機或 Ipad 等行動裝置,這些裝置不容易建立命令列,則使用 Ollama 伺服器會很不方便。

若要為不同的作業系統設定 Ollama 伺服器,

在 Mac 上設定環境變數

如果 Ollama 作為 macOS 應用程式運行,則應使用 launchctl 設定環境變數:

  1. 對於每個環境變數,呼叫 launchctl setenv

launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
  1. 重新啟動 Ollama 應用程式。

在 Linux 上設定環境變數

如果 Ollama 作為 systemd 服務運行,則應使用 systemctl 設定環境變數:

  1. 透過呼叫 systemctl edit ollama.service 來編輯 systemd 服務。這將開啟一個編輯器。

  2. 對於每個環境變數,在 [Service] 區段下新增一行 Environment

    [Service]
    Environment="OLLAMA_HOST=0.0.0.0:11434"
  3. 儲存並退出。

  4. 重新載入 systemd 並重新啟動 Ollama:

    systemctl daemon-reload
    systemctl restart ollama

在 Windows 上設定環境變數

在 Windows 上,Ollama 會繼承您的使用者和系統環境變數。

  1. 首先,透過在工作列中點擊 Ollama 來退出 Ollama。

  2. 啟動設定 (Windows 11) 或控制台 (Windows 10) 應用程式,並搜尋環境變數

  3. 點擊編輯您帳戶的環境變數

  4. 為您的使用者帳戶編輯或建立一個新的 OLLAMA_HOST 變數,將其值設定為 0.0.0.0

  5. 點擊確定/套用以儲存。

  6. 從 Windows 開始功能表啟動 Ollama 應用程式。

Reference : https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server


使用案例情境

封裝器可以應用於以下 4 個使用案例情境,以解決使用者的問題:

使用案例情境 01:在無頭 GPU 伺服器上安全共享

問題: 假設您有一個在沒有桌面環境的 Ubuntu 系統上運行 DeepSeek 的 GPU 伺服器。您想要與同一子網路上的其他人共享 LLM 服務,而無需公開 SSH 憑證或完整的 Ollama API 功能。

您想要限制存取,例如僅允許回應而不顯示 deepseek 的「思考」日誌,並且您還想要為使用者的請求和 LLM 的回應新增一些自訂過濾器。

封裝器解決方案和工作流程圖如下所示:

s_058.png

Flask Web 封裝器允許您:

  • 僅公開必要的 API 端點(例如,傳送問題和接收答案)在 5000 埠上。

  • 防止直接存取 Ollama API 的敏感部分。

  • 提供可從網路上任何裝置(包括行動裝置)存取的簡潔 Web 介面。

  • 為在同一 LAN 中的電腦上運行的其他程式提供有限的 http API。

使用案例情境 02:基於使用者專業知識的自訂查詢處理

問題: 不同的使用者具有不同的專業知識水準。例如,初學者可能需要對氣泡排序等演算法的簡化說明,而專家可能需要詳細的技術範例。

s_069.png

封裝器可以攔截使用者查詢,並在將查詢傳送到 LLM 之前附加特定於上下文的提示。例如:

  • 初學者查詢: 系統將「什麼是氣泡排序?」修改為「我是排序演算法的新手。什麼是氣泡排序?」

  • 進階查詢: 它將問題轉換為「我是專家,需要一個 Python 範例。什麼是氣泡排序?」

這種動態提示工程可以根據使用者的需求量身定制回應。

使用案例情境 03:多 GPU 伺服器和模型比較

問題: 在具有多個運行各種 DeepSeek LLM 模型(例如 DeepSeek R1-1.5B、DeepSeek R1-7B 和 DeepSeek Coder V2)的 GPU 伺服器的環境中,單獨管理時,比較這些模型的效能和回應可能具有挑戰性。

封裝器解決方案和工作流程圖如下所示:

s_079.png

Web 封裝器充當中央樞紐,可以:

  • 連接到多個本機 GPU 伺服器。

  • 提供一個下拉式選單來選擇不同的模型。

  • 允許使用者將相同的查詢傳送到多個模型,以便輕鬆比較效能和回應。

  • 提供一個受控且一致的介面,而不管底層伺服器如何。

使用案例情境 04:GPU 負載平衡和請求監控

問題

在多 GPU 叢集中,有效管理來自不同使用者或節點 IP 位址的請求可能具有挑戰性。如果沒有適當的請求分配,某些 GPU 可能會過載,而其他 GPU 則未充分利用。此外,記錄請求資料以進行監控和最佳化至關重要。

封裝器解決方案

Web 封裝器充當請求管理層,實作一個佇列系統來記錄使用者查詢,並將它們有效地分配到可用的 GPU 伺服器上。透過動態平衡工作負載,它可以防止單個 GPU 過載,同時確保最佳的資源利用率。還可以儲存請求日誌以進行分析,使管理員能夠追蹤使用模式並提高系統效能。


程式部署和使用

若要在本機電腦上安裝 Ollama 並設定 deep seek 模型,請按照本手冊中的「步驟 1:在本機電腦上部署 DeepSeek-R1 模型」進行操作:https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Articles/1_LocalDeepSeekWithRAG/readme.md

若要部署程式,請按照封裝器讀我檔案中的設定區段進行操作:https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Testing/1_Simple_Flask_Deepseek_ChatBot/readme.md

然後修改 app.py 以在封裝器程式中新增具有唯一 ID 的 GPU 伺服器 (Ollama 服務) 詳細資訊:

OllamaHosts[] = {'ip': , 'model': }

 

s_088.png

執行以下命令以啟動聊天機器人:

python app.py

http://127.0.0.1:5000/http://:5000/ 存取 Web UI,並從下拉式選單中選擇所需的模型。

s_095.png

API 請求:對於程式使用,請使用 python request lib 發送 http GET 請求以取得回應:

requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})

或者,請參閱 requestTest.py 以取得更多 API 使用範例。


結論

一個簡單的 Flask 封裝器解鎖了本機 LLM 部署的強大使用案例:

  1. 安全性:限制 Ollama 端點的公開。

  2. 可存取性:提供行動裝置友好的介面。

  3. 靈活性:啟用提示工程、多模型測試和負載平衡。

簡單的 Flask Web 封裝器是一個強大的解決方案,可以安全有效地與 LAN 使用者共享 DeepSeek-R1 模型服務。透過彌合本機 Ollama API 和外部裝置之間的差距,封裝器可確保服務保持可存取但受控。無論您是希望提供簡化的行動介面、保護敏感的 API 端點,還是比較多個 LLM 模型,此方法都可以解決常見的挑戰並增強本機 DeepSeek 部署的可用性。


參考文獻


last edit by LiuYuancheng (liu_yuan_cheng@hotmail.com) by 08/02/2025 if you have any problem, please send me a message.

 

       

  RELATED


  0 COMMENT


No comment for this article.



  RANDOM FUN

See an infinite loop