Phần 2: Xây dựng Local AI Server hoàn chỉnh với Ollama + Open WebUI + SearXNG + RAG + MCP
Ở phần trước, chúng ta đã nói về một ý tưởng quan trọng:Trong phần này, chúng ta sẽ đi xa hơn một bước:Local AI không nhất thiết phải là một chatbot “đóng kín” trong máy. Nếu được cấp Search, Browser, RAG, API và các công cụ phù hợp, nó có thể trở thành một AI Server thực sự.
Xây một kiến trúc Local AI tương đối hoàn chỉnh để có thể dùng hàng ngày.
Mục tiêu cuối cùng không chỉ là:
User
↓
Local LLM
↓
Answer
mà là:
USER
↓
Open WebUI
↓
Local AI
│
┌────────────────┼────────────────┐
↓ ↓ ↓
Internet RAG Tools
↓ ↓ ↓
SearXNG Documents MCP
↓ ↓ ↓
Web Search Vector DB GitHub / DB / Files
Một hệ thống như vậy có thể:
- chat với model local;
- tìm kiếm Internet;
- đọc website;
- hỏi đáp trên PDF và tài liệu riêng;
- đọc source code;
- truy vấn database;
- sử dụng GitHub;
- gọi API;
- kết nối MCP;
- và nếu muốn, vẫn có thể kết hợp thêm Claude, GPT hoặc Gemini cho những task khó.
1. Các thành phần chúng ta sẽ sử dụng
Stack cơ bản gồm:Ollama
+
Open WebUI
+
SearXNG
+
RAG
+
MCP
Có thể bổ sung:
Browser
Firecrawl
Qdrant / Chroma / pgvector
Open Terminal
Cloud LLM
Mỗi thành phần đảm nhiệm một nhiệm vụ khác nhau.
2. Ollama – Engine chạy Local LLM
Có thể hiểu Ollama như lớp inference server.Nó đảm nhiệm:
Download Model
Load Model
GPU / CPU inference
Model Management
API
Ví dụ:
ollama pull qwen3
sau đó:
ollama run qwen3
Ollama hiện chạy trên Windows, macOS, Linux và có API để các ứng dụng khác gọi model. Open WebUI có thể kết nối trực tiếp với Ollama qua API, thông thường ở cổng 11434.
Kiến trúc lúc này rất đơn giản:
Application
↓
Ollama API
↓
Local LLM
↓
GPU
3. Nên chọn model nào?
Đây phụ thuộc rất nhiều vào VRAM và RAM.Không nên tư duy đơn giản:
Với AI agent, một model cần đồng thời có:Model càng lớn càng tốt.
- reasoning khá;
- instruction following tốt;
- tool calling tốt;
- context đủ lớn;
- tốc độ inference chấp nhận được.
Qwen
Gemma
DeepSeek
Llama
Mistral
với nhiều mức kích thước khác nhau.
Một máy có VRAM hạn chế nên ưu tiên model nhỏ hơn nhưng chạy nhanh.
Một model:
14B @ 30 tokens/s
có thể hữu dụng hơn:
70B @ 3 tokens/s
nếu mục tiêu là agent phải thực hiện hàng chục tool calls.
4. Context length cực kỳ quan trọng
Đây là một lỗi khá phổ biến khi dùng Local AI.Bạn có thể chạy được model, nhưng context chỉ:
4K
sau đó đưa:
- website;
- PDF;
- search result;
- code;
- conversation;
AI bắt đầu bỏ mất dữ liệu.
Open WebUI hiện lưu ý rằng với Ollama, trên GPU dưới 24 GiB, context mặc định có thể chỉ ở mức 4096 token tùy model/configuration, điều này có thể ảnh hưởng mạnh đến RAG và Web Search.
Đối với AI có Search/RAG, tôi thường coi:
16K
là mức bắt đầu tương đối thực dụng.
Tốt hơn:
32K
64K
nếu phần cứng cho phép.
Nhưng phải nhớ:
Context càng lớn → KV cache càng lớn → tốn VRAM hơn.
5. Open WebUI – giao diện trung tâm
Nếu Ollama là engine thì Open WebUI có thể coi là:Open WebUI có thể kết nối:Control Center của Local AI.
Ollama
OpenAI-compatible API
Cloud models
RAG
Web Search
MCP
Browser
và cung cấp giao diện khá giống các dịch vụ AI online.
Open WebUI hiện hỗ trợ Docker, Python và Kubernetes; Docker là phương thức được tài liệu khuyến nghị cho phần lớn người dùng.
6. Cách cài Open WebUI đơn giản nhất
Nếu Ollama đã chạy trên máy host, có thể chạy Open WebUI bằng Docker.Ví dụ:
docker run -d \
-p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
-e WEBUI_SECRET_KEY=your-secret-key \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
Sau đó truy cập:
Loading…
localhost
Loading…
host.docker.internal
7. Nếu muốn cực kỳ đơn giản: Ollama + Open WebUI trong cùng container
Open WebUI cũng cung cấp image tích hợp Ollama.Ví dụ với GPU:
docker run -d \
-p 3000:8080 \
--gpus=all \
-v ollama:/root/.ollama \
-v open-webui:/app/backend/data \
-e WEBUI_SECRET_KEY=your-secret-key \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui
Có cả phương án CPU-only.
Cách này phù hợp để:
test
học
lab
máy cá nhân
Nhưng với một AI server dùng lâu dài, tôi thích tách:
Ollama
Open WebUI
Search
Vector DB
thành các service riêng.
Dễ backup và nâng cấp hơn.
8. Kiến trúc nên dùng với Docker Compose
Một kiến trúc cơ bản:Docker Host
│
├── Open WebUI
│
├── SearXNG
│
├── Vector DB
│
└── Other Tools
│
└───────────→ Ollama
↓
GPU
Không nhất thiết phải container hóa Ollama.
Nếu Ollama chạy trực tiếp trên Windows/Linux host và nhận GPU tốt thì hoàn toàn có thể để:
Ollama → Host
còn các dịch vụ khác chạy Docker.
9. Bước tiếp theo: cho AI khả năng Search Internet
Có nhiều lựa chọn:DuckDuckGo
SearXNG
Brave
Tavily
Exa
Firecrawl
Perplexity
Open WebUI hiện có Web Search tích hợp; theo tài liệu hiện tại, DuckDuckGo có thể hoạt động ngay mà không cần API key, còn SearXNG có thể kết nối thông qua URL của instance self-host.
Nếu muốn Local AI theo tinh thần self-host, tôi chọn:
SearXNG
10. Cài SearXNG
SearXNG khuyến nghị container/Compose cho phần lớn deployment thông thường.Ví dụ có thể chạy container:
docker run \
--name searxng \
-d \
-p 8888:8080 \
-v "./config/:/etc/searxng/" \
-v "./data/:/var/cache/searxng/" \
docker.io/searxng/searxng:latest
Sau đó:
Loading…
localhost
11. SearXNG thực chất làm gì?
Nó không phải Google mới.Nó là:
Có thể hỏi nhiều nguồn:Metasearch Engine.
Bing
Brave
DuckDuckGo
Wikipedia
GitHub
...
rồi tổng hợp kết quả.
Kiến trúc:
Local AI
↓
SearXNG
↓
┌────────┬────────┬────────┐
Google Bing Other
└────────┴────────┴────────┘
↓
Results
↓
Local AI
Điểm đáng giá là chúng ta có một API search do chính mình kiểm soát.
12. Cấu hình JSON cho SearXNG
Đây là chỗ rất dễ bị lỗi.Open WebUI cần nhận search results ở dạng phù hợp.
Trong:
settings.yml
của SearXNG cần bật JSON:
search:
formats:
- html
- json
Nếu không bật JSON, request từ Open WebUI tới SearXNG có thể gặp:
403 Forbidden
Tài liệu Open WebUI hiện ghi rõ yêu cầu này.
SearXNG bản thân cũng hỗ trợ Search API qua:
GET /search
POST /search
với:
format=json
nếu JSON đã được bật trong cấu hình.
13. Kết nối SearXNG với Open WebUI
Trong Open WebUI:Settings
↓
Admin
↓
Web
↓
Web Search
chọn:
SearXNG
sau đó nhập URL.
Nếu cùng Docker network:
http://searxng:8080/search?q=<query>
hoặc URL phù hợp với deployment của bạn.
Sau đó AI đã có:
Local LLM
+
Internet Search
14. Test Web Search
Hãy thử những câu mà model chắc chắn không thể biết từ training:hoặc:Hôm nay version mới nhất của một framework nào đó là gì?
Nếu mọi thứ đúng:Tìm release notes mới nhất của PostgreSQL.
Question
↓
Open WebUI
↓
Web Search
↓
SearXNG
↓
Internet
↓
Results
↓
Local LLM
AI sẽ dựa trên dữ liệu vừa tìm được để trả lời.
15. Search vẫn chưa đủ
Một search result thường chỉ có:Title
URL
Snippet
Deep research cần:
Search
↓
Open Page
↓
Read Full Content
Đây là lúc chúng ta cần:
Web Browsing
Open WebUI hiện hỗ trợ browser mode, có thể dùng browser local như Chrome, Chromium, Brave hoặc Edge qua Chrome DevTools Protocol. Khi browser được bật, AI có thể điều hướng trang, click, điền form và chụp screenshot.16. Search và Browser khác nhau thế nào?
Search
AI hỏi:"Qwen new release"
và nhận:
10 results
Browser
AI:open result 1
↓
read
↓
click documentation
↓
scroll
↓
open benchmark
↓
read table
Do đó:
Search = tìm nơi có thông tin
Browser = đi vào đó và tương tác
Một AI research tốt thường cần cả hai.
17. Cảnh báo quan trọng với Browser Agent
Không nên cho AI ngay lập tức quyền điều khiển browser cá nhân đã đăng nhập:Gmail
Bank
GitHub Admin
Cloudflare
Một browser agent có thể:
click
submit
delete
purchase
send
Tài liệu Open WebUI cũng cảnh báo rằng nếu sử dụng browser profile đã đăng nhập, agent có thể thực hiện hành động bằng chính tài khoản của bạn.
Nên ưu tiên:
Managed Browser
tách biệt.
Chỉ dùng profile cá nhân khi thực sự cần.
18. Tiếp theo: xây Knowledge Base bằng RAG
Web Search giải quyết:Internet knowledge
RAG giải quyết:
Private knowledge
Ví dụ:
Word
Markdown
Manual
SOP
Technical docs
Source code
Ta không đưa toàn bộ tài liệu vào prompt.
Mà:
Documents
↓
Parse
↓
Chunk
↓
Embedding
↓
Vector Database
↓
Search Relevant Chunks
↓
Local LLM
Open WebUI hỗ trợ RAG từ các nguồn như local/remote documents và web content.
19. Embedding Model là gì?
Khi đưa một tài liệu vào RAG, chúng ta cần biến đoạn text thành vector.Ví dụ:
"Redis is an in-memory database"
→
[0.231, -0.822, 0.119 ...]
Vector đó thể hiện ngữ nghĩa.
Khi user hỏi:
hệ thống tạo vector cho câu hỏi rồi tìm những đoạn tài liệu có vector gần nhất.Redis lưu dữ liệu thế nào?
Đó là:
Semantic Search
20. Vector Database
Có nhiều lựa chọn:Chroma
Qdrant
pgvector
Milvus
Weaviate
Nếu chỉ chạy cá nhân:
Chroma
đã có thể đủ.
Nếu muốn mở rộng:
Qdrant
rất đáng cân nhắc.
Nếu đã có PostgreSQL:
pgvector
cũng rất tiện.
Không nhất thiết phải thêm một database mới.
21. Một kiến trúc RAG tiêu chuẩn
Documents↓
Parser
↓
Chunk
↓
Embedding
↓
Vector DB
↑
│
User Question → Embedding
↓
Similarity Search
↓
Relevant Context
↓
Local LLM
Model không cần “học lại”.
Không phải:
Fine-tuning
mà là:
Retrieval
22. Ví dụ thực tế: AI đọc toàn bộ tài liệu một dự án
Giả sử có:/docs
│
├─ architecture.md
├─ api.md
├─ database.md
├─ SOP.md
├─ deployment.md
└─ websocket.md
đưa vào knowledge base.
Sau đó hỏi:
AI:Khi user mất WebSocket 30 giây thì hệ thống xử lý thế nào?
Question
↓
Vector Search
↓
websocket.md
↓
Relevant chunks
↓
Local LLM
↓
Answer
không cần model vốn biết gì về dự án.
Đây chính là sức mạnh của RAG.
23. Internet + RAG mới thực sự thú vị
Giả sử hỏi:Agent có thể:Kiến trúc Redis hiện tại của dự án có còn phù hợp với best practices mới không?
Step 1:
RAG → đọc architecture hiện tại
Step 2:
Web Search → tìm Redis docs mới
Step 3:
Browser → đọc documentation
Step 4:
LLM → compare
Step 5:
recommend
Tức:
Private Knowledge
+
Public Internet
+
Reasoning
được kết hợp.
Đây chính là thứ mà Local AI đơn thuần không làm được.
24. MCP – bắt đầu cho AI sử dụng công cụ thật
Đây là bước thú vị nhất.MCP có thể hiểu đơn giản là:
Open WebUI hiện hỗ trợ MCP native từ phiên bản 0.6.31 trở lên.Một chuẩn giúp model/AI client kết nối với các tool và nguồn dữ liệu bên ngoài theo một cách thống nhất.
Ví dụ:
Open WebUI
↓
MCP
├─ GitHub
├─ Filesystem
├─ PostgreSQL
├─ Browser
├─ Search
└─ Other tools
25. Tại sao MCP quan trọng?
Nếu không có chuẩn chung:AI ↔ GitHub custom integration
AI ↔ Postgres custom integration
AI ↔ Files custom integration
AI ↔ Jira custom integration
Mỗi integration một kiểu.
MCP giúp chuẩn hóa:
MCP
│
┌─────────────┼─────────────┐
↓ ↓ ↓
GitHub Database Files
Từ góc nhìn AI, tất cả đều là:
Tools
26. Ví dụ MCP + GitHub
Khi đã cấp GitHub tool, bạn có thể hỏi:AI:Tìm những commit trong tuần này liên quan authentication.
Local LLM
↓
MCP
↓
GitHub
↓
Search commits
↓
Results
↓
LLM
Hoặc:
Agent:Đọc issue #152 và tìm file có khả năng liên quan.
read issue
↓
search repository
↓
read code
↓
analyze
Local AI bắt đầu giống một coding agent thực sự.
27. MCP + PostgreSQL
Một use case khác:Agent có thể:Hôm qua có bao nhiêu user đăng ký?
Local LLM
↓
MCP
↓
PostgreSQL
↓
SELECT ...
↓
result
↓
Answer
Nhưng cần cực kỳ cẩn thận về quyền.
AI analytics chỉ cần:
SELECT
thì tài khoản DB nên là:
READ ONLY
Không nên cấp:
DROP
DELETE
UPDATE
nếu không thực sự cần.
28. Nguyên tắc Permission quan trọng hơn model
Nếu một agent được cấp:root SSH
+
database admin
+
GitHub write
+
browser login
thì chỉ cần một tool call sai là có thể gây hậu quả lớn.
Do đó nên áp dụng:
Least Privilege
Ví dụ:AI Database User
→ SELECT only
AI GitHub
→ Read repository
AI Browser
→ isolated profile
AI Filesystem
→ project directory only
Đừng nghĩ:
Hãy thiết kế như:“AI thông minh nên nó sẽ không làm sai.”
“AI chắc chắn có lúc sẽ làm sai.”
29. AI Local có thể truy cập Terminal không?
Có.Đây là bước biến:
Chatbot
thành:
Agent
Open WebUI có Open Terminal, cho phép hệ thống tương tác với môi trường terminal; tài liệu hiện hỗ trợ cả container và bare-metal deployment.
Ví dụ AI có thể:
ls
git status
npm test
pnpm lint
docker ps
sau đó đọc output.
Một coding workflow:
User
↓
AI
↓
read code
↓
edit
↓
run test
↓
error
↓
inspect
↓
fix
↓
test again
30. Nhưng không nên cho Local AI root shell ngay từ đầu
Hãy bắt đầu bằng sandbox.Ví dụ:
Docker container
chỉ mount:
/project
Agent được phép:
read project
write project
run tests
nhưng không được:
/etc
/root
production database
SSH keys
Đây chính là cách coding sandbox của các agent chuyên nghiệp thường được thiết kế.
31. Kiến trúc hoàn chỉnh bắt đầu hình thành
Sau các bước trên chúng ta có:USER
↓
Open WebUI
↓
AI Router
│
┌─────────────────────┼─────────────────────┐
│ │ │
↓ ↓ ↓
Local LLM Knowledge Tools
│ │ │
Ollama ┌────┴────┐ MCP
│ ↓ ↓ │
GPU RAG Web ┌──┼────┐
│ │ ↓ ↓ ↓
Vector DB SearXNG Git DB Files
│
Internet
Nếu thêm browser:
Internet
│
├── Search
│
└── Browser
lúc này hệ thống đã khá mạnh.
32. Có thể thêm Cloud AI vào cùng Open WebUI
Đây là phần tôi rất khuyến khích.Đừng nhất thiết biến hệ thống thành:
Local Only
Open WebUI có thể kết nối cả:
Ollama
OpenAI-compatible services
Cloud providers
song song.
Tức model selector có thể có:
Qwen Local
Gemma Local
GPT
Claude
Gemini
tùy integration.
Khi đó Local AI server trở thành:
Unified AI Interface.
33. Tại sao Hybrid tốt hơn Local-only?
Một task như:Summarize 1.000 documents
→ Local.
Một task:
classify 100.000 records
→ Local.
Một task:
review architecture của hệ thống distributed phức tạp
→ frontier model.
Một task:
đọc dữ liệu nhạy cảm
→ Local.
Do đó:
TASK
↓
ROUTER
│
┌────────┴────────┐
↓ ↓
LOCAL CLOUD
thường là lựa chọn kinh tế hơn.
34. AI Router là bước tiếp theo
Thay vì user chọn model, router có thể tự quyết định.Ví dụ:
if privacy_required:
local
elif task == simple:
local
elif batch:
local
elif reasoning_complex:
frontier
Kiến trúc:
User
↓
AI Gateway
↓
Task Classification
↓
┌────────────┬─────────────┐
↓ ↓ ↓
Local GPT Claude
Đây là kiến trúc tôi nghĩ sẽ ngày càng phổ biến.
35. Observability cho Local AI Server
Khi AI server bắt đầu được sử dụng thường xuyên, chúng ta cũng nên monitor nó.Các metric hữu ích:
GPU usage
VRAM usage
RAM
CPU
tokens/sec
time to first token
model load time
requests/sec
queue length
error rate
Ví dụ:
NVIDIA GPU
↓
nvidia-smi
↓
Prometheus exporter
↓
Grafana
Sau đó biết được:
Điều này còn liên quan trực tiếp tới bài toán kinh tế của Local AI.GPU có thực sự được khai thác hay chỉ idle?
36. Logging cho Agent cũng cực kỳ quan trọng
Đối với agent, nên lưu:Prompt
Model
Tool called
Tool arguments
Tool output
Duration
Tokens
Final answer
Ví dụ:
10:30:01
model=qwen
10:30:04
tool=search
query="PostgreSQL 18 release notes"
10:30:06
results=10
10:30:10
tool=fetch_url
10:30:14
answer generated
Nếu AI trả lời sai, ta có thể xem:
Sai do model hay sai do search?
37. Backup gì?
Một Local AI server có nhiều thứ không đáng backup.Ví dụ model:
30 GB
có thể download lại.
Thứ cần backup là:
Open WebUI database
configuration
knowledge bases
vector database
prompts
MCP configs
SearXNG config
custom scripts
Tách:
data
khỏi:
model cache
sẽ giúp backup nhẹ hơn rất nhiều.
38. Security cơ bản
Nếu chỉ dùng:localhost
khá đơn giản.
Nhưng khi expose AI server ra:
LAN
VPN
Internet
cần chú ý:
Authentication
HTTPS
Firewall
Rate limit
Permissions
Audit logs
Đặc biệt không nên expose trực tiếp:
Ollama API :11434
ra Internet mà không có lớp bảo vệ.
Nên:
Internet
↓
Reverse Proxy
↓
Authentication
↓
Open WebUI
↓
Ollama
39. Nếu muốn dùng từ bên ngoài nhà
Thay vì mở port thẳng:3000
11434
ra Internet, có thể dùng:
VPN
Tailscale
WireGuard
Cloudflare Tunnel
để truy cập.
Đối với hệ thống cá nhân, Tailscale/WireGuard thường rất tiện.
Kiến trúc:
Laptop
↓
VPN
↓
Home AI Server
↓
Open WebUI
↓
Ollama
Bạn có thể dùng Local AI của máy nhà khi đang đi nơi khác.
40. Có thể biến Local AI thành API cho app khác
Đây mới là lúc Local AI Server thực sự trở thành hạ tầng.Ví dụ:
Website
Mobile App
n8n
Python
Node.js
Desktop App
đều gọi:
AI API
Kiến trúc:
AI SERVER
│
Ollama API
↑
┌───────────┼───────────┐
↑ ↑ ↑
Web Mobile n8n
Một máy GPU có thể phục vụ nhiều ứng dụng.
41. Ví dụ: hệ thống AI cho developer
Ta có thể xây:Developer
↓
Open WebUI
↓
Local LLM
│
├── Project RAG
│
├── GitHub MCP
│
├── PostgreSQL MCP
│
├── SearXNG
│
├── Browser
│
└── Terminal Sandbox
Khi hỏi:
Agent có thể:Tại sao API login production đang chậm?
1. đọc architecture
2. đọc logs
3. query database
4. inspect code
5. search framework docs
6. tìm GitHub issue
7. đề xuất nguyên nhân
Đây khác hoàn toàn với việc chỉ paste error vào chatbot.
42. Ví dụ: hệ thống AI cho doanh nghiệp
Company Documents↓
RAG
CRM ───────────┐
ERP ───────────┤
Database ──────┤
GitHub ────────┤
↓
MCP
↓
Local AI
↓
Employee Chat
Nhân viên hỏi:
AI tìm SOP.Quy trình duyệt hợp đồng trên 500 triệu thế nào?
AI truy vấn CRM.Khách hàng ABC mua gì năm ngoái?
AI truy vấn ERP.Tồn kho sản phẩm X bao nhiêu?
Tất cả có thể chạy trong hạ tầng nội bộ.
43. Ví dụ: AI Research Server
Có thể xây:Local LLM
│
├── SearXNG
├── Browser
├── Firecrawl
├── arXiv
├── RAG
└── Citation Store
Workflow:
Question
↓
Plan
↓
Search
↓
Read
↓
Search Again
↓
Cross-check
↓
Store Sources
↓
Synthesize
Đây chính là nền tảng để xây một:
Private Deep Research Agent.
44. Đừng cài tất cả ngay ngày đầu tiên
Một sai lầm dễ mắc là thấy quá nhiều công cụ rồi cài:Ollama
Open WebUI
SearXNG
Qdrant
Firecrawl
n8n
LangChain
MCP
Prometheus
Grafana
...
cuối cùng mất hai ngày sửa Docker.
Hãy xây từng layer.
Phase 1
Ollama+
Open WebUI
Mục tiêu:
Chat local ổn định.
Phase 2
+ SearXNGMục tiêu:
Internet Search hoạt động.
Phase 3
+ RAGMục tiêu:
AI đọc tài liệu riêng.
Phase 4
+ MCPMục tiêu:
AI sử dụng external tools.
Phase 5
+ BrowserMục tiêu:
AI tương tác website.
Phase 6
+ Monitoring+ Backup
+ Security
Mục tiêu:
Biến thử nghiệm thành infrastructure.
45. Cấu hình tối thiểu để bắt đầu
Không cần máy AI hàng trăm triệu.Có thể bắt đầu bằng:
16–32 GB RAM
+
GPU 8–12 GB VRAM
để thử model nhỏ.
Tốt hơn:
32–64 GB RAM
+
16 GB VRAM
Nếu nghiêm túc với Local LLM:
64 GB RAM
+
24 GB VRAM
là một mốc rất thú vị.
Từ đây các model lớn hơn và context dài bắt đầu khả thi hơn đáng kể.
46. Nhưng RAM không thay hoàn toàn VRAM
Một model lớn có thể offload một phần sang RAM:GPU
+
System RAM
nhưng tốc độ thường giảm đáng kể.
Do đó:
Model fits VRAM
thường tốt hơn:
Model half GPU + half RAM
đặc biệt nếu dùng agent.
Agent cần tốc độ vì một request có thể tạo hàng chục inference cycle.
47. SSD cũng rất quan trọng
Một số model có thể:10 GB
20 GB
40 GB
80 GB
Nếu thử nhiều model:
500 GB
biến mất rất nhanh.
Do đó workstation AI nên cân nhắc:
2 TB SSD
hoặc lớn hơn.
Tuy nhiên model có thể download lại, nên không nhất thiết phải đặt chúng trên ổ backup đắt tiền.
48. Một cấu trúc thư mục hợp lý
Ví dụ:/ai-stack
│
├── docker-compose.yml
│
├── .env
│
├── open-webui/
│
│ └── data/
│
├── searxng/
│
│ └── settings.yml
│
├── vector-db/
│
├── mcp/
│
└── backups/
Git repository chỉ lưu:
compose
config templates
scripts
documentation
Không commit:
API keys
passwords
database
model files
49. Docker Compose hay cài trực tiếp?
Tôi sẽ chia:Ollama
Có thể chạy trực tiếp host.Lý do:
GPU access
performance
simple
Open WebUI
Docker.SearXNG
Docker.Qdrant
Docker.Tools
Docker nếu có thể.Kiến trúc:
HOST
│
├── Ollama → GPU
│
└── Docker
│
├── Open WebUI
├── SearXNG
├── Qdrant
└── MCP services
Khá sạch và dễ quản lý.
50. Phiên bản nâng cao: nhiều GPU / nhiều máy
Open WebUI hiện có thể cấu hình nhiều Ollama endpoint; tài liệu mô tả khả năng sử dụng nhiều Ollama instance với cơ chế phân phối request cơ bản khi model ID tương ứng.Ví dụ:
Open WebUI
│
┌───────────┴───────────┐
↓ ↓
AI Server 1 AI Server 2
RTX GPU RTX GPU
↓ ↓
Ollama Ollama
Một máy có thể chạy:
small-fast-model
máy kia:
large-model
hoặc cùng model để phục vụ concurrent users.
51. Từ một PC thành “AI Compute Node”
Đây là cách nhìn thú vị hơn.Một workstation không nhất thiết là:
Nó có thể trở thành:Máy tính tôi ngồi trước nó.
AI Compute Node
hoạt động trong LAN:
AI Server
│
├── PC
├── MacBook
├── iPad
├── Website
├── Mobile App
└── Automation
Tất cả dùng chung một GPU.
Đây là lúc hiệu quả kinh tế của Local AI tăng lên rất nhiều.
52. Local AI không cần thay thế Cloud AI
Sau khi xây xong hệ thống, bạn có thể nhận ra một điều:Local AI không cần phải thắng:
GPT
Claude
Gemini
ở mọi bài toán.
Nó chỉ cần làm tốt:
80% task thông thường
với chi phí biên gần như bằng:
Electricity
Còn:
20% khó nhất
gửi ra frontier model.
53. Kiến trúc cuối cùng tôi đánh giá là hợp lý nhất
USER↓
AI INTERFACE
Open WebUI
↓
AI ROUTER
│
┌──────────────────────┼──────────────────────┐
↓ ↓ ↓
LOCAL MODEL FRONTIER AI TOOLS
↓ ↓ ↓
Ollama GPT/Claude MCP
↓ /Gemini │
GPU ┌──┼─────┐
↓ ↓ ↓
Git DB Files
KNOWLEDGE
│
┌──────────┴──────────┐
↓ ↓
RAG Internet
↓ ↓
Vector DB SearXNG
↓
Browser
Đây không còn là:
Mà là:“Máy chạy LLM.”
một nền tảng AI cá nhân hoặc AI infrastructure của doanh nghiệp nhỏ.
54. Điều giá trị nhất không phải là model
Điều này nghe có vẻ ngược đời.Nhưng khi hệ thống trưởng thành, model có thể thay:
Qwen hôm nay
Gemma ngày mai
Model khác năm sau
Thứ thực sự có giá trị lâu dài là:
Knowledge Base
RAG
Search Infrastructure
MCP integrations
Prompts
SOP
Workflows
Security
Permissions
Data
Model chỉ là một component có thể thay thế.
Đây cũng là lý do không nên thiết kế hệ thống Local AI quá phụ thuộc vào một model cụ thể.
55. Kết luận
Một Local AI Server thực sự hữu dụng không chỉ là:GPU
+
LLM
mà là:
GPU
+
LLM
+
Interface
+
Search
+
RAG
+
Tools
+
MCP
+
Browser
+
Security
+
Monitoring
Có thể bắt đầu cực kỳ đơn giản:
Ollama
+
Open WebUI
rồi dần phát triển:
Ollama
+
Open WebUI
+
SearXNG
+
RAG
+
MCP
+
Browser
Cuối cùng chúng ta có một hệ thống mà AI có thể:
Think
↓
Search
↓
Read
↓
Retrieve
↓
Use Tools
↓
Act
↓
Check Result
Và đây chính là ranh giới giữa:
và:Local LLM
Một model Local chạy trên GPU có thể thú vị.Local AI Agent Infrastructure.
Nhưng một model có thể truy cập Internet, tài liệu, source code, database, logs và các công cụ của chúng ta mới thực sự hữu dụng.
Và có lẽ đây cũng là hướng đúng nhất nếu muốn đầu tư lâu dài vào Local AI:
Đừng chỉ xây một chiếc máy chạy model. Hãy xây một hạ tầng để bất kỳ model nào trong tương lai cũng có thể sử dụng dữ liệu và công cụ của bạn.