判斷
OmniRoute 適合你的情境,但應把它當成:
單一使用者、單節點、Quota-aware 的 LLM Gateway
而不是「自動找到無限免費 token 的工具」。
你的正確架構不是把所有 provider 全部塞進 auto/coding,而是建立不同用途的隔離路由:
Claude Code / Codex / OpenCode / Sub-agents
│
▼
OmniRoute Server
│
┌─────────────┼─────────────┐
▼ ▼ ▼
訂閱資源池 免費資源池 低價 API 池
Claude Max ×2 OpenRouter Free DeepSeek V4 Flash
ChatGPT Pro ×2 其他 Free Tier OpenRouter Paid
OmniRoute 支援多帳號 OAuth、quota tracking、automatic fallback、fill-first、headroom、reset-aware、cache-optimized 等策略,基本能力符合你的需求。([GitHub])
一、Server 配置
OmniRoute 本身不執行模型,只負責:
- OAuth token refresh
- Protocol translation
- Streaming proxy
- Quota tracking
- SQLite
- Prompt compression
- Routing
- Logging
不需要 GPU。
建議規格
| 使用規模 | CPU | RAM | SSD |
|---|---|---|---|
| 測試 | 2 vCPU | 4 GB | 20 GB |
| 你的使用量 | 4 vCPU | 8 GB | 40–80 GB |
| 20 個以上並行 Agent | 8 vCPU | 16 GB | 100 GB |
OmniRoute 官方甚至提供 512 MB 的低記憶體 PM2 配置,但你有大量 streaming、logging、compression 與多 Agent,不能按照最低規格部署。([GitHub])
部署原則
只部署一個 active instance。
OmniRoute 使用本機 SQLite,而且部分 circuit-breaker、model lockout 狀態只保存在單一 process 的記憶體內;若直接建立兩個 replica,兩邊可能不知道對方已經耗盡某個帳號,反而同時撞擊同一 provider。([GitHub])
推薦:
Ubuntu 24.04
Docker Compose
Named volume
每日備份 SQLite data
Tailscale 私有連線
不公開 dashboard
二、Docker 部署
先建立 secrets:
mkdir -p /opt/omniroute
cd /opt/omniroute
openssl rand -hex 32
openssl rand -hex 32
openssl rand -base64 32
建立 .env:
JWT_SECRET=第一組隨機值
API_KEY_SECRET=第二組隨機值
INITIAL_PASSWORD=第三組強密碼
建立 compose.yaml:
services:
omniroute:
image: diegosouzapw/omniroute:latest
container_name: omniroute
restart: unless-stopped
stop_grace_period: 40s
ports:
- "127.0.0.1:20128:20128"
environment:
NODE_ENV: production
HOSTNAME: 0.0.0.0
PORT: 20128
DATA_DIR: /app/data
JWT_SECRET: ${JWT_SECRET}
API_KEY_SECRET: ${API_KEY_SECRET}
INITIAL_PASSWORD: ${INITIAL_PASSWORD}
volumes:
- omniroute_data:/app/data
volumes:
omniroute_data:
啟動:
docker compose pull
docker compose up -d
docker compose logs -f
官方 Docker 範例同樣建議把服務綁定在 127.0.0.1:20128,而不是直接暴露在 Internet。([GitHub])
第一次設定時使用 SSH tunnel:
ssh -L 20128:127.0.0.1:20128 user@SERVER_IP
本機開啟:
http://localhost:20128
長期使用則透過 Tailscale 或其他 private network 存取,不要直接開放公網 port 20128。
OmniRoute 的 Remote Mode 支援 VPS、家用 Server 或 Tailnet,並將 management token 和 inference API key 分開;遠端 token 也可限制成 read、write 或 admin scope。([GitHub])
正式環境不要追蹤 latest
先測試某個固定版本,再 pin:
image: diegosouzapw/omniroute:<已驗證版本>
OmniRoute 更新速度很快,provider adapter、OAuth 與 routing behavior 都可能隨版本改動。
三、加入你的帳戶
進入:
Dashboard → Providers
分別建立六個 connection。
訂閱帳戶
Claude Code OAuth
├── claude-max-a
└── claude-max-b
Codex OAuth
├── chatgpt-pro-a
└── chatgpt-pro-b
不要把第二個帳號覆蓋到第一個 connection。每一個帳號必須是獨立 connection。
OmniRoute 文件顯示 Claude Code 與 Codex 都能透過 OAuth 加入,並追蹤五小時與 weekly reset;多帳號 rotation 是在 OmniRoute 內部處理,不是在 Codex 或 Claude Code Client 裡處理。([GitHub])
API Provider
DeepSeek
└── deepseek-main
OpenRouter
└── openrouter-main
OpenRouter 使用正常 API key,不要使用 browser cookie。
DeepSeek 型號名稱修正
截至 2026 年 8 月 6 日,DeepSeek 官方 API 列出的型號是:
deepseek-v4-flash
deepseek-v4-pro
官方沒有列出 deepseek-v4-lite。若你的控制台顯示 V4 Lite,可能是舊稱、第三方 alias 或特定方案名稱;OmniRoute 內應以 /v1/models 實際回傳的 model ID 為準。([DeepSeek API Docs])
檢查:
curl https://你的私人OmniRoute位址/v1/models \
-H "Authorization: Bearer YOUR_OMNIROUTE_KEY" |
jq '.data[].id'
四、不要只建立一個 auto 路由
你的目標包含:
- 用完訂閱額度
- 使用 Free Tier
- 使用 DeepSeek quota
- 防止意外產生 API 費用
- 維持 coding 品質
這些需求互相衝突,不能只靠單一 auto/coding。
應建立四條路由。
五、路由一:premium-session
用途:
- Architect
- 複雜 debugging
- 大型 refactor
- 最終 review
- 主 Agent
Targets:
1. claude-max-a / Claude coding model
2. claude-max-b / Claude coding model
3. chatgpt-pro-a / Codex model
4. chatgpt-pro-b / Codex model
策略:
cache-optimized
理由:
長時間 coding session 的最大浪費來自切換 connection 後 prompt cache 失效。cache-optimized 會優先使用最可能持有該 prompt prefix cache 的 connection。([GitHub])
設定:
max_concurrent:
claude-max-a 1
claude-max-b 1
chatgpt-pro-a 1
chatgpt-pro-b 1
先從每帳號一個 concurrent request 開始。不要讓二十個 Sub-agent 同時撞同一個 Claude 或 Codex OAuth connection。
OmniRoute 本身支援 per-connection max_concurrent 與 semaphore queue,超過上限的 request 會等待,不會立刻把 upstream 打到大量 429。([GitHub])
六、路由二:subscription-drain
用途:
- 大量獨立 coding task
- 接近 quota reset 前清空剩餘額度
- 不需要維持同一條長對話的 batch task
Targets 同樣放四個訂閱帳戶。
策略:
reset-aware
或:
headroom
兩者差異:
| 策略 | 行為 | 適合情境 |
|---|---|---|
reset-aware |
優先消耗較快要 reset 的配額 | 防止五小時額度沒用完就重置 |
headroom |
優先使用剩餘 quota 最多的帳戶 | 平衡四個帳戶 |
fill-first |
先榨乾第一個,再切下一個 | 純 batch、接受單帳號提早限流 |
cache-optimized |
優先維持 prompt cache | 長 session |
你的預設應使用 reset-aware,不是 fill-first。fill-first 很容易造成第一個帳戶短時間被完全耗盡,其餘帳戶仍未充分使用。各策略是 OmniRoute 原生支援項目。([GitHub])
七、路由三:free-worker
用途:
- README 更新
- 測試生成
- 簡單 CRUD
- Log 摘要
- 文件分類
- 小型 code migration
- Repo map
- 搜尋結果整理
Targets:
1. OpenRouter openrouter/free
2. OpenRouter 指定的:free coding model
3. 其他已驗證的官方 Free Tier
策略:
fill-first
這條路由要使用獨立 OmniRoute API key,並排除:
Claude
Codex
DeepSeek paid
所有其他付費 provider
這樣 Free Tier 失敗時,request 應直接失敗,而不是偷偷切換到付費模型。
OpenRouter 免費帳戶目前只有每日 50 requests;帳戶曾購買至少 US$10 credits 後,免費模型上限提高到每日 1,000 requests,但仍是每分鐘 20 requests。OpenRouter 官方也將 free models 定位為實驗、學習和低流量用途,而不是 production 主力。([OpenRouter])
因此:
OpenRouter Free ≠ 你的主要 token 來源
它適合每天數十到一千個小任務,不適合大型 Agent 長 session。
OpenRouter Free 限制
max_concurrent: 1
local retry: 0 或最多 1 次
max queue depth: 10
失敗 request 也可能消耗每日 request quota,因此不能讓 Agent 無限 retry。([OpenRouter])
八、路由四:deepseek-worker
用途:
- 所有主要 Sub-agent
- implementation
- code editing
- test-and-fix loop
- 中大型 repo 操作
Target:
deepseek/deepseek-v4-flash
不要混入免費隨機模型。
策略:
cache-optimized
或直接指定 DeepSeek connection,不經 combo。
建議:
max_concurrent: 16–32
DeepSeek 官方的 V4 Flash account-level concurrency 上限是 2,500,因此真正限制通常不會是 DeepSeek,而是你的 Agent runner、網路、檔案系統和成本控制。([DeepSeek API Docs])
DeepSeek quota 的重要問題
DeepSeek 官方會先消耗贈送餘額,再消耗充值餘額。([DeepSeek API Docs])
因此,如果你只想使用免費 quota,不想進入付費餘額:
- 關閉 auto-recharge。
- DeepSeek 帳號不要預存大量餘額。
- 建立獨立的
worker-deepseekOmniRoute key。 - 設定每日與每月 USD limit。
- 達到上限後使用 strict block,不要自動 fallback 到其他 paid provider。
OmniRoute 支援 per-request budget ceiling 與 strict fallback;超過限制時可以直接回傳 HTTP 402,而不是偷偷選擇較貴 provider。([GitHub])
九、實際 Agent 分配
| Agent 類型 | 使用路由 | 說明 |
|---|---|---|
| Architect | premium-session |
Claude/Codex 處理規劃 |
| Research Agent | free-worker |
低成本資料整理 |
| Coding Worker | deepseek-worker |
主要大量執行層 |
| Test Fixer | deepseek-worker |
執行測試與修正 |
| Final Reviewer | premium-session |
使用另一模型檢查 |
| Batch quota burner | subscription-drain |
接近 reset 時跑獨立任務 |
正確流程:
Claude / Codex
產生 implementation plan
│
▼
DeepSeek V4 Flash
分割成多個 coding workers
│
▼
Claude / Codex
檢查 diff、測試與風險
不要讓所有 Sub-agent 都使用 premium-session。
十、為不同工作建立不同 API Key
至少建立四把 OmniRoute endpoint key:
architect-key
worker-key
free-only-key
review-key
權限與 provider 限制
architect-key
允許:
Claude Max
ChatGPT Pro
排除:
Free Tier
DeepSeek
OpenRouter Paid
worker-key
允許:
DeepSeek V4 Flash
每月 budget:
依你的成本上限設定
Budget fallback:
strict
free-only-key
允許:
OpenRouter Free
已驗證 Free Tier
排除:
所有付費 provider
review-key
允許:
Claude Max
ChatGPT Pro
最大同時 request:
2
OmniRoute 的 auto/* route 支援 per-API-key candidate exclusion,因此不同 Agent 即使連向同一台 OmniRoute,也能看到不同候選模型池。([GitHub])
十一、Claude Code 與 Codex 連線
Claude Code
~/.claude/settings.json:
{
"env": {
"ANTHROPIC_BASE_URL": "https://你的私人OmniRoute位址",
"ANTHROPIC_AUTH_TOKEN": "architect-key"
}
}
OmniRoute 的 Anthropic-compatible URL 不應加 /v1。([GitHub])
Codex CLI
export OPENAI_BASE_URL="https://你的私人OmniRoute位址"
export OPENAI_API_KEY="architect-key"
codex
或者使用不同 shell alias:
alias codex-premium='OPENAI_BASE_URL=https://omniroute.example OPENAI_API_KEY=architect-key codex'
alias codex-worker='OPENAI_BASE_URL=https://omniroute.example OPENAI_API_KEY=worker-key codex'
alias codex-free='OPENAI_BASE_URL=https://omniroute.example OPENAI_API_KEY=free-only-key codex'
十二、Compression 設定
不要直接開 aggressive 或 ultra。
推薦:
主 Agent:
Compression = off 或 lite
DeepSeek Worker:
Compression = standard
Log / test output:
RTK compression = on
程式碼 diff:
不要壓縮
Error stack:
只保留前後關鍵段落
OmniRoute 提供多種 compression engine,但「15–95% savings」是專案自己的範圍性宣稱,不代表 coding workload 一定能達到。專案目前包含 RTK、Caveman、LLMLingua-2 等多種 pipeline。([GitHub])
你的最大節省來源仍然是:
不要把完整 repo 傳給每個 Sub-agent
不要重送完整 build log
不要讓每個 Agent 共用完整主對話
固定 system prompt 與 tool schema 順序
維持同一 session 的 provider stickiness
十三、不要啟用的功能
OmniRoute 專案包含:
- Web-cookie provider
- MITM/TPROXY
- TLS JA3/JA4 fingerprint imitation
- Stealth routing
- 各種非正式免費 provider adapter
這些功能不是你的必要需求。專案 README 與技術文件明確列有 TLS fingerprint impersonation、MITM 與 stealth 功能。([GitHub])
正式環境關閉:
Web cookie imports
MITM / TPROXY
TLS fingerprint spoofing
Account farming
Proxy rotation
Free-account auto creation
Browser session extraction
理由不是只有封號風險。這些 provider 可能讀取:
- 你的 source code
- Environment variables
- Tool outputs
- Private repo context
- Customer data
- SSH 或部署資訊
OmniRoute 自己的 Free Tier audit 也將許多 provider 標記為 caution 或 ambiguous,而且估計的 recurring free token 總量會隨 provider 政策快速下降。([GitHub])
OpenAI 條款也禁止分享帳號憑證或將帳戶提供給其他人使用。你的 OmniRoute 應保持 single-user,不應變成公司內部多人共用的 ChatGPT Pro subscription proxy。([OpenAI])
最終配置
Server
├── 4 vCPU
├── 8 GB RAM
├── Ubuntu 24.04
├── Docker
├── Tailscale only
└── Single OmniRoute instance
Connections
├── Claude Max A
├── Claude Max B
├── ChatGPT Pro A
├── ChatGPT Pro B
├── DeepSeek V4 Flash
└── OpenRouter
Routes
├── premium-session
│ └── cache-optimized
├── subscription-drain
│ └── reset-aware
├── deepseek-worker
│ └── cache-optimized
└── free-worker
└── fill-first
Concurrency
├── Claude account: 1
├── Codex account: 1
├── OpenRouter Free: 1
└── DeepSeek Flash: 16–32
Security
├── No public dashboard
├── No shared users
├── No web cookies
├── No stealth
├── No MITM
├── Pin OmniRoute version
└── Encrypted daily data backup
以你的流量,OmniRoute 最有價值的不是把四個帳戶「輪流切換」,而是將每個 Agent 類別鎖定在不同成本層,並利用 reset-aware 消耗即將重置的訂閱 quota、利用 cache-optimized 保住 DeepSeek prompt cache,再以 API-key budget 隔離免費與付費流量。