Trong bài viết trước Triển khai DeepSeek-R1 cục bộ với cơ sở dữ liệu tri thức RAG tùy chỉnh, chúng tôi đã giới thiệu các bước chi tiết về việc triển khai DeepSeek-R1:7b cục bộ với cơ sở dữ liệu tri thức RAG tùy chỉnh trên máy tính để bàn có RTX3060. Khi LLM deepseek-r1:7b đang chạy trên máy tính được trang bị GPU cục bộ, một thách thức mới xuất hiện: chúng ta chỉ có thể sử dụng dịch vụ LLM trên máy tính GPU, nếu chúng ta muốn sử dụng nó từ các thiết bị khác trong mạng LAN của tôi thì sao, có cách nào tôi có thể truy cập nó từ thiết bị di động hoặc chia sẻ dịch vụ này với máy tính khác trong cùng một mạng không? Theo mặc định, Ollama chỉ mở API của nó cho localhost, có nghĩa là các thiết bị bên ngoài trong mạng LAN của bạn không thể dễ dàng tương tác với mô hình. Thay đổi cấu hình để hiển thị đầy đủ API có thể giải quyết các vấn đề về kết nối—nhưng nó cũng loại bỏ các biện pháp bảo vệ giới hạn các hoạt động có khả năng rủi ro, chẳng hạn như tạo các chuỗi hội thoại hoàn chỉnh. Người dùng cần một giao diện được kiểm soát có thể:
-
Giới hạn quyền truy cập chỉ vào các chức năng cần thiết (ví dụ: gửi câu hỏi và nhận phản hồi).
-
Cung cấp giao diện dựa trên web trực quan cho các thiết bị di động.
-
Cho phép các lệnh gọi API theo chương trình với quyền truy cập được kiểm soát.
-
Đóng vai trò là một trung tâm kết nối với nhiều máy chủ GPU và các phiên bản DeepSeek LLM khác nhau.
# Created: 2025/02/28
# version: v_0.0.1
# Copyright: Copyright (c) 2025 LiuYuancheng
# License: MIT License
Giới thiệu
Bài viết này cung cấp tổng quan về trình bao bọc Flask, khám phá các tình huống sử dụng thực tế và giải thích cách định cấu hình Ollama để hiển thị dịch vụ cho các lệnh gọi API LLM. Chúng ta sẽ khám phá cách một trình bao bọc web đơn giản dựa trên Python-Flask đóng vai trò là một “cầu nối” được kiểm soát giữa dịch vụ LLM cục bộ (deepseek-r1) và người dùng LAN và đáp ứng năm yêu cầu sau:
-
Kết nối nhiều máy chủ GPU cục bộ chạy các phiên bản DeepSeek LLM khác nhau trong một mạng con.
-
Giới hạn hoặc lọc quyền truy cập API Ollama cho người dùng LAN.
-
Cho phép kiểm tra từ xa và so sánh hiệu suất của các phản hồi LLM.
-
Cung cấp quyền truy cập được kiểm soát vào các mô hình chuyên dụng/tinh chỉnh mà không cần tiết lộ thông tin xác thực của máy chủ.
-
Tạo điều kiện thuận lợi cho việc thiết kế lời nhắc bằng cách sửa đổi các truy vấn của người dùng trước khi gửi mô hình.
Bằng cách triển khai trình bao bọc web này, người dùng có được quyền truy cập an toàn, được kiểm soát vào các mô hình DeepSeek-R1 thông qua giao diện thân thiện với người dùng, phù hợp cho cả tương tác dựa trên web và tương tác theo chương trình.
Giới thiệu về Trình bao bọc Web DeepSeek Flask
Ứng dụng này cung cấp một giao diện thân thiện với người dùng để truy cập từ xa vào nhiều mô hình LLM chạy trên các GPU khác nhau (sử dụng Ollama để lưu trữ mô hình). Chatbot được thiết kế cho các mục đích sau:
-
Kiểm tra chức năng của các phiên bản Ollama LLM được lưu trữ trên GPU.
-
Cho phép truy cập dùng chung vào các LLM chuyên dụng (được tinh chỉnh hoặc nhúng RAG) mà không yêu cầu truy cập SSH trực tiếp.
-
So sánh hiệu suất của các mô hình LLM khác nhau, chẳng hạn như DeepSeek R1-1.5B và DeepSeek R1-7B, để đáp ứng cùng một truy vấn.
Quy trình làm việc rất đơn giản:
User → Web Wrapper (Port 5000) → Ollama API (Port 11434, localhost-only/remote) → Response
Giao diện người dùng web của chatbot được hiển thị bên dưới:
Figure-02: Flask Deepseek service wrapper web chat bot UI , version v_0.0.1 (2025)
Người dùng có thể tương tác với chatbot thông qua giao diện người dùng dựa trên web bao gồm menu thả xuống lựa chọn mô hình trong thanh điều hướng. Chế độ xem thiết bị di động (điện thoại) được hiển thị bên dưới:
Figure-03: Flask Deepseek service wrapper web chat bot UI on Iphone , version v_0.0.1 (2025)
Các lệnh gọi hàm API chương trình từ xa (Http GET
) được hiển thị bên dưới:
resp = requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})
print(resp.content)
Kho lưu trữ mã nguồn chương trình: https://github.com/LiuYuancheng/Deepseek_Local_LATA/tree/main/Testing/1_Simple_Flask_Deepseek_ChatBot
Hiển thị API Dịch vụ Ollama trong Mạng LAN
Sử dụng trình bao bọc web, bạn có thể hiển thị dịch vụ Ollama của mình một cách an toàn cho người dùng LAN. Thay vì trực tiếp sửa đổi cấu hình của Ollama—điều này sẽ hiển thị tất cả các chức năng API—trình bao bọc đóng vai trò là trung gian.
Ví dụ: một yêu cầu API điển hình thông qua trình bao bọc có thể trông như thế này:
curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:1.5b", "prompt": "Why is the sky blue?"}'
Quyền truy cập được kiểm soát này đảm bảo rằng trong khi người dùng có thể gửi câu hỏi và nhận câu trả lời, nhưng chúng ta không có khả năng sửa đổi trạng thái hệ thống nội bộ hoặc truy cập nhật ký và chi tiết gỡ lỗi và nếu bạn sử dụng thiết bị di động như điện thoại hoặc Ipad, việc tạo dòng lệnh không dễ dàng, sẽ bất tiện khi sử dụng máy chủ Ollama.
Để định cấu hình máy chủ Ollama cho các hệ điều hành khác nhau,
Đặt biến môi trường trên Mac
Nếu Ollama được chạy dưới dạng ứng dụng macOS, các biến môi trường nên được đặt bằng launchctl
:
-
Đối với mỗi biến môi trường, hãy gọi
launchctl setenv
.
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
-
Khởi động lại ứng dụng Ollama.
Đặt biến môi trường trên Linux
Nếu Ollama được chạy dưới dạng dịch vụ systemd, các biến môi trường nên được đặt bằng systemctl
:
-
Chỉnh sửa dịch vụ systemd bằng cách gọi
systemctl edit ollama.service
. Thao tác này sẽ mở một trình soạn thảo. -
Đối với mỗi biến môi trường, hãy thêm một dòng
Environment
bên dưới phần[Service]
:[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434" -
Lưu và thoát.
-
Tải lại
systemd
và khởi động lại Ollama:systemctl daemon-reload
systemctl restart ollama
Đặt biến môi trường trên Windows
Trên Windows, Ollama kế thừa các biến môi trường người dùng và hệ thống của bạn.
-
Trước tiên, hãy thoát Ollama bằng cách nhấp vào nó trên thanh tác vụ.
-
Khởi động ứng dụng Cài đặt (Windows 11) hoặc Bảng điều khiển (Windows 10) và tìm kiếm biến môi trường.
-
Nhấp vào Chỉnh sửa biến môi trường cho tài khoản của bạn.
-
Chỉnh sửa hoặc tạo một biến mới cho tài khoản người dùng của bạn cho
OLLAMA_HOST
, đặt giá trị của nó thành0.0.0.0
-
Nhấp vào OK/Áp dụng để lưu.
-
Khởi động ứng dụng Ollama từ menu Bắt đầu của Windows.
Tham khảo: https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server
Các Tình huống Sử dụng
Trình bao bọc có thể được áp dụng trong 4 tình huống sử dụng bên dưới để giải quyết vấn đề của người dùng:
Tình huống Sử dụng 01: Chia sẻ An toàn trên Máy chủ GPU Không Đầu
Vấn đề: Hãy tưởng tượng bạn có một máy chủ GPU đang chạy DeepSeek trên hệ thống Ubuntu mà không có môi trường máy tính để bàn. Bạn muốn chia sẻ dịch vụ LLM với những người khác trên cùng một mạng con mà không cần tiết lộ thông tin xác thực SSH hoặc toàn bộ chức năng API Ollama.
Bạn muốn giới hạn quyền truy cập, chẳng hạn như chỉ cho phép phản hồi mà không hiển thị nhật ký "suy nghĩ" của deepseek và bạn cũng muốn thêm một số bộ lọc tùy chỉnh cho yêu cầu của người dùng và phản hồi của LLM.
Giải pháp trình bao bọc và sơ đồ quy trình làm việc được hiển thị bên dưới:
Trình bao bọc web Flask cho phép bạn:
-
Chỉ hiển thị các điểm cuối API cần thiết (ví dụ: gửi câu hỏi và nhận câu trả lời) trên cổng 5000.
-
Ngăn chặn truy cập trực tiếp vào các phần nhạy cảm của API Ollama.
-
Cung cấp một giao diện web sạch sẽ có thể truy cập từ bất kỳ thiết bị nào trên mạng, bao gồm cả thiết bị di động.
-
Cung cấp một API http giới hạn cho chương trình khác đang chạy trên máy tính trong cùng một mạng LAN.
Tình huống Sử dụng 02: Xử lý Truy vấn Tùy chỉnh Dựa trên Chuyên môn của Người dùng
Vấn đề: Những người dùng khác nhau có trình độ chuyên môn khác nhau. Ví dụ: người mới bắt đầu có thể cần một lời giải thích đơn giản về một thuật toán như sắp xếp nổi bọt, trong khi một chuyên gia có thể yêu cầu một ví dụ kỹ thuật chi tiết.
Trình bao bọc có thể chặn các truy vấn của người dùng và thêm các lời nhắc cụ thể theo ngữ cảnh trước khi gửi truy vấn đến LLM. Ví dụ:
-
Truy vấn Người mới bắt đầu: Hệ thống sửa đổi “Sắp xếp nổi bọt là gì?” thành “Tôi là người mới bắt đầu với các thuật toán sắp xếp. Sắp xếp nổi bọt là gì?”
-
Truy vấn Nâng cao: Nó biến đổi câu hỏi thành “Tôi là một chuyên gia và cần một ví dụ Python. Sắp xếp nổi bọt là gì?”
Thiết kế lời nhắc động này điều chỉnh các phản hồi theo nhu cầu của người dùng.
Tình huống Sử dụng 03: So sánh Mô hình và Máy chủ Đa GPU
Vấn đề: Trong môi trường có một số máy chủ GPU chạy các mô hình DeepSeek LLM khác nhau (chẳng hạn như DeepSeek R1-1.5B, DeepSeek R1-7B và DeepSeek Coder V2), việc so sánh hiệu suất và phản hồi của các mô hình này có thể là một thách thức khi được quản lý riêng biệt.
Giải pháp trình bao bọc và sơ đồ quy trình làm việc được hiển thị bên dưới:
Trình bao bọc web đóng vai trò là một trung tâm kết nối:
-
Kết nối với nhiều máy chủ GPU cục bộ.
-
Cung cấp một menu thả xuống để chọn các mô hình khác nhau.
-
Cho phép người dùng gửi cùng một truy vấn đến nhiều mô hình để dễ dàng so sánh hiệu suất và phản hồi.
-
Cung cấp một giao diện được kiểm soát và nhất quán bất kể máy chủ cơ bản.
Tình huống Sử dụng 04: Cân bằng Tải GPU và Giám sát Yêu cầu
Vấn đề :
Trong một cụm đa GPU, việc quản lý hiệu quả các yêu cầu từ những người dùng hoặc địa chỉ IP nút khác nhau có thể là một thách thức. Nếu không có phân phối yêu cầu thích hợp, một số GPU có thể bị quá tải trong khi những GPU khác vẫn chưa được sử dụng hết. Ngoài ra, việc ghi nhật ký dữ liệu yêu cầu cho mục đích giám sát và tối ưu hóa là rất quan trọng.
Giải pháp trình bao bọc :
Trình bao bọc web đóng vai trò là một lớp quản lý yêu cầu, triển khai một hệ thống hàng đợi để ghi nhật ký các truy vấn của người dùng và phân phối chúng một cách hiệu quả trên các máy chủ GPU có sẵn. Bằng cách cân bằng khối lượng công việc một cách linh hoạt, nó ngăn chặn việc quá tải một GPU duy nhất đồng thời đảm bảo sử dụng tài nguyên tối ưu. Các nhật ký yêu cầu cũng có thể được lưu trữ để phân tích, cho phép quản trị viên theo dõi các mẫu sử dụng và cải thiện hiệu suất hệ thống.
Triển khai và Sử dụng Chương trình
Để cài đặt Ollama và thiết lập mô hình deep seek trong một máy tính cục bộ, vui lòng làm theo "Bước 1: Triển khai Mô hình DeepSeek-R1 trên Máy cục bộ của bạn" trong hướng dẫn này: https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Articles/1_LocalDeepSeekWithRAG/readme.md
Để triển khai chương trình, vui lòng làm theo phần thiết lập trong tệp đọc tôi của trình bao bọc: https://github.com/LiuYuancheng/Deepseek_Local_LATA/blob/main/Testing/1_Simple_Flask_Deepseek_ChatBot/readme.md
Sau đó, sửa đổi app.py
để thêm chi tiết máy chủ GPU (dịch vụ Ollama) với một ID duy nhất trong chương trình trình bao bọc:
OllamaHosts[] = {'ip': , 'model': }
Thực thi lệnh sau để khởi động chatbot:
python app.py
Truy cập giao diện người dùng web tại http://127.0.0.1:5000/
hoặc http://:5000/
và chọn mô hình mong muốn từ menu thả xuống.
Yêu cầu API : Để sử dụng chương trình, hãy sử dụng thư viện yêu cầu python để gửi yêu cầu http GET
để nhận phản hồi:
requests.get("http://127.0.0.1:5000/getResp", json={'model':'localhost-DS1.5b', 'message':"who are you"})
Ngoài ra, hãy tham khảo requestTest.py
để biết thêm các ví dụ về cách sử dụng API.
Kết luận
Một trình bao bọc Flask đơn giản mở ra các trường hợp sử dụng mạnh mẽ cho việc triển khai LLM cục bộ:
-
Bảo mật: Giới hạn việc hiển thị các điểm cuối Ollama.
-
Khả năng truy cập: Cung cấp giao diện thân thiện với thiết bị di động.
-
Tính linh hoạt: Cho phép thiết kế lời nhắc, kiểm tra đa mô hình và cân bằng tải.
Trình bao bọc web Flask đơn giản là một giải pháp mạnh mẽ để chia sẻ dịch vụ mô hình DeepSeek-R1 với người dùng LAN một cách an toàn và hiệu quả. Bằng cách thu hẹp khoảng cách giữa API Ollama cục bộ và các thiết bị bên ngoài, trình bao bọc đảm bảo rằng dịch vụ vẫn có thể truy cập được nhưng vẫn được kiểm soát. Cho dù bạn đang tìm cách cung cấp một giao diện di động được sắp xếp hợp lý, bảo vệ các điểm cuối API nhạy cảm hay so sánh nhiều mô hình LLM, phương pháp này giải quyết các thách thức chung và nâng cao khả năng sử dụng của các triển khai DeepSeek cục bộ.
Tài liệu tham khảo
-
https://github.com/ollama/ollama/blob/main/docs/faq.md#how-do-i-configure-ollama-server
- Liên kết Kho lưu trữ GitHub của Dự án: https://github.com/LiuYuancheng/Deepseek_Local_LATA/tree/main/Testing/1_Simple_Flask_Deepseek_ChatBot
chỉnh sửa lần cuối bởi LiuYuancheng (liu_yuan_cheng@hotmail.com) vào ngày 08/02/2025 nếu bạn có bất kỳ vấn đề gì, vui lòng gửi tin nhắn cho tôi.