
ChatGPT cục bộ trong 10 phút: Open WebUI + Ollama (2026)
Nếu bạn từng mong muốn ChatGPT chạy ngay trên laptop của mình thay vì trên máy chủ của OpenAI, thì Open WebUI + Ollama chính là bộ công nghệ bạn cần. Open WebUI cung cấp giao diện chat bóng bẩy; Ollama chạy các mô hình cục bộ. Không cần khóa API, không tính phí theo token, không có dữ liệu nào rời khỏi máy của bạn. Hướng dẫn này sẽ đưa bạn từ một terminal trống trơn đến cuộc trò chuyện đầu tiên trong khoảng mười phút, sau đó bổ sung những phần mà hầu hết các hướng dẫn khác bỏ qua: nhập/xuất giọng nói, Pipelines, MCP, điểm chuẩn trên Apple Silicon và đường dẫn HTTPS gọn gàng với Caddy.
Những điểm rút ra nhanh:
- Open WebUI là giao diện người dùng kiểu ChatGPT tự lưu trữ; Ollama là trình chạy mô hình cục bộ cung cấp sức mạnh cho nó.
- Lộ trình Docker một container giúp bạn bắt đầu chat trong ~10 phút trên một máy đã được chuẩn bị sẵn.
- Đặt
OLLAMA_BASE_URLthànhhttp://host.docker.internal:11434để khắc phục lỗi "không thể kết nối" trong chín trên mười trường hợp.- Các tính năng nổi bật của Open WebUI là Pipelines/Functions, RAG tích hợp sẵn, nhập/xuất giọng nói và MCP, những thứ mà LM Studio không thể sánh kịp.
Open WebUI + Ollama thực chất là gì?
Open WebUI là một giao diện web mã nguồn mở, tự lưu trữ, mang lại cho Ollama (và các runtime LLM cục bộ khác) một giao diện chat phong cách ChatGPT. Kết hợp lại, chúng cho phép bạn chạy các mô hình AI riêng tư trên chính máy của mình, không cần khóa API, không tốn chi phí theo token, kiểm soát dữ liệu hoàn toàn. Open WebUI là lớp chat; Ollama là lớp mô hình. Chúng giao tiếp qua HTTP trên cổng 11434, và đó là toàn bộ kiến trúc.
Hãy cùng phân tích các thành phần, vì tên gọi nghe có vẻ thay thế cho nhau nhưng thực tế thì không:
- Open WebUI, ứng dụng trình duyệt mà bạn thực sự sử dụng. Hỗ trợ nhiều người dùng, tích hợp sẵn RAG, hệ thống plugin, chạy trên cổng 8080 bên trong Docker (bạn ánh xạ nó sang cổng 3000 trên máy chủ).
- Ollama, máy chủ mô hình. Nó tải các tệp GGUF (hãy nghĩ như
.mp3cho các mô hình AI), tải chúng lên CPU/GPU của bạn và cung cấp một API HTTP gọn gàng trên cổng 11434. - Models (Mô hình), các tệp trọng số thực tế.
llama3.2:3b,qwen2.5:14b,deepseek-r1:7b, v.v. Được tải về thông qua lệnhollama pull, liệt kê trong thư viện mô hình của Ollama.
Tại sao sự kết hợp này lại chiến thắng: quyền riêng tư (dữ liệu ở lại cục bộ), chi phí (không tốn phí theo token), khả năng hoạt động ngoại tuyến, hỗ trợ nhiều người dùng ngay từ đầu và một hệ sinh thái plugin thực thụ. Nếu bạn mới tìm hiểu về lĩnh vực rộng lớn hơn, hướng dẫn của chúng tôi về chạy LLM cục bộ sẽ đề cập đến khía cạnh phần cứng.
Tài liệu chính thức của Open WebUI là tài liệu tham khảo chuẩn, hãy đánh dấu trang chúng. Chúng ngắn gọn nhưng chính xác.
Làm thế nào để cài đặt Open WebUI với Ollama? (Cài đặt nhanh)
Cài đặt Docker, cài đặt Ollama, sau đó chạy lệnh docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main. Truy cập http://localhost:3000, tạo tài khoản quản trị viên, tải một mô hình từ Admin → Settings → Connections → Ollama và bắt đầu trò chuyện. Tổng thời gian: khoảng 10 phút trên một máy đã được chuẩn bị sẵn.
Dưới đây là lộ trình đầy đủ, từng bước một:
1. Cài đặt Docker Desktop, tải từ docker.com cho Mac/Windows, hoặc apt install docker.io trên Linux.
2. Cài đặt Ollama
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows: download installer from ollama.com3. Tải một mô hình khởi đầu. Tôi khuyên bạn nên bắt đầu với llama3.2:3b, chạy nhanh trên hầu hết mọi thiết bị và đủ thông minh để cảm thấy hữu ích. Nếu bạn muốn xem qua các tùy chọn mạnh mẽ nhất, hãy kiểm tra danh sách các LLM mã nguồn mở tốt nhất của chúng tôi.
ollama pull llama3.2:3b4. Chạy container Open WebUI (lệnh chuẩn):
docker run -d \
-p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main5. Mở http://localhost:3000, đăng ký (người dùng đầu tiên tự động trở thành quản trị viên) và bạn đã có thể chat.
Mẹo chuyên nghiệp: Trên các máy Mac Apple Silicon, hãy chạy Ollama native (không phải trong Docker). Đó là thiết kế mặc định, nó cho phép Ollama sử dụng GPU Metal. Open WebUI vẫn chạy trong Docker; hai thành phần này giao tiếp qua
host.docker.internal:11434.
Về lời hứa "10 phút": con số này áp dụng cho một máy đã được chuẩn bị sẵn, Docker đã cài đặt, internet ổn định để tải hình ảnh ~2 GB và mô hình ~2 GB. Nếu đây là lần đầu cài Docker và không có bộ nhớ đệm? Hãy cộng thêm mười phút. Kết nối chậm? Cộng thêm năm phút nữa. Đây là mức cơ sở trung thực, không phải con số marketing.
Docker Compose: Cấu hình sẵn sàng cho sản xuất
Nếu bạn muốn một cấu hình nhiều container có thể tái sản xuất cho Open WebUI cùng với dịch vụ Ollama độc lập, Docker Compose là lựa chọn sạch sẽ hơn. Một tệp YAML duy nhất khai báo cả hai dịch vụ, một mạng chung, các volume được đặt tên để lưu trữ dữ liệu lâu dài và cho phép bạn triển khai lại chỉ với một lệnh docker compose up -d. Tuyệt vời cho máy chủ, homelab hoặc các nhóm làm việc.
Thủ thuật khiến nhiều người mắc kẹt: khi cả hai dịch vụ chạy bên trong Compose, hãy đặt OLLAMA_BASE_URL=http://ollama:11434 (tên dịch vụ Compose), không phải host.docker.internal. DNS nội bộ của Docker sẽ tự động giải quyết tên dịch vụ.
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama:/root/.ollama
restart: always
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
volumes:
- open-webui:/app/backend/data
depends_on:
- ollama
restart: always
volumes:
ollama:
open-webui:Khởi chạy nó:
docker compose up -d
docker compose logs -fHai điểm đáng chú ý. Thứ nhất, các volume được đặt tên (ollama: và open-webui: ở cuối) tốt hơn bind mounts trong trường hợp này, Docker quản lý quyền hạn và lịch sử chat/cấu hình của bạn sẽ tồn tại qua các lần xây dựng lại container. Thứ hai, nếu bạn muốn một Open WebUI giao tiếp với Ollama cục bộ và OpenAI/Anthropic từ xa thông qua một URL duy nhất, hãy đặt một proxy LiteLLM ở phía trước. Và nếu bạn vẫn đang chọn lớp runtime, bài tổng hợp các công cụ LLM cục bộ tốt nhất của chúng tôi bao gồm Ollama, vLLM, LM Studio và các đối thủ khác.
Tăng tốc GPU: NVIDIA, AMD và Apple Silicon
Ollama tự động phát hiện GPU NVIDIA thông qua NVIDIA Container Toolkit, GPU AMD thông qua ROCm trên Linux và GPU Apple Silicon native thông qua Metal. Bạn không cần truyền --gpus all cho Open WebUI, chỉ Ollama mới cần GPU. Cách thiết lập nhanh nhất trên mỗi nền tảng khác nhau, và một số khoảnh khắc "tại sao cái này chậm vậy" thường do đặt Ollama sai vị trí.
NVIDIA (Linux + Windows WSL2)
Cài đặt NVIDIA Container Toolkit, sau đó chạy Ollama trong Docker với --gpus all:
docker run -d --gpus=all \
-v ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
ollama/ollamaXác minh bằng nvidia-smi khi một mô hình đang được tải, bạn sẽ thấy ollama trong danh sách quy trình GPU. Biến môi trường OLLAMA_NUM_GPU cho phép bạn giới hạn các layer khi bạn đang cân bằng VRAM với các tác vụ khác.
Apple Silicon (M1/M2/M3/M4)
Chạy Ollama native, không phải trong Docker. Chưa có cơ chế chuyển tiếp GPU Metal vào Docker (tính đến đầu năm 2026), nên Ollama chạy trong Docker trên Mac sẽ quay về dùng CPU, và bạn sẽ tự hỏi tại sao chiếc M3 Max của mình lại chậm như một chiếc ThinkPad năm 2015. Open WebUI vẫn chạy trong Docker; nó truy cập Ollama qua host.docker.internal:11434.
Trên máy M2 Pro (16 GB) của tôi chạy llama3.2:3b, tôi thấy tốc độ khoảng 45-55 token/giây. llama3.1:8b giảm xuống ~22-28 token/giây. qwen2.5:14b ở mức borderline có thể sử dụng được với ~9-12 token/giây, ổn cho chat nhưng đau khổ cho các tác vụ xử lý hàng loạt. Con số thay đổi tùy thuộc vào lượng tử hóa và độ dài ngữ cảnh, nhưng đó là bậc độ lớn điển hình.
"Tokens/sec by Model and Hardware"
Bảng dữ liệu
| "Model" | "Apple M2 Pro 16GB" | "RTX 3060 12GB" | "RTX 4090 24GB" |
|---|---|---|---|
| "llama3.2:3b" | 50 | 75 | 180 |
| "llama3.1:8b" | 25 | 45 | 110 |
| "qwen2.5:14b" | 11 | 22 | 65 |
AMD (ROCm trên Linux)
Ollama 0.5+ đi kèm hỗ trợ ROCm cho các card RDNA2/RDNA3 (dòng RX 6000/7000, chip trung tâm dữ liệu MI200/MI300). Sử dụng hình ảnh dedicated:
docker run -d --device=/dev/kfd --device=/dev/dri \
-v ollama:/root/.ollama \
-p 11434:11434 \
--name ollama \
ollama/ollama:rocmHiệu suất AMD đã thu hẹp khoảng cách đáng kể trong suốt năm 2025 — chưa bằng NVIDIA nhưng không còn là một dự án khoa học viễn tưởng nữa.
Làm thế nào để thêm RAG (PDF của riêng bạn) vào Open WebUI?
Open WebUI tích hợp sẵn RAG native. Nhấp vào hồ sơ của bạn → Workspace → Knowledge, tạo một cơ sở kiến thức, thả các tệp PDF, Word, Markdown hoặc văn bản vào. Đằng sau hậu trường, Open WebUI chia nhỏ tài liệu, nhúng chúng bằng mô hình embedding đã cấu hình (mặc định là nomic-embed-text), lưu trữ chúng trong ChromaDB và truy xuất khi truy vấn. Không cần dịch vụ bên ngoài.
Việc thiết lập cần thêm một bước: tải mô hình embedding trước.
ollama pull nomic-embed-textSau đó trong Admin → Settings → Documents, đặt mô hình embedding thành nomic-embed-text. Điều chỉnh kích thước chunk (mặc định 1500) và độ chồng lấp (mặc định 100) theo ý thích. Lỗi kinh điển: các chunk quá lớn vượt quá cửa sổ ngữ cảnh của các mô hình nhỏ. Nếu bạn đang chạy llama3.2:3b với ngữ cảnh 4K, các chunk 1500 token hầu như không còn chỗ cho câu hỏi thực tế, hãy giảm xuống 800 với độ chồng lấp 80.
Để sử dụng cơ sở kiến thức trong chat, gõ # và chọn bộ sưu tập. Hoặc gắn nó vĩnh viễn vào một Custom Model trong Workspace → Models. Tìm kiếm web hoạt động tương tự, bật một nhà cung cấp (SearXNG, Brave hoặc Tavily) trong Admin → Settings → Web Search, và mô hình có thể kéo kết quả trực tiếp.
Để so sánh RAG sâu hơn, xem bài tổng hợp công cụ RAG của chúng tôi. Và nếu ChromaDB không đáp ứng được ở quy mô lớn, bài phân tích các tùy chọn cơ sở dữ liệu vector của chúng tôi bao gồm Qdrant, pgvector và các đánh đổi.
Nhập/Xuất Giọng nói: Nói chuyện với AI cục bộ của bạn
Open WebUI hỗ trợ cả chuyển đổi giọng nói thành văn bản (STT) và văn bản thành giọng nói (TTS). Đối với STT, faster-whisper chạy cục bộ mà không cần khóa API. Đối với TTS, bạn có thể kết nối API TTS của OpenAI hoặc chạy một engine cục bộ như coqui-tts. Khi được bật, biểu tượng micro xuất hiện trong hộp chat và AI cục bộ của bạn bắt đầu phản hồi bằng giọng nói.
Đi tới Admin → Settings → Audio. Hai engine, hai menu thả xuống.
Lộ trình STT, chọn Whisper (Local), chọn kích thước mô hình: tiny, base, small, medium hoặc large. Mô hình sẽ tự động tải xuống khi sử dụng lần đầu. base là điểm ngọt cho hầu hết các laptop; medium nếu bạn có dư dả GPU.
Lộ trình TTS, đơn giản nhất là OpenAI TTS: dán khóa API, chọn tts-1 và một giọng đọc (alloy, nova, v.v.). Lộ trình hoàn toàn cục bộ: engine coqui-tts, với một hình ảnh Docker riêng biệt. Hầu hết mọi người chọn Whisper cục bộ + OpenAI TTS như một giải pháp trung gian thực tế, âm thanh đầu vào không bao giờ rời khỏi máy, và lệnh gọi API chỉ là một chuỗi văn bản ngắn cho đầu ra.
Bạn có thể tích hợp lựa chọn vào container bằng các biến môi trường:
docker run -d \
-e WHISPER_MODEL=base \
-e AUDIO_STT_ENGINE=whisper \
-p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
ghcr.io/open-webui/open-webui:mainTài liệu tham khảo âm thanh đầy đủ nằm trong docs GitHub của Open WebUI.
Pipelines & Functions: Tính năng sát thủ của Open WebUI
Pipelines và Functions là cách bạn mở rộng Open WebUI mà không cần fork nó. Pipelines là các dịch vụ Python bên ngoài hoạt động như bộ lọc, bộ định tuyến mô hình hoặc trình xử lý tùy chỉnh hoàn chỉnh. Functions là Python nội tuyến (Filter, Action hoặc Pipe) sống bên trong chính Open WebUI. Cùng nhau, chúng là lý do tại sao Open WebUI vượt trội hơn LM Studio đối với người dùng nghiêm túc.
Ba loại Function, mỗi loại một câu:
- Filter, tiền/xử lý hậu các tin nhắn (che giấu PII, lọc ngôn từ thô tục, viết lại prompt).
- Action, một nút trong giao diện chat kích hoạt Python (tóm tắt lại, lưu vào Notion, chạy truy vấn SQL).
- Pipe, một trình xử lý mô hình tùy chỉnh hoàn chỉnh (định tuyến đến API từ xa, xâu chuỗi nhiều mô hình, xây dựng agent).
Đây là một Filter tối giản loại bỏ địa chỉ email từ prompt của người dùng trước khi chúng đến mô hình:
from pydantic import BaseModel
import re
class Filter:
class Valves(BaseModel):
priority: int = 0
def __init__(self):
self.valves = self.Valves()
def inlet(self, body: dict, __user__: dict = None) -> dict:
for message in body.get("messages", []):
if message.get("role") == "user":
message["content"] = re.sub(
r"[\w\.-]+@[\w\.-]+",
"[REDACTED_EMAIL]",
message["content"],
)
return bodyThả nó vào Admin → Settings → Functions → New, lưu và bật nó cho bất kỳ mô hình nào. Xong.
Đối với Pipelines bên ngoài, khởi chạy container dedicated cùng với Open WebUI:
pipelines:
image: ghcr.io/open-webui/pipelines:main
container_name: pipelines
ports:
- "9099:9099"
volumes:
- pipelines:/app/pipelines
restart: alwaysSau đó trong Admin → Settings → Connections, thêm http://pipelines:9099 như một API tương thích OpenAI. Tải lên các tệp .py trong Admin → Settings → Pipelines. Repo Pipelines chính thức có hàng tá ví dụ, bộ định tuyến dịch thuật, ghi nhật ký Langfuse, gọi hàm, đủ thứ.
MCP: Kết nối Open WebUI với các công cụ bên ngoài
Open WebUI 0.6+ hỗ trợ Model Context Protocol (MCP), nghĩa là mô hình cục bộ của bạn có thể gọi các công cụ bên ngoài, tìm kiếm tệp, GitHub, Slack, các máy chủ tùy chỉnh của riêng bạn, thông qua cùng một giao thức mà Claude Desktop sử dụng. Đây là cách sạch sẽ nhất để cung cấp cho mô hình cục bộ khả năng sử dụng công cụ thực sự mà không cần viết Pipeline.
Thêm máy chủ MCP trong Admin → Settings → Tools: dán URL máy chủ, đặt tên cho nó và bật cho từng mô hình. Mô hình sẽ quyết định khi nào gọi nó trong cuộc trò chuyện. Chúng tôi đề cập chi tiết giao thức trong hướng dẫn Model Context Protocol (MCP) của mình, cùng các mẫu, chỉ khác là từ phía Open WebUI thay vì Claude Desktop.
Tại sao điều này quan trọng: tính đến giữa năm 2026, hầu như không có hướng dẫn Open WebUI nào đề cập đến MCP. Nếu bạn đã chuẩn hóa các máy chủ MCP cho thiết lập Claude hoặc Cursor của mình, bạn có thể trỏ Open WebUI vào chính xác các máy chủ đó. Một giao thức, mọi client.
Tại sao Open WebUI không nhìn thấy các mô hình Ollama của tôi? (Khắc phục sự cố)
Nếu Open WebUI tải nhưng danh sách thả xuống mô hình trống, container không thể tiếp cận Ollama. Chín trên mười lần, cách khắc phục là --add-host=host.docker.internal:host-gateway cộng với OLLAMA_BASE_URL=http://host.docker.internal:11434. Trên Linux không có cờ host-gateway, mạng bridge của Docker không thể nhìn thấy cổng 11434 của máy chủ. Lần đầu tiên chúng tôi triển khai điều này trên máy Linux của khách hàng, chúng tôi đã gặp đúng lỗi này và mất một giờ.
Ba nguyên nhân gốc rễ, theo thứ tự tần suất:
-
Thiếu cờ
--add-host(phổ biến nhất trên Linux). Docker Desktop trên macOS tự động đặthost.docker.internal; Linux cần cờ rõ ràng. -
Ollama chỉ绑定 với
127.0.0.1. Từ góc độ của container, điều đó không thể tiếp cận được. Khắc phục:bashOLLAMA_HOST=0.0.0.0:11434 ollama serveHoặc đặt
Environment="OLLAMA_HOST=0.0.0.0:11434"trong đơn vị systemd trên Linux. -
Tường lửa / phần mềm diệt virus chặn 11434. Ít phổ biến hơn, nhưng hãy kiểm tra
ufw, Windows Defender hoặc bảo vệ điểm cuối của doanh nghiệp.
Chẩn đoán, chạy lệnh này từ bên trong container Open WebUI:
docker exec open-webui curl http://host.docker.internal:11434/api/tagsNếu lệnh trả về JSON với danh sách mô hình của bạn, mạng ổn và vấn đề nằm trong cài đặt của Open WebUI (kiểm tra Admin → Connections → Ollama URL). Nếu nó treo hoặc từ chối, bạn có vấn đề ở phía máy chủ, hãy bắt đầu với nguyên nhân #2.
Open WebUI so với LM Studio so với Jan so với AnythingLLM
Open WebUI chiến thắng về đa người dùng, độ sâu RAG và Pipelines/Functions. LM Studio chiến thắng về hiệu suất GPU ngay lập tức và giao diện người dùng đơn lẻ bóng bẩy. Jan chiến thắng về sự ít ma sát nhất khi chạy lần đầu. AnythingLLM chiến thắng về trải nghiệm nhập tài liệu. Nếu bạn muốn một giải pháp thay thế ChatGPT tự lưu trữ cho một nhóm, Open WebUI là câu trả lời.
| Tính năng | Open WebUI | LM Studio | Jan | AnythingLLM |
|---|---|---|---|---|
| Đa người dùng | Có | Không | Không | Có |
| RAG Native | Có (sâu) | Chỉ plugin | Cơ bản | Có (UX tốt nhất) |
| Plugin / Tiện ích mở rộng | Pipelines + Functions | Hạn chế | Extensions | Plugins |
| Hỗ trợ GPU | Qua backend Ollama | Tích hợp sẵn (tốt nhất) | Tích hợp sẵn | Qua backend |
| Phù hợp nhất cho | Các nhóm tự lưu trữ | Người dùng desktop cá nhân mạnh mẽ | AI cục bộ lần đầu | Quy trình làm việc nặng về tài liệu |
Kết luận: nếu bạn là một nhà phát triển cá nhân chỉ muốn chạy một mô hình trên GPU gaming và chat, LM Studio nhanh hơn để thiết lập. Nếu bạn đang xây dựng một ChatGPT riêng tư cho một nhóm, thực hiện RAG nghiêm túc hoặc kết nối logic Python tùy chỉnh, Open WebUI là lựa chọn thực sự duy nhất. Bài đăng các công cụ LLM cục bộ tốt nhất rộng hơn của chúng tôi so sánh lớp runtime (vLLM, llama.cpp, Ollama) bên dưới các giao diện người dùng này.
Làm thế nào để phơi bày Open WebUI an toàn qua HTTPS?
Hai lộ trình sạch sẽ: một Caddyfile 5 dòng ở phía trước Open WebUI để lấy chứng chỉ Let's Encrypt thực sự (gần như sản xuất), hoặc Cloudflare Tunnel để chia sẻ với nhóm mà không cần mở cổng nào. Cả hai đều giữ Open WebUI trên localhost:3000 trong khi phơi bày một URL công cộng sạch sẽ với HTTPS. Chọn dựa trên việc bạn có kiểm soát DNS cho một tên miền hay không.
Lộ trình Caddy, trỏ tên miền của bạn vào máy, sau đó:
ai.example.com {
reverse_proxy localhost:3000
}Đó là toàn bộ cấu hình. Caddy tự động lấy chứng chỉ Let's Encrypt ở yêu cầu đầu tiên. Chạy caddy run --config Caddyfile (hoặc sử dụng đơn vị systemd). Tham chiếu đầy đủ: Tài liệu Caddy.
Lộ trình Cloudflare Tunnel, cloudflared tunnel create open-webui, định tuyến một hostname trong vùng Cloudflare của bạn, sau đó cloudflared tunnel run. Không mở cổng nào, Cloudflare xử lý TLS. Tuyệt vời cho trường hợp "Tôi muốn nhóm của mình truy cập mà không cần khoét lỗ trên tường lửa."
Một quy tắc cứng: không bao giờ phơi bày cổng 3000 thô ra internet công cộng. Đăng ký Open WebUI mở mặc định, bất kỳ ai truy cập URL của bạn đều có thể tạo tài khoản. WEBUI_AUTH=False ổn cho LAN, không bao giờ cho công cộng. Luôn đặt nó sau một reverse proxy cộng với danh sách trắng đăng ký đã xác thực (Admin → Settings → General → tắt "Enable Signup" sau khi bạn đã tạo tài khoản).
Cách Techsy tiếp cận triển khai LLM cục bộ
Chúng tôi đã triển khai các thiết lập Open WebUI + Ollama cho khách hàng trong lĩnh vực pháp lý, chăm sóc sức khỏe và các nhóm công cụ nội bộ những người không thể (hoặc không muốn) gửi dữ liệu đến OpenAI. Các mẫu lặp lại đủ nhiều để chúng tôi ngừng viết chúng từ đầu, nhưng mỗi lần triển khai đều có cùng ba ưu tiên.
Những gì chúng tôi thực sự làm:
- Điều chỉnh kích thước mô hình phù hợp với phần cứng và ngân sách. Phạm vi 3B–8B thường đạt điểm ngọt hơn cả. Lớn hơn không phải lúc nào cũng tốt hơn khi độ trễ và chi phí mỗi tháng là quan trọng.
- Củng cố triển khai. Caddy ở phía trước, tắt đăng ký,
/app/backend/datatrên một volume được đặt tên đã sao lưu, ảnh chụp hàng tuần và một kế hoạch khôi phục thảm họa thực sự. - Kết nối Pipelines cho nhu cầu cụ thể của tổ chức. Bộ lọc che giấu PII, các pipeline RAG tùy chỉnh trỏ đến SharePoint hoặc Confluence nội bộ, các công cụ gọi hàm để truy cập shell an toàn, những thứ làm cho giao diện chat thực sự hữu ích trong một công ty.
Nếu bạn muốn bỏ qua việc thiết lập và nhận một ngăn xếp AI riêng tư đang chạy, đặt lịch tư vấn miễn phí. Chúng tôi sẵn lòng phác phạm vi.
Tóm tắt
Ba điểm tóm tắt nhanh:
- Lộ trình một container, cách nhanh nhất để bắt đầu chat, mười phút trung thực trên một máy đã chuẩn bị sẵn.
- Docker Compose, những gì bạn thực sự muốn cho bất cứ thứ gì cần tồn tại sau khi khởi động lại.
- Pipelines + RAG + MCP, hào phòng thủ khiến Open WebUI đáng chọn hơn LM Studio hoặc Jan.
Bạn đang chat với AI của riêng mình trong mười phút. Từ đó, tất cả là tăng dần, thêm RAG khi bạn có tài liệu, thêm Caddy khi bạn muốn dùng trên điện thoại, thêm Pipelines khi bạn muốn nó thực hiện công việc thực sự. Nếu bạn muốn đi sâu hơn vào việc chọn mô hình cục bộ, hướng dẫn chạy LLM cục bộ của chúng tôi đề cập chi tiết khía cạnh phần cứng.
Câu hỏi thường gặp
Làm thế nào để cài đặt Open WebUI với Ollama?
Ba bước: cài đặt Docker Desktop, cài đặt Ollama (curl -fsSL https://ollama.com/install.sh | sh trên macOS/Linux), sau đó chạy container Open WebUI chuẩn với docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main. Mở http://localhost:3000 và tạo tài khoản quản trị viên của bạn.
Open WebUI có miễn phí không?
Có, Open WebUI được cấp phép MIT và hoàn toàn mã nguồn mở. Tự lưu trữ là miễn phí; bạn chỉ trả tiền cho phần cứng chạy nó (laptop của bạn, máy chủ homelab hoặc VM đám mây). Các phần tùy chọn trả phí bao gồm API TTS của OpenAI cho giọng nói, hoặc các mô hình thương mại được truy cập thông qua đầu nối tương thích OpenAI của Open WebUI. Mọi thứ cốt lõi đều không mất phí.
Open WebUI có thể chạy mà không cần Ollama không?
Có, Open WebUI giao tiếp với bất kỳ API tương thích OpenAI nào. Bạn có thể trỏ nó trực tiếp đến OpenAI, Anthropic thông qua proxy LiteLLM, máy chủ vLLM, máy chủ HTTP của llama.cpp hoặc các nhà cung cấp được lưu trữ như Groq và Together. Nhưng "Open WebUI + Ollama" là sự kết hợp AI cục bộ chuẩn mực vì Ollama làm cho việc quản lý mô hình trở nên cực kỳ đơn giản.
Tại sao Open WebUI không thể kết nối với Ollama?
Nguyên nhân phổ biến nhất: thiếu cờ --add-host=host.docker.internal:host-gateway và OLLAMA_BASE_URL không được đặt trong cài đặt của Open WebUI. Nguyên nhân phổ biến thứ hai: Ollama chỉ绑定 với 127.0.0.1, không thể tiếp cận từ bên trong container, khắc phục bằng OLLAMA_HOST=0.0.0.0:11434 ollama serve. Chạy docker exec open-webui curl http://host.docker.internal:11434/api/tags để chẩn đoán nhanh.
Làm thế nào để thêm mô hình vào Open WebUI?
Lộ trình dễ nhất: từ máy chủ, chạy ollama pull llama3.2:3b (hoặc bất kỳ mô hình nào từ ollama.com/library). Mô hình xuất hiện tự động trong danh sách thả xuống của Open WebUI, không cần khởi động lại. Ngoài ra, trong Open WebUI đi tới Admin → Settings → Connections → Ollama và sử dụng nút pull trong UI. Dù bằng cách nào, các mô hình đều nằm ở phía Ollama.
Sự khác biệt giữa Open WebUI và LM Studio là gì?
LM Studio là một ứng dụng desktop đơn người dùng tập trung vào quản lý mô hình cộng với chat, mặc định GPU mạnh mẽ, UI mượt mà, không có đa người dùng. Open WebUI là một máy chủ tự lưu trữ hỗ trợ nhiều người dùng, RAG native, nhập/xuất giọng nói, Pipelines/Functions và MCP. Đối tượng khác nhau: LM Studio dành cho người dùng desktop cá nhân mạnh mẽ, Open WebUI dành cho các nhóm hoặc bất kỳ ai muốn một ChatGPT riêng tư có thể mở rộng.
Tôi có thể sử dụng Open WebUI trên điện thoại không?
Có, Open WebUI hoàn toàn responsive, vì vậy bất kỳ trình duyệt di động nào cũng hoạt động. Kết hợp nó với HTTPS (Caddy với chứng chỉ Let's Encrypt hoặc Cloudflare Tunnel) và nó trở thành một ứng dụng chat di động hoàn chỉnh. Thêm nó vào màn hình chính trên iOS hoặc Android để có trải nghiệm PWA gần như native. Tuy nhiên, đừng phơi bày nó công khai mà không có xác thực.
Làm thế nào để cập nhật Open WebUI?
Kéo hình ảnh mới nhất và khởi động lại: docker pull ghcr.io/open-webui/open-webui:main && docker stop open-webui && docker rm open-webui sau đó chạy lại lệnh docker run ban đầu của bạn. Các volume được đặt tên bảo tồn tất cả dữ liệu, lịch sử chat, người dùng, bộ sưu tập RAG và cài đặt. Với Docker Compose: docker compose pull && docker compose up -d. Các bản cập nhật được phát hành khoảng hàng tuần.
Open WebUI có hỗ trợ chat giọng nói không?
Có, cả chuyển đổi giọng nói thành văn bản (qua faster-whisper cục bộ) và văn bản thành giọng nói (qua API TTS của OpenAI hoặc coqui-tts cục bộ). Cấu hình cả hai trong Admin → Settings → Audio. Khi được bật, biểu tượng micro xuất hiện trong hộp chat. Thiết lập thực tế là Whisper cục bộ cộng với OpenAI TTS, đầu vào hoàn toàn ngoại tuyến, đầu ra nhanh và sạch. Xem phần Nhập/Xuất Giọng nói ở trên để biết cấu hình biến môi trường.
Làm thế nào để thêm PDF của tôi vào Open WebUI?
Nhấp vào hồ sơ của bạn → Workspace → Knowledge → New collection, sau đó tải lên PDF, tài liệu Word, Markdown hoặc tệp văn bản. Open WebUI chia nhỏ tài liệu, nhúng chúng bằng nomic-embed-text (tải nó trước qua ollama pull nomic-embed-text) và lưu trữ chúng trong ChromaDB. Tham chiếu bất kỳ bộ sưu tập nào trong chat với #collection-name, hoặc gắn vĩnh viễn vào một Custom Model.