0

OmniRoute là gì? - AI Gateway 291 providers, so với 9Router thì sao?

Trước đây mình có viết một bài về 9Router — local proxy giúp Claude Code, Cursor... không còn bị "quota exceeded" giữa chừng. Bài đó đến giờ vẫn là một trong những bài được đọc nhiều nhất của mình, nên khi thấy OmniRoute nổi lên gần đây với cùng ý tưởng nhưng quy mô lớn hơn hẳn, mình tò mò ngồi soi thử.

Và đúng là có vài điểm trùng hợp thú vị: cùng chạy trên port 20128, cùng có khái niệm fallback theo tier (Subscription → API Key → Cheap → Free), cùng local-first. Nhưng OmniRoute đi xa hơn 9Router khá nhiều về số lượng provider, routing strategy, và cả nén token — thứ mà 9Router chưa có. Bài này mình viết để giới thiệu OmniRoute, so sánh với 9Router ở những điểm khác biệt rõ nhất, và chia sẻ cách cài đặt + dùng sao cho hợp lý.


OmniRoute là gì?

OmniRoute là một AI Gateway mã nguồn mở, chạy local trên máy bạn dưới dạng một local proxy server — đúng kiểu 9Router, LiteLLM hay OpenRouter self-hosted. Bạn trỏ AI coding tool của mình (Claude Code, Cursor, Cline, Copilot, Codex, OpenCode...) vào một endpoint duy nhất:

http://localhost:20128/v1

OmniRoute sẽ lo phần dịch format giữa các provider, theo dõi quota, và tự động fallback khi provider hiện tại hết quota, lỗi hoặc bị chặn.

┌──────────────────────────────┐
│ Claude Code / Cursor / Cline │
│ Codex / Copilot / OpenCode   │
└───────────────┬───────────────┘
                │ http://localhost:20128/v1
                ▼
┌─────────────────────────────────────────┐
│                OmniRoute                 │
│  • Format translation (OpenAI/Claude/    │
│    Gemini/Responses API)                 │
│  • 19 routing strategies + Auto-Combo    │
│  • Nén token 12-engine (15–95%)          │
│  • Circuit breaker / cooldown / lockout  │
└───────────────┬───────────────────────────┘
                │
                ├──▶ [Tier 1] Subscription (Claude Code, Codex, Copilot)
                │         ↓ hết quota
                ├──▶ [Tier 2] API Key (DeepSeek, Groq, xAI...)
                │         ↓ chạm budget
                ├──▶ [Tier 3] Cheap (GLM $0.5, MiniMax $0.2...)
                │         ↓ chạm budget
                └──▶ [Tier 4] Free (Kiro, Qoder, Pollinations...)

Giao diện thật trông như này — dashboard mở ngay sau khi cài, có sẵn Quick Start 4 bước và một sơ đồ topology hiển thị provider nào đang active:

Điểm khác biệt lớn nhất về quy mô: OmniRoute claim hỗ trợ 290+ AI providers (con số chính xác trong docs là 291), trong đó 90+ có free tier40+ miễn phí vĩnh viễn — gộp lại thành khoảng ~1.53 tỷ token miễn phí mỗi tháng nếu bạn connect đủ. Con số này được audit lại mỗi 2 tuần và hiển thị trực tiếp trên dashboard (/dashboard/free-tiers), không phải số PR quảng cáo cố định.

So với 9Router (40+ provider, 100+ model), đây rõ ràng là một cấp độ khác về độ phủ.


Tính năng nổi bật mà các AI gateway khác (kể cả 9Router) không có

9Router làm rất tốt phần fallback 3-tier đơn giản, dễ hiểu. Nhưng OmniRoute đi thêm vài bước mà lúc đọc docs mình thấy khá bất ngờ:

1. 19 routing strategy, không chỉ là fallback tuần tự

9Router có một chain ưu tiên cố định. OmniRoute cho chọn giữa 19 strategy khác nhau cho mỗi combo: priority, round-robin, cost-optimized, least-used, headroom, cache-optimized (pin request vào cùng account để tận dụng prompt cache), fusion (fan-out ra nhiều model rồi để một model "giám khảo" tổng hợp câu trả lời), pipeline (chain nhiều bước, output bước này là input bước sau)...

Nếu không muốn tự cấu hình, dùng thẳng auto, auto/coding, auto/cheap, auto/fast — engine Auto-Combo sẽ chấm điểm mọi provider đang kết nối trên 12 yếu tố (health, quota, cost, latency, success rate, độ mới...) rồi tự chọn.

2. Nén token 12 tầng — thứ 9Router hoàn toàn chưa có

Đây là tính năng mình thấy khác biệt nhất. OmniRoute có một pipeline 12 engine nén token (Session-Dedup, RTK, Caveman, LLMLingua-2, OmniGlyph...) chạy trong suốt, không cần đổi client. Combo mặc định RTK → Caveman tiết kiệm trung bình ~89% token cho request tool-heavy, dao động 78–95%, mà code/URL/JSON luôn được giữ nguyên byte-for-byte.

Ví dụ thực tế từ docs: một câu trả lời 69 token sau khi nén còn 19 token, nội dung kỹ thuật không đổi. Với các session code dài, đây là khoản tiết kiệm cộng dồn rất thật — cả về tiền lẫn về việc không bị tràn context window.

3. MCP server tích hợp sẵn + giao thức A2A

OmniRoute expose chính bản thân nó qua MCP (105 tools, 31 scope)A2A — nghĩa là một AI agent khác (kể cả Claude Code) có thể tự điều khiển OmniRoute: đổi combo, thêm provider, xem quota, bật/tắt nén... mà không cần bạn vào dashboard. 9Router chưa có lớp này.

4. Chạy được ở nhiều nơi hơn hẳn

Ngoài npm/Docker, OmniRoute còn có bản Desktop (Electron, có system tray), chạy trên điện thoại Android qua Termux (pkg install nodejs && npx -y omniroute), cài như PWA "Add to Home Screen", và có gói AUR cho Arch Linux. 9Router về cơ bản chỉ chạy dưới dạng server local/VPS.

5. Lớp chống chặn TLS fingerprint (JA3/JA4)

OmniRoute dùng wreq-js để giả lập TLS fingerprint qua 3 lớp proxy, giúp giảm khả năng bị một số AI provider chặn khi request đi qua local proxy — chi tiết kỹ thuật mà 9Router không đề cập trong docs.

6. Resilience 3 lớp độc lập

Thay vì một circuit breaker chung, OmniRoute tách riêng: Layer 1 ngắt cả provider khi lỗi 408/5xx liên tục, Layer 2 cooldown riêng từng key/account (exponential backoff, tránh thundering herd), Layer 3 khoá riêng từng model khi bị 429/404 — không kéo sập cả connection chỉ vì một model bị giới hạn.

7. Remote mode + 43 ngôn ngữ UI

Deploy OmniRoute trên VPS, rồi điều khiển từ CLI trên máy local qua scoped token (read/write/admin) — tiện cho việc chia sẻ một gateway cho cả team mà không phải mỗi người tự deploy. Dashboard cũng có sẵn 43 ngôn ngữ, bao gồm tiếng Việt.

8. Một loạt built-in tools, không chỉ dừng ở proxy

Cái này mình phát hiện khi vọc dashboard: OmniRoute có sẵn cả một mảng built-in tools chứ không đơn thuần là route request qua lại.

  • MCP Server built-in: vào Dashboard → MCP là thấy ngay một catalog tool có sẵn (bản mình đang chạy — v3.8.49 — hiển thị 37 tools trên 13 scope, qua 3 transport stdio/SSE/Streamable HTTP; theo docs bản mới nhất con số này lên tới 105 tools/31 scope). Bật lên là bất kỳ MCP client nào (Claude Desktop, Cursor...) cũng gọi thẳng được các tool quản trị OmniRoute — combo, provider, quota, compression...

  • ACP Agents built-in: một mảng riêng cho các CLI agent (Claude Code, Codex, Devin, Jules...) mà OmniRoute có thể tự spawn làm execution backend. Trên máy mình đang có sẵn 13 agent built-in để chọn, chưa cần cài thêm gì.

9Router không có lớp built-in tools này — đây là điểm khiến OmniRoute giống một "hệ điều hành nhỏ" cho AI agent hơn là chỉ một cái proxy chuyển tiếp request.


Hướng dẫn cài đặt

Yêu cầu

  • Node.js 22.x hoặc 24.x LTS (chính xác: >=22.22.2 <23 hoặc >=24.0.0 <27)
  • npm (hoặc pnpm nếu muốn cài nhanh hơn)

Cài nhanh bằng npm (khuyến nghị)

npm install -g omniroute
omniroute

Dashboard mở tại http://localhost:20128, API tại http://localhost:20128/v1. Ngay cả khi chưa connect provider nào, model auto vẫn trả lời được nhờ vài free provider không cần key (OpenCode Free, Felo) đã pre-wire sẵn:

curl http://localhost:20128/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello!"}]}'

Sau đó vào Dashboard → Providers → connect thêm Kiro AI (free Claude, ~50 credit/tháng/account) để có model chất lượng hơn auto mặc định.

Trỏ AI coding tool vào OmniRoute

Base URL: http://localhost:20128/v1
API Key:  [copy từ Dashboard → Endpoints]
Model:    auto   (hoặc provider/model cụ thể, ví dụ cc/claude-opus-4-6)

Verify lại bằng:

curl http://localhost:20128/v1/models -H "Authorization: Bearer YOUR_KEY"

Thấy danh sách model connected là xong.

Chạy bằng Docker

docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
  -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data \
  diegosouzapw/omniroute:latest

Chạy từ source (muốn hack/contribute)

git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute
cp .env.example .env && npm install
PORT=20128 npm run dev

Cài bằng pnpm (nhanh nhất, khuyến nghị nếu máy yếu)

pnpm add -g omniroute@latest --allow-build=better-sqlite3 --allow-build=@swc/core && omniroute

Lưu ý: better-sqlite3 là dependency optional — nếu máy không build được native binary, OmniRoute tự fallback sang node:sqlite (Node 22+) hoặc sql.js (WASM), không cần build tool. Nếu chạy CI/máy yếu, thêm OMNIROUTE_SKIP_POSTINSTALL=1 trước lệnh npm install -g omniroute để bỏ qua bước warm-up native.


Best practice khi dùng OmniRoute

Cho cá nhân

  • Connect free provider trước tiên (OpenCode Free, Kiro AI, iFlow-style free tier) làm lớp fallback cuối — đảm bảo dù hết quota mọi thứ vẫn còn model để dùng, giống tinh thần "never stop coding".
  • Dùng auto/coding hoặc auto/cheap thay vì tự dựng combo phức tạp lúc mới bắt đầu — Auto-Combo tự chấm điểm 12 yếu tố, đủ tốt cho hầu hết use case cá nhân.
  • Bật compression Standard hoặc Stacked (RTK → Caveman) cho session code dài — tiết kiệm rõ token mà không ảnh hưởng chất lượng câu trả lời kỹ thuật.
  • Theo dõi /dashboard/free-tiers định kỳ để biết quota nào sắp reset, tránh để phí quota subscription cuối tháng.
  • Đổi mật khẩu dashboard mặc định ngay kể cả khi chỉ chạy local — thói quen tốt phòng khi sau này đổi ý deploy lên VPS.

Cho đội nhóm

  • Deploy trên VPS, dùng Remote mode (omniroute connect <ip>) thay vì mỗi người tự cài — một gateway dùng chung, dễ audit, dễ quản lý provider tập trung.
  • Chia scoped token theo vai trò: read cho member chỉ cần xem, write cho người cấu hình combo, admin cho chủ VPS — tránh cả team dùng chung 1 admin token.
  • Bật REQUIRE_API_KEY=true, set JWT_SECRET mạnh, HOSTNAME=0.0.0.0 khi expose ra ngoài, và luôn đặt phía sau reverse proxy HTTPS (Caddy/nginx) hoặc Cloudflare Tunnel — đừng expose thẳng port 20128 ra internet.
  • Dùng key pool + fair-share quota khi cả team share chung một subscription (ví dụ Claude Code Max) — OmniRoute chia quota công bằng thay vì để một người "ăn" hết trước.
  • Bật guardrails + PII redaction opt-in nếu team làm việc với dữ liệu nhạy cảm, và tận dụng audit trail SQLite local để review lại lịch sử request khi cần.
  • Dùng tab Analytics (Usage, Combo Health, Cache Health, Route Trace) để quan sát cả team — biết ai/model nào đang tốn token nhất, fallback rate bao nhiêu, provider nào hay lỗi, thay vì đợi member báo "sao tool chạy chậm quá".
  • Cân nhắc MCP/A2A cho automation nội bộ — ví dụ để một agent tự kiểm tra health provider, cảnh báo khi quota sắp cạn, thay vì để người trực dashboard thủ công.

Lợi ích và rủi ro khi dùng OmniRoute

Lợi ích

  • Tiết kiệm chi phí thật: kết hợp free tier + nén token 12-engine, chi phí gọi API cho công việc code hằng ngày giảm đáng kể so với gọi thẳng một provider trả phí.
  • Giảm gián đoạn: fallback 4 tier + resilience 3 lớp giúp ít khi bị đứng hình vì rate limit hay provider sập.
  • Local-first, riêng tư: chạy 100% trên máy bạn, key mã hoá AES-256-GCM tại chỗ, không có tài khoản/đăng ký bắt buộc, không phải gửi API key qua một bên trung gian trên cloud.
  • Linh hoạt tool: một endpoint OpenAI-compatible dùng được cho gần như mọi AI coding tool phổ biến hiện nay, không phải cấu hình riêng cho từng cái.
  • Observability tốt cho team: dashboard Analytics có sẵn số liệu real-time — total/input/output token, est. cost, avg tokens/req, cost/req, I/O ratio, top model, top provider, fallback rate — cộng thêm Route Trace, Combo Health, Cache Health, Activity log. Team lead theo dõi được cả nhóm đang dùng model gì, tốn bao nhiêu, chỗ nào hay fail, mà không cần gắn thêm tool giám sát ngoài.

Rủi ro / điều cần lưu ý

  • Dự án còn khá mới và rất nhiều tính năng — bề mặt code lớn (đa nền tảng, 12 engine nén, MCP, A2A...) đồng nghĩa bề mặt lỗi tiềm ẩn cũng lớn hơn. Nên theo dõi CHANGELOG trước khi update phiên bản mới, nhất là bản next/next-web vốn được docs ghi rõ là không khuyến nghị cho production.
  • Một số free provider có latency cao hoặc rate limit thấp — hợp cho việc vọc, học, side-project, nhưng không nên đặt hoàn toàn vào free tier cho công việc cần độ ổn định cao.
  • Nén token aggressive có thể ảnh hưởng chất lượng nếu chọn sai mode — mức Ultra (~75%) hay OmniGlyph (experimental) nên test kỹ trước khi dùng cho task quan trọng, thay vì bật mặc định.
  • Rủi ro bảo mật nếu expose ra internet mà quên cấu hình — quên đổi mật khẩu mặc định, quên bật REQUIRE_API_KEY, hoặc để lộ port 20128 công khai là lỗi dễ mắc và hậu quả thật (lộ key, người ngoài dùng ké quota).
  • Tính năng MITM/TPROXY decrypt (bắt traffic của CLI không tôn trọng proxy env var) là tính năng nâng cao, dùng sai ngữ cảnh (ví dụ trên máy công ty, môi trường có chính sách bảo mật riêng) có thể vi phạm policy nội bộ — cần cân nhắc kỹ trước khi bật.
  • Phụ thuộc vào một dự án cộng đồng — dù có nhiều contributor, vẫn là rủi ro chung của mọi tool mã nguồn mở: roadmap, tốc độ fix bug phụ thuộc vào maintainer và cộng đồng.

Kết

So với 9Router, OmniRoute cho cảm giác là bản mở rộng đúng nghĩa: cùng triết lý "never stop coding" nhờ auto-fallback, nhưng đi xa hơn nhiều ở số lượng provider, routing strategy, và đặc biệt là mảng nén token — thứ mà nếu bạn code với AI cả ngày sẽ thấy giá trị rất rõ trên hóa đơn cuối tháng.

Điểm mình thích nhất là phần compression 12-engine và việc expose chính nó qua MCP/A2A — cảm giác OmniRoute không chỉ là một cái proxy đơn thuần mà đang cố trở thành một lớp hạ tầng AI gateway đầy đủ. Nhưng đúng như mọi dự án nhiều tính năng, càng nhiều thứ để cấu hình thì càng cần đọc docs kỹ trước khi đưa vào production, và tốt nhất nên bắt đầu từ những gì đơn giản (auto, connect vài free provider) trước khi vọc sâu vào routing strategy hay compression nâng cao.

Nếu bạn đã quen 9Router, chuyển qua OmniRoute không khó — concept tương đồng khá nhiều. Nếu bạn mới bắt đầu, đây cũng là một điểm khởi đầu tốt để làm quen với khái niệm AI gateway.


Tham khảo

Nếu như bạn đang gặp khó khăn trong vấn đề chuyên môn, cần người hỗ trợ về hệ thống, DevOps tools hay cần định hướng trong công việc thì mình tự tin có thể hỗ trợ được bạn. Liên hệ với mình để trao đổi thêm nhé https://hoangviet.io.vn/, mình rất vui khi được trao đổi và cộng tác với bạn. Happy Coding! 👨‍💻


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí