OmniRoute as LLM Proxy

判斷

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-firstheadroomreset-awarecache-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 也可限制成 readwriteadmin 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-firstfill-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-deepseek OmniRoute 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 設定

不要直接開 aggressiveultra

推薦:

主 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 標記為 cautionambiguous,而且估計的 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 隔離免費與付費流量。