Cách Dùng 9Router: Một Endpoint Cục Bộ Cho Mọi API AI
Cài 9Router, nối API key và model chạy cục bộ của bạn, tạo combo fallback và trỏ công cụ code về localhost:20128. Kèm tài khoản không nên đặt sau router.
Mỗi công cụ code đều đòi base URL, key và tên model riêng. Khi một quota cạn giữa lúc đang refactor, bạn phải sửa ba file cấu hình để đổi nhà cung cấp, rồi công cụ tiếp theo vẫn trỏ vào tài khoản đã hết. 9Router đặt một proxy cục bộ vào giữa. Các công cụ chỉ gọi một endpoint tương thích OpenAI tại http://localhost:20128/v1, còn proxy quyết định nhà cung cấp nào trả lời.
Bài này đi qua cài đặt, các bước bảo vệ lần chạy đầu, kết nối provider, combo fallback và nối công cụ, dựa trên ảnh chụp dashboard 9Router v0.5.112. Bài cũng tách các credential nên đặt sau router khỏi những credential không nên.
9Router Làm Được Gì, Và Không Làm Được Gì
9Router là ứng dụng cục bộ giấy phép MIT, cần Node.js 20 trở lên. Nó mở một API tương thích OpenAI, chuyển request tới các provider bạn đã kết nối, giữ danh sách fallback có thứ tự gọi là combo và ghi lại mức sử dụng. Router chỉ chuyển request giữa các quota bạn đã có. Nó không tạo thêm dung lượng. Cách duy nhất để "có thêm" từ router là đặt thêm tài khoản phía sau, và không phải tài khoản nào cũng được phép nằm ở đó.
Cài Đặt Và Chạy Lần Đầu
Cài từ npm rồi khởi động:
npm install -g 9router
9routerHoặc chạy Docker image đã phát hành, dữ liệu lưu trong thư mục được mount:
docker run -d --name 9router -p 20128:20128 \
-v "$HOME/.9router:/app/data" -e DATA_DIR=/app/data \
decolua/9router:latestDashboard mở tại http://localhost:20128/dashboard. README cho biết mật khẩu đăng nhập lần đầu lấy từ biến INITIAL_PASSWORD, và là 123456 nếu biến này không được đặt. Hãy đặt mật khẩu riêng trước lần khởi động đầu tiên:
INITIAL_PASSWORD='a-long-random-string' 9router
Thanh bên bên trái ảnh liệt kê các trang của dashboard. Bài này đi qua Endpoint & Key, Providers, Combo, Usage, Token Saver và CLI Tools theo đúng thứ tự đó. Trang Quota Tracker không nằm trong bài.
Trang Endpoint & Key cho bạn hai giá trị mà mọi client cần: base URL và một API key. Hãy để "Require API key" ở trạng thái bật để chỉ request mang key này mới được chấp nhận.
Khóa Dashboard Trước Mọi Việc Khác
Mở Settings và xem thẻ Security. "Require login" nên được bật, và các ô mật khẩu cho phép bạn thay mật khẩu mặc định. Trang này cũng hiển thị vị trí database, ~/.9router/db/data.sqlite. Hãy coi thư mục đó như kho mật khẩu, vì router lưu các kết nối và key trong bộ nhớ cục bộ.

Trang Endpoint cũng cảnh báo bạn đổi mật khẩu mặc định trước khi bật Tunnel hoặc Tailscale. Cả hai đều đưa dashboard ra một mạng bạn không kiểm soát. Hãy tắt chúng nếu bạn không cần truy cập từ xa.
Kết Nối Provider: Chọn Thứ Được Đặt Sau Router
Trang Providers liệt kê các endpoint tùy chỉnh tương thích OpenAI hoặc Anthropic, tiếp đến là provider OAuth, rồi provider có gói miễn phí. README bổ sung hơn 40 provider dùng API key.

Provider OAuth là những nơi bạn đăng nhập bằng tài khoản subscription thay vì dán API key. Danh sách này có Claude Code, Antigravity (công cụ lập trình agent của Google), GitHub Copilot và Cursor. Một đăng nhập có mặt trong danh sách không cho biết nhà cung cấp của nó có cho phép cách dùng này hay không. README tôi đọc không nói việc đi qua proxy bằng gói subscription có tuân thủ điều khoản của từng nhà cung cấp không, nên bạn phải tự kiểm tra:
| Credential | Văn bản của nhà cung cấp nói gì | Khuyến nghị |
|---|---|---|
| API key, trả theo token | Anthropic yêu cầu lập trình viên dùng xác thực bằng API key qua Claude Console hoặc một nhà cung cấp cloud được hỗ trợ | Kết nối |
| Server cục bộ (LM Studio, Ollama) | Phần cứng của bạn, quy tắc của bạn | Kết nối |
| Gói miễn phí | Giới hạn thay đổi, và README ghi gói miễn phí của Gemini CLI, Qwen Code và iFlow đã ngừng | Chỉ làm phương án dự phòng cho tác vụ ít quan trọng |
| Đăng nhập gói Claude | Anthropic nói OAuth dành cho việc dùng thông thường Claude Code và các ứng dụng gốc khác của Anthropic, không cho phép chuyển request qua credential gói Free, Pro, Max hay Ultra thay cho người dùng, và có thể áp dụng biện pháp mà không báo trước | Bỏ qua, dùng API key |
| Đăng nhập Antigravity | Mục 6 của Antigravity Additional Terms coi việc dùng phần mềm bên thứ ba để truy cập dịch vụ (ví dụ nêu tên là OpenClaw) là vi phạm, và có thể dẫn tới đình chỉ hoặc chấm dứt tài khoản Antigravity và Gemini CLI | Bỏ qua |
Proxy cục bộ không phải Claude Code hay Antigravity, nên tôi coi cả hai đăng nhập subscription này là vùng cấm. Sự tiện lợi của một endpoint không đáng để mất tài khoản đứng sau công cụ hằng ngày của bạn.
Gói miễn phí cần sự dè dặt tương tự. 9Router hỗ trợ round-robin (chia request lần lượt) giữa nhiều tài khoản của cùng một provider. Xoay vòng hai API key của chính bạn thì không sao. Gom nhiều tài khoản miễn phí để không giới hạn nào bị chạm tới là kiểu né quota mà điều khoản của provider sinh ra để chặn. Hãy kiểm tra endpoint miễn phí có lưu hay dùng prompt để huấn luyện không trước khi gửi code riêng tư qua đó.
Ví Dụ: Kết Nối OpenRouter Và Thử Model Miễn Phí
OpenRouter là lựa chọn an toàn cho kết nối đầu tiên vì nó dùng API key thông thường. Các bước:
- Ở trang Providers, mở OpenRouter.
- Bấm Add, đặt tên cho kết nối và dán key tạo tại
openrouter.ai/settings/keys. - Trong Available Models, tìm
openrouter/openrouter/freevà bấm Test.

Kết nối hiện active và model có dấu tích xanh khi một request thật trả về. Tôi bấm Test một lần để chụp ảnh này. Banner trên trang ghi "27+ free models, no credit card needed, 200 req/day", đó là con số của dashboard và tôi không bảo đảm được, nên hãy kiểm tra giới hạn trên trang của OpenRouter. Một key của chính bạn là đủ ở đây. Mở thêm tài khoản để nới mức giới hạn hằng ngày là kiểu gom tài khoản đã nói ở trên.
Tạo Combo
Combo là một cái tên trỏ tới danh sách model có thứ tự. Trang Combos mô tả bốn chiến lược: Fallback thử lần lượt các model khi lỗi, Round Robin xoay vòng giữa các model, Smart Router nhờ một decision model System One chọn trước khi sinh, còn Fusion hỏi song song mọi model rồi để một judge tổng hợp câu trả lời. Fusion tính tiền mọi model trong nhóm cộng thêm judge, nên chỉ dành cho prompt hiếm và có giá trị cao. Về ý tưởng decision model, xem Jev và các model System One.

Combo đầu tiên hợp lý, đặt tên daily-coder, dùng Fallback với các credential bạn sở hữu:
| Thứ tự | Model | Lý do |
|---|---|---|
| 1 | Model chính của bạn qua API key trả phí | Chất lượng tốt nhất cho việc thật |
| 2 | Một model rẻ hơn qua API key khác | Vẫn chạy khi model đầu bị giới hạn tốc độ |
| 3 | Model chạy bằng LM Studio trên máy của bạn | Miễn phí, riêng tư, không quota |
Tầng cục bộ là câu trả lời thẳng thắn cho tình huống mọi thứ cùng sập. Nó tốn tiền điện.
Trỏ Công Cụ Về Endpoint
Client tương thích OpenAI nào cũng cần hai thiết lập: base URL http://localhost:20128/v1 và key lấy từ trang Endpoint. Thử nhanh từ terminal, với key đó đã được gán vào biến môi trường NINEROUTER_KEY:
curl http://localhost:20128/v1/chat/completions \
-H "Authorization: Bearer $NINEROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "daily-coder", "messages": [{"role": "user", "content": "Say hello"}]}'Cùng lời gọi bằng Python:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:20128/v1", api_key="<your 9Router key>")
reply = client.chat.completions.create(
model="daily-coder",
messages=[{"role": "user", "content": "Say hello"}],
)
print(reply.choices[0].message.content)GET /v1/models liệt kê các model và combo mà router cung cấp. Trang CLI Tools có sẵn màn hình thiết lập cho các coding agent.

Hãy xem phần ánh xạ model trước khi bấm Apply. Các tên điền sẵn bắt đầu bằng cc/, tức đường đi qua đăng nhập gói Claude. Hãy thay chúng bằng tên combo hoặc model của provider dùng API key, hoặc dùng Manual Config để tự sửa thiết lập của công cụ.
Các dạng request ở trên theo README. Trong lần thử này, tôi mở hộp thoại Create Combo rồi hủy, và không gửi traffic nào qua combo.
Theo Dõi Mức Dùng Và Cắt Bớt Token
Trang Usage hiển thị tổng request, token đầu vào, token cache, token đầu ra, cùng bảng request gần đây có model đã trả lời từng lời gọi. Ô chi phí được ghi là "Estimated, not actual billing", nên hãy đối chiếu với hóa đơn của nhà cung cấp thay vì tin vào nó.

Trang Token Saver liệt kê bốn tùy chọn: RTK nén đầu ra của tool, Headroom nén context qua một proxy bên ngoài (chưa được cài ở đây), Caveman yêu cầu câu trả lời ngắn gọn, và Ponytail nghiêng về code tối giản. Dashboard nêu RTK giảm 60-90% token đầu vào, còn README nói 20-40%. Hãy coi cả hai là số liệu từ phía nhà phát triển và tự đo trên workload của bạn bằng cách so tổng Usage trước và sau. Cơ chế đằng sau các mức tiết kiệm này được giải thích trong nén context cho coding agent.

Các Dạng Lỗi Cần Lường Trước
- Một tiến trình cục bộ phục vụ mọi công cụ. Nếu nó dừng, mọi client lỗi cùng lúc. Hãy giữ cấu hình trực tiếp của từng provider ở nơi bạn khôi phục được nhanh.
- Fallback che đi sự tụt chất lượng. Combo rơi xuống model yếu hơn sẽ đổi kết quả của bạn mà không báo lỗi. Hãy xem cột model trong các request gần đây.
- Credential tập trung một chỗ. Router giữ mọi key đã kết nối, nên mật khẩu dashboard yếu làm lộ tất cả.
- Quy định của provider thay đổi. Điều khoản, gói miễn phí và danh sách model đều thay đổi, nên hãy đọc lại khi một kết nối đột nhiên lỗi.
Một Endpoint, Tài Khoản Của Chính Bạn
9Router có giá trị khi nó gom những thứ bạn đã trả tiền hoặc tự chạy: API key, một model cục bộ và một lớp đệm gói miễn phí nhỏ. Khi nó kéo subscription vượt quá mức nhà cung cấp cho phép, bạn có nguy cơ bị đình chỉ chính tài khoản mà công cụ hằng ngày của bạn phụ thuộc vào.
Tài Liệu Tham Khảo
- decolua/9Router trên GitHub: lệnh cài đặt, cổng mặc định, provider, combo và ghi chú về token saver.
- Claude Code: Legal and compliance: chính sách xác thực và sử dụng credential của Anthropic.
- Google Antigravity Additional Terms: Mục 6 về truy cập bằng phần mềm bên thứ ba.
