Dựng router lai AI Local và cloud bằng LiteLLM
Bài thực hành cho người đã chạy Ollama và có khoá API của một dịch vụ đám mây, muốn mọi ứng dụng gọi qua một địa chỉ duy nhất: việc thường ngày chạy model trên máy, khi model local lỗi thì tự chuyển sang đám mây. Đi từng bước với LiteLLM Proxy: viết config.yaml, chạy bằng Docker, khoá bằng master key, đặt ngân sách có database, gọi thử và kiểm tra sức khoẻ. Dữ kiện đối chiếu tài liệu chính thức LiteLLM ngày 20–21/10/2026.
Model local cho việc thường ngày, đám mây cho lúc cần
Một nhóm Marketing đã chạy Ollama cho việc tóm tắt, viết nháp. Nhưng mỗi ứng dụng lại cấu hình riêng: n8n trỏ thẳng Ollama, công cụ viết bài dùng khoá API đám mây, khi máy local tắt thì mọi thứ dừng, còn hoá đơn API không ai nắm. (Tình huống minh hoạ.)
Router lai giải quyết việc đó: mọi ứng dụng gọi một địa chỉ, router quyết định gửi tới model trên máy hay model đám mây. Phần lý thuyết đã có ở AI Local làm bộ não cho AI Agent; bài này đi từng bước với LiteLLM.
Router lai AI Local và cloud là gì?
Router lai AI Local và cloud là một proxy đứng giữa ứng dụng và các model: ứng dụng gọi một địa chỉ tương thích OpenAI, proxy gửi yêu cầu tới model chạy trên máy và tự chuyển sang model đám mây khi model local lỗi, đồng thời kiểm soát khoá và chi tiêu.
LiteLLM là một proxy như vậy: gọi hơn 100 API model theo chuẩn OpenAI, có theo dõi chi phí, cân bằng tải, ghi log; giấy phép MIT, trừ thư mục enterprise/. Bản ổn định mới nhất trên GitHub là v1.106.0 (18/10/2026).
- Ứng dụngn8n, OpenClaw, Hermes, công cụ nội bộ gọi cổng 4000
- LiteLLM ProxyKiểm tra khoá, chọn model theo tên
- Model localollama_chat tới Ollama cổng 11434
- Dự phòng đám mâyChỉ khi model local lỗi sau số lần thử lại
Nguồn: LiteLLM GitHub · LiteLLM – bản mới nhất
Chuẩn bị
- Ollama đang chạy trên máy, đã tải model chat (cách cài: Windows, Mac, Linux).
- Docker (cách được dùng trong bài). Hoặc chạy bằng dòng lệnh: tài liệu khuyên
uv tool install 'litellm[proxy]'; từ bản 1.84.0 cần Python 3.10 trở lên, pip trên Python cũ sẽ âm thầm cài bản 1.83.9. - Khoá API đám mây của nhà cung cấp bạn chọn, kèm hạn mức chi tiêu đặt ngay trong trang quản trị của họ.
- Quyết định trước loại dữ liệu nào không được rời máy: dữ liệu đó dùng tên model không có dự phòng.
Nguồn: LiteLLM – Quick start
Bước 1: Viết config.yaml
Tệp config.yaml có các khối chính: model_list (danh sách model), litellm_settings, router_settings, general_settings. Mỗi model có model_name là tên ứng dụng gọi, litellm_params.model là model thật. Khoá đọc từ biến môi trường bằng os.environ/…. Tài liệu không có một tệp mẫu gộp đủ Ollama, đám mây và master key, nên mẫu dưới đây ghép từ cú pháp chính thức của trang Ollama, Anthropic, Fallbacks và Budgets; hãy thử trên máy thử trước:
model_list:
- model_name: local # tên ứng dụng sẽ gọi
litellm_params:
model: ollama_chat/<tên model Ollama>
api_base: http://host.docker.internal:11434 # chạy LiteLLM thẳng trên máy: http://localhost:11434
keep_alive: "8m" # giữ model trong bộ nhớ 8 phút
model_info:
supports_function_calling: true # chỉ để true khi model có gọi công cụ (tools)
- model_name: noi-bo # chỉ chạy local, KHÔNG có dự phòng: dùng cho dữ liệu nhạy cảm
litellm_params:
model: ollama_chat/<tên model Ollama>
api_base: http://host.docker.internal:11434
- model_name: cloud
litellm_params:
model: anthropic/<tên model Claude>
api_key: os.environ/ANTHROPIC_API_KEY # khoá đọc từ biến môi trường
litellm_settings:
num_retries: 2 # thử lại trên cùng model trước khi chuyển
request_timeout: 120 # giây; ví dụ trong docs là 10, model local chậm nên để dài hơn
fallbacks: [{"local": ["cloud"]}] # local lỗi thì chuyển sang cloud
allowed_fails: 3
cooldown_time: 30 # tạm ngưng model lỗi trong 30 giây
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY| Mục | Ý nghĩa |
|---|---|
ollama_chat/… | Gọi Ollama theo kiểu chat; tài liệu LiteLLM khuyên dùng ollama_chat |
api_base | Địa chỉ Ollama. LiteLLM trong Docker dùng host.docker.internal; chạy thẳng trên máy dùng localhost |
keep_alive | Giữ model trong bộ nhớ bao lâu; -1 là giữ mãi |
fallbacks | Chạy theo thứ tự danh sách khi model chính lỗi sau num_retries lần |
context_window_fallbacks | Tuỳ chọn: chuyển model khi câu hỏi vượt context của model local |
cooldown_time, allowed_fails | Tạm ngưng model lỗi nhiều để không gọi mãi vào máy đang hỏng |
master_key | Khoá quản trị; trang Virtual Keys ghi phải bắt đầu bằng sk- |
noi-bo không nằm trong fallbacks: khi Ollama tắt, yêu cầu báo lỗi thay vì gửi dữ liệu lên đám mây. Đây là cách giữ đúng nguyên tắc "dữ liệu nhạy cảm ở lại máy".Nguồn: LiteLLM – config.yaml · LiteLLM – Ollama · LiteLLM – Anthropic · LiteLLM – Fallbacks · LiteLLM – Virtual keys
Bước 2: Chạy LiteLLM bằng Docker
Đặt khoá vào tệp .env cạnh config.yaml, không ghi thẳng vào lệnh hay vào config:
# Tạo tệp .env cạnh config.yaml; không gửi tệp này cho ai, không đưa lên Git
LITELLM_MASTER_KEY=sk-<chuỗi ngẫu nhiên dài>
ANTHROPIC_API_KEY=<khoá API đám mây>Lệnh dưới đây ghép từ lệnh Docker không database của tài liệu LiteLLM cùng cú pháp Docker chung (--env-file, gắn cổng vào 127.0.0.1, --add-host như trang n8n dùng cho Linux). Hãy thử trên máy thử trước:
openssl rand -hex 32 # tạo chuỗi ngẫu nhiên cho master key (thêm sk- ở đầu)
docker run -d --name litellm \
-v $(pwd)/config.yaml:/app/config.yaml \
--env-file .env \
--add-host host.docker.internal:host-gateway \
-p 127.0.0.1:4000:4000 \
ghcr.io/berriai/litellm:<tag phiên bản trên trang Releases> \
--config /app/config.yaml- Ghim phiên bản: tài liệu khuyên dùng tag cụ thể thay cho
latest; tagmain-stableđã bỏ từ bản 1.84.0. Image chính thức ởghcr.io/berriai, bản sao ởdocker.litellm.ai/berriai. - Linux: LiteLLM trong container gọi Ollama trên máy qua
host.docker.internalthì Ollama phải nghe ngoài127.0.0.1(đặtOLLAMA_HOST, kèm tường lửa), cách làm ở bài n8n và Ollama. - Không dùng Docker:
litellm --config config.yaml, thêm--detailed_debugđể xem log; proxy chạy ở cổng 4000,api_baseđổi thànhhttp://localhost:11434.
Nguồn: LiteLLM – Docker quick start · LiteLLM – Deploy · LiteLLM – Release cycle · n8n – host.docker.internal trên Linux
Bước 3: Gọi thử và kiểm tra đã chạy đúng
curl http://localhost:4000/health/liveliness # không cần khoá, trả "I'm alive!"
curl -X POST 'http://localhost:4000/chat/completions' \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-d '{"model": "local", "messages": [{"role": "user", "content": "Chào bạn, bạn là model nào?"}]}'-
/health/livelinesstrả "I'm alive!";/health/readiness(không cần khoá) báo cả tình trạng database. - Gọi model
localnhận câu trả lời; trên máy Ollama,ollama psthấy model đang chạy. - Thử dự phòng: tạm dừng Ollama rồi gọi lại
local, câu trả lời phải đến từ model đám mây; gọinoi-bophải báo lỗi. Bật lại Ollama sau khi thử. - Gọi không kèm khoá hoặc khoá sai phải bị từ chối.
- Ứng dụng khác dùng SDK OpenAI:
base_url="http://localhost:4000",api_keylà virtual key.
GET /health (cần khoá) gọi thật tới từng model nên tốn token phía đám mây; đừng đặt lịch gọi dày. Theo dõi tình trạng thường xuyên thì dùng /health/liveliness.Nguồn: LiteLLM – Health · LiteLLM – gọi thử · LiteLLM – SDK OpenAI
Bước 4: Ngân sách và khoá riêng cho từng ứng dụng (cần database)
Điểm dễ nhầm nhất: không có database thì max_budget không có tác dụng, proxy vẫn phục vụ khi đã vượt. Virtual key (khoá con cấp cho từng ứng dụng) cũng cần Postgres và master key. Tài liệu có sẵn bộ Docker Compose gồm LiteLLM và Postgres:
curl -sSLO https://github.com/BerriAI/litellm/raw/main/docker/docker-compose.quickstart.yml
printf 'LITELLM_MASTER_KEY=sk-%s\nLITELLM_SALT_KEY=sk-%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
echo 'LITELLM_BIND=127.0.0.1:' >> .env # chỉ nghe trên chính máy (biến có trong tệp compose)
docker compose -f docker-compose.quickstart.yml up -d- Giữ nguyên tệp
.env:LITELLM_SALT_KEYkhông được đổi sau khi đã thêm model, đổi đi thì thông tin đăng nhập đã lưu không đọc được nữa. - Bộ compose này không gắn
config.yaml; model lưu trong database. Mởhttp://localhost:4000/ui, đăng nhập useradmin, mật khẩu là master key nếu chưa đặtUI_PASSWORD, rồi thêm model local và model đám mây. Trên Linux, nếu container không gọi đượchost.docker.internal, cần thêm ánh xạhost-gatewaytương tự--add-host(cú pháp Docker chung, thử trên máy thử trước). - Tạo virtual key có ngân sách cho từng ứng dụng bằng lệnh dưới. Vượt ngân sách, yêu cầu bị từ chối với lỗi
ExceededTokenBudget; không đặtbudget_durationthì ngân sách không bao giờ đặt lại.
curl 'http://localhost:4000/key/generate' \
--header 'Authorization: Bearer <master key>' \
--header 'Content-Type: application/json' \
--data-raw '{"max_budget": 10, "budget_duration": "30d"}' # 10 USD mỗi 30 ngày (ví dụ minh hoạ)Ngân sách chung cho cả proxy đặt trong litellm_settings bằng max_budget và budget_duration (ví dụ 30d) của config.yaml; cách này cũng chỉ có tác dụng khi proxy có database, và bộ compose ở trên không gắn sẵn config.yaml. Ngân sách riêng theo từng model là tính năng Enterprise.
Nguồn: LiteLLM – Docker có Postgres · Tệp compose quickstart · LiteLLM – Budgets · LiteLLM – Admin UI · LiteLLM – Salt key
Chia việc giữa local và đám mây
| Tên model ứng dụng gọi | Dùng cho (ví dụ minh hoạ) | Khi Ollama lỗi |
|---|---|---|
noi-bo | Hợp đồng, dữ liệu khách, số liệu tài chính | Báo lỗi, chờ máy local |
local | Tóm tắt, viết nháp, phân loại tin nhắn | Chuyển sang cloud |
cloud | Việc khó: phân tích dài, văn phong tinh tế, Agent nhiều công cụ | Không liên quan |
Ứng dụng chỉ cần đổi tên model để đổi cách xử lý, không phải sửa khoá hay địa chỉ. Chọn việc nào đi đâu: 40 việc AI Local làm được.
Lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Container báo không kết nối được Ollama | Dùng localhost bên trong Docker, hoặc Ollama chỉ nghe 127.0.0.1 trên Linux | Dùng host.docker.internal, thêm --add-host, đặt OLLAMA_HOST kèm tường lửa |
| Đặt ngân sách mà vẫn vượt | Chạy không có database | Chạy bộ compose có Postgres |
| Cài bằng pip ra bản cũ 1.83.9 | Python dưới 3.10 | Dùng Python 3.10 trở lên hoặc uv tool install |
Không kéo được image main-stable | Tag này bỏ từ 1.84.0 | Dùng tag phiên bản dạng 1.84.0 hoặc v1.84.0, chọn bản mới trên trang Releases |
| Khoá đã lưu không đọc được | Đã đổi LITELLM_SALT_KEY | Khôi phục giá trị cũ từ bản sao lưu .env |
| Model local hay bị chuyển sang cloud | request_timeout quá ngắn so với tốc độ máy | Tăng thời gian chờ, chọn model nhỏ hơn |
| Hoá đơn đám mây tăng do kiểm tra | Gọi /health theo lịch dày | Dùng /health/liveliness |
Nguồn: LiteLLM – Quick start · LiteLLM – Release cycle · LiteLLM – Health
Cập nhật và gỡ cài đặt
- Cập nhật: đọc ghi chú phát hành trên GitHub, đổi tag phiên bản trong lệnh hoặc tệp compose, kéo image mới, chạy lại. Sao lưu tệp
.envvà database trước khi nâng bản. - Gỡ bản Docker không database (theo Docker):
docker rm -f litellm. - Gỡ bộ compose (theo Docker):
docker compose -f docker-compose.quickstart.yml down. Xoá thêm volume database là mất vĩnh viễn virtual key và nhật ký chi tiêu. - Thu hồi khoá: vô hiệu khoá API đám mây cũ trong trang quản trị nhà cung cấp nếu không dùng nữa.
Nguồn: LiteLLM releases · LiteLLM – Deploy
An toàn
- Không để cổng 4000 ra Internet khi chưa có master key; nên gắn cổng vào
127.0.0.1và gọi từ xa qua mạng riêng như Tailscale. - Master key, salt key, khoá đám mây chỉ nằm trong
.envhoặc trình quản lý bí mật; tài liệu production khuyên giữ master key trong secret manager. Không gửi qua chat, không dán vào prompt, không đưa lên Git. - Mỗi ứng dụng một virtual key có ngân sách, để khoá lộ thì thu hồi riêng mà không ảnh hưởng ứng dụng khác.
- Nhớ rằng dự phòng là gửi dữ liệu ra ngoài: tên model có fallbacks sang đám mây không dành cho dữ liệu nhạy cảm.
- Ollama vẫn giữ ở chế độ chỉ nghe nội bộ; LiteLLM là cửa duy nhất có khoá.
Danh sách kiểm tra đầy đủ: Chi phí thật và bảo mật khi dùng AI Local.
Nguồn: LiteLLM – Production
Bắt đầu từ đâu?
- Hôm nay: chạy LiteLLM không database với hai model
localvàcloud, gọi thử, thử tắt Ollama. - Tuần này: chuyển một ứng dụng (vd workflow n8n) sang gọi qua LiteLLM, thêm tên
noi-bocho việc nhạy cảm. - Khi nhiều ứng dụng, nhiều người: chạy bản có Postgres, cấp virtual key có ngân sách cho từng ứng dụng.
Bài tiếp theo: truy cập AI Local từ xa an toàn qua Tailscale. Muốn được tư vấn hoặc cài đặt AI Local theo nhu cầu riêng, bạn có thể đăng ký Tư vấn 1-1 hoặc Coaching 1-1 cho doanh nghiệp; chi phí báo sau buổi tư vấn.
Đọc tiếp: Truy cập từ xa qua Tailscale →
Câu hỏi thường gặp
LiteLLM có mất phí không?
Phần mềm LiteLLM có giấy phép MIT, trừ thư mục enterprise. Bạn tự chạy trên máy của mình nên không trả phí cho LiteLLM; vẫn trả phí API cho model đám mây khi yêu cầu đi sang đó. Ngân sách riêng theo từng model là tính năng Enterprise.
Vì sao đã đặt max_budget mà vẫn vượt?
Tài liệu LiteLLM ghi rõ: không có database thì max_budget không có tác dụng, proxy vẫn phục vụ khi đã vượt ngân sách. Muốn giới hạn chi tiêu, chạy LiteLLM kèm Postgres như mục Bước 4.
Dữ liệu nhạy cảm có bị đẩy lên đám mây khi model local lỗi không?
Có, nếu tên model đó được cấu hình fallbacks sang model đám mây. Với dữ liệu không được rời máy, tạo một tên model riêng chỉ trỏ tới Ollama và không khai báo fallbacks cho nó.
Ứng dụng nào gọi được qua LiteLLM?
Mọi ứng dụng nhận địa chỉ tương thích OpenAI: đặt base URL là địa chỉ proxy (cổng 4000) và khoá là master key hoặc virtual key. Cách nối OpenClaw, Hermes, n8n với endpoint loại này xem bài AI Local làm bộ não cho AI Agent.
Có nên dùng tag latest cho image Docker?
Tài liệu LiteLLM khuyên ghim một tag phiên bản cụ thể thay vì latest. Từ bản 1.84.0, tag có dạng 1.84.0 hoặc v1.84.0, không còn hậu tố -stable.
Tài liệu liên quan
- AI Local · AI AgentAI Local là gì? Chạy AI ngay trên máy tính, không tốn phí APIAI Local là gì: chạy model AI mở ngay trên máy tính của bạn, không trả phí API theo lượt, dữ liệu ở lại máy. Lợi ích, giới hạn, so sánh với AI đám mây.
- AI Local · AI AgentCài Ollama trên Windows có card NVIDIA từng bướcCài Ollama trên Windows có card NVIDIA: kiểm tra driver, cài đặt, dời thư mục model sang ổ khác, đặt biến môi trường, xác nhận chạy GPU, sửa lỗi, cập nhật, gỡ.
- AI Local · AI AgentCấu hình máy tính chạy AI Local: RAM, VRAM, Mac hay PC NVIDIACấu hình máy tính chạy AI Local: RAM, VRAM quyết định model nào chạy được, cách ước tính dung lượng theo Q4/Q8, Mac hay PC NVIDIA, ổ cứng, mua máy hay thuê GPU.
- AI Local · AI AgentCài AI Local trên Mac: Ollama và LM StudioCài AI Local trên Mac từng bước: xác định chip Apple hay Intel, cài Ollama và LM Studio, dời thư mục model, tắt tự chạy, kiểm tra, sửa lỗi, cập nhật, gỡ.
Xem tất cả tài liệu hướng dẫn →

Đăng ký Tư vấn 1-1 về AI Local
Chuyên gia Aduca cùng bạn xem nhu cầu, máy đang có và dữ liệu cần bảo vệ, rồi đề xuất nên chạy AI Local, dùng đám mây hay kết hợp. Dịch vụ cài AI Local nằm trong gói Tư vấn 1-1 hoặc Coaching 1-1; chi phí báo sau buổi tư vấn.
Nguồn tham khảo
- LiteLLM – GitHub (README, giấy phép)
- LiteLLM Docs – Proxy quick start
- LiteLLM Docs – Docker quick start
- LiteLLM Docs – config.yaml
- LiteLLM Docs – Ollama
- LiteLLM Docs – Anthropic
- LiteLLM Docs – Fallbacks, retries
- LiteLLM Docs – Budgets
- LiteLLM Docs – Virtual keys
- LiteLLM Docs – Health checks
Lịch sử cập nhật
- 21/10/2026 — Bản đầu.
Miễn trừ trách nhiệm
Bài viết thuộc chuỗi kiến thức của Công ty Cổ phần Giáo dục Aduca, chia sẻ miễn phí cho mục đích học tập. Thông tin kỹ thuật đối chiếu với tài liệu chính thức của các dự án và nền tảng tại ngày cập nhật (có ghi nguồn); phần nhận định là quan điểm của Aduca. OpenClaw, Hermes Agent, Claude (thương hiệu của Anthropic), ChatGPT (thương hiệu của OpenAI), n8n (thương hiệu của n8n GmbH), các phần mềm chạy model và các model AI mở (Ollama, LM Studio, Qwen, Gemma, gpt-oss…), Obsidian, Notion, phương pháp Building a Second Brain (Tiago Forte) cùng các phần mềm, dịch vụ nêu trong bài thuộc về chủ sở hữu tương ứng, không thuộc Aduca; Aduca không phải đối tác chính thức của các công ty này. Tính năng, gói và giá có thể thay đổi bất cứ lúc nào – hãy kiểm tra trang chính thức trước khi mua. Kết quả áp dụng phụ thuộc quy trình, dữ liệu và con người của từng doanh nghiệp; bài viết không cam kết doanh thu hay hiệu quả cụ thể. © 2026 Aduca — được trích dẫn khi ghi rõ nguồn aduca.vn.