OmniRoute:一個 Endpoint 玩遍 200+ 模型

OmniRoute:一個 Endpoint 玩遍 200+ 模型

📌 本文重點

  • OmniRoute 用一個 Endpoint 串接 200+ 模型供應商
  • 內建 RTK + Caveman 壓縮,可節省 15–95% token 成本
  • 支援 MCP / A2A、多代理、多模態 Workflow
  • 適合多模型整合與成本優化的開發者

用一句話先說清楚:OmniRoute 是一個多雲、多模型的一站式 AI 總機,讓你用同一個 API Endpoint,同時接上 Claude、GPT、Cursor、Copilot 等 200+ 家模型供應商,還順手幫你壓縮 token、自動跳備援模型。

官方開源庫:https://github.com/diegosouzapw/OmniRoute


核心功能 1:一個 Endpoint 管理多供應商+自動備援

傳統做法是:每接一個模型,就要再接一個 SDK / API Key / Base URL。結果是:

  • 前端要切換模型,就得改環境變數
  • 後端要做 fallback,要自己寫 retry + 陣痛的錯誤處理

OmniRoute 的做法是:所有模型統一走一個 OmniRoute Endpoint,後面怎麼分流、切換供應商、失敗改用誰,全都在 OmniRoute 的設定檔完成。

💡 關鍵: 把所有模型統一進一個 Endpoint,可以一次解決多家供應商整合與備援問題,前後端只維護單一接點。

你可以怎麼用

以「同一個 Code Agent,要能在 Claude / GPT / 本地模型之間切換」為例:

  1. 在 OmniRoute 設定三個 provider:
  2. anthropic/claude-3.5(主力)
  3. openai/gpt-4.1(備援)
  4. local/deepseek(成本最低版)
  5. 設定路由策略:
  6. 主 Endpoint:先走 Claude
  7. 當 Claude timeout 或額度用完,自動 fallback 到 GPT
  8. 夜間批量任務改走本地模型
  9. 在你的程式碼中,只保留一個 OMNIROUTE_API_URL

ts
const response = await fetch(process.env.OMNIROUTE_API_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${process.env.OMNIROUTE_API_KEY}`,
},
body: JSON.stringify({
model: "code-agent", // 這是 OmniRoute 裡定義的邏輯模型名
messages,
}),
});

可行動建議

  • 手上的專案如果同時接了 Anthropic + OpenAI + 本地模型,可以先挑一個 API Call 練手,把三個 Base URL 改成一個 OmniRoute URL,測試 auto-fallback 是否生效。

核心功能 2:RTK + Caveman 壓縮,節省 15–95% token 成本

OmniRoute 內建兩種壓縮:

  • RTK(Reversible Tokenization Kernel):對常見 prompt 做結構化壓縮,適合長系統提示、多輪聊天歷史
  • Caveman 壓縮:偏「野蠻」但更激進,會重寫聊天記錄,把冗長表述變成精簡語句

效果:

  • 系統長 prompt:省 15–40% token
  • 帶大量上下文(如文檔 QA):最高可到 95% token 減少

💡 關鍵: 啟用 RTK 與 Caveman 壓縮後,長上下文任務可大幅降低 15–95% token 成本,直接反映在帳單與模型限額上。

你可以怎麼用

以「把整份 API 文檔塞給模型當『長期記憶』」為例:

  1. 在 OmniRoute 後台或設定檔,為 doc-assistant 這條路由開啟壓縮:

yaml
routes:
- id: doc-assistant
model: anthropic/claude-3.5
compression:
rtk: true
caveman: true

  1. 程式端依然用原本的 messages 結構呼叫,不用自己壓縮:

jsonc
{
"model": "doc-assistant",
"messages": [
{"role": "system", "content": "你是某某專案的文檔助手..."},
{"role": "user", "content": "請根據附件 API 文檔..."}
]
}

  1. OmniRoute 會在轉給底層模型前自動壓縮,再在輸出時解壓(對你來說是透明的)。

可行動建議

  • 先挑「最長」的那支 API(例如:聊天歷史超長、帶多篇 PDF 的 QA),在 OmniRoute 上開 RTK+獵人模式(Caveman),觀察一次請求的 token 使用量與帳單變化。

核心功能 3:MCP / A2A、多代理、多模態 Workflow

OmniRoute 支援:

  • MCP(Model Context Protocol):讓不同工具 / 代理共享同一套上下文與工具列表
  • A2A(Agent-to-Agent):代理之間可互相呼叫,形成多步驟協作
  • 多模態 API:文字 + 圖片(甚至影音)混合輸入

這讓你可以把原本散落在不同工具的能力,集中到一條 Workflow 裡。例如:

  • Code Agent 負責寫程式
  • Doc Agent 負責查文件、對比版本
  • Vision Agent 負責讀錯誤截圖

💡 關鍵: 利用 MCP 與 A2A,可以把多個專職 Agent 串成一條 Workflow,讓 Code、Doc、Vision 等能力在同一上下文中協作。

你可以怎麼用

以「Side Project 的 Code Agent + 文檔助手」為例:

  • Code Agent:
  • 模型:Claude 3.5 Sonnet
  • 任務:生成程式碼、重構
  • 文檔助手:
  • 模型:GPT-4.1 / Gemini
  • 任務:閱讀 API 文檔、產生說明
  • 多模態:
  • 模型:如 Gemini / GPT-4o
  • 任務:讀錯誤截圖

在 OmniRoute 裡定義三條路由,讓 Code Agent 能直接「轉接」給 Doc Agent:

routes:
  - id: code-agent
    model: anthropic/claude-3.5
    a2a:
      doc-agent: true
      vision-agent: true
  - id: doc-agent
    model: openai/gpt-4.1
  - id: vision-agent
    model: google/gemini-1.5

可行動建議

  • 先只做兩個代理(Code + Doc),在 OmniRoute 設定 A2A,讓 Code Agent 遇到「不知道 API 用法」時,把問題轉給 Doc Agent,再把結果回傳給使用者。

實作示範:Side Project 串三家模型的 Code Agent + 文檔助手

來做一個具體場景:

需求:在同一個 Side Project 裡,整合三家模型,做一個簡單的「程式碼助理 + 文檔助手」,前端只有一個 Chat UI,後端只有一個 OmniRoute Endpoint。

架構示意

  • 前端(Next.js / React):
  • 單一聊天框
  • 輸入模式按鈕:寫程式 / 問文檔
  • 後端:
  • 全部請求送到 OMNIROUTE_URL
  • model 欄位用來指定走哪個 logical route(code-agent or doc-assistant
  • OmniRoute:
  • code-agent → Claude(主)+ GPT(備)
  • doc-assistant → GPT + Caveman 壓縮
  • vision-agentGemini,多模態

前端呼叫範例(TypeScript):

async function callAgent(mode: "code" | "doc", messages) {
  const model = mode === "code" ? "code-agent" : "doc-assistant";

  const resp = await fetch(process.env.NEXT_PUBLIC_OMNIROUTE_URL!, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.NEXT_PUBLIC_OMNIROUTE_KEY}`,
    },
    body: JSON.stringify({ model, messages }),
  });

  return resp.json();
}

後端與前端都不用知道「底下到底是 Claude 還是 GPT」,只認 model: "code-agent"model: "doc-assistant" 兩種邏輯角色即可。


10 分鐘開箱:從零到第一條 OmniRoute

以下是一條「最短路徑」,讓你在 10 分鐘內把現有專案換成 OmniRoute。

1. 註冊與安裝(3 分鐘)

  1. 打開 GitHub 專案:https://github.com/diegosouzapw/OmniRoute
  2. repo 拉下來:

bash
git clone https://github.com/diegosouzapw/OmniRoute
cd OmniRoute
pnpm install # 或 yarn / npm

  1. README 建一個 .env,填入你現有的 OpenAI / AnthropicAPI Key

2. 啟動 OmniRoute Server(2 分鐘)

pnpm dev # 或對應的 start 指令

啟動後會有一個本地 URL,例如:http://localhost:8787/v1/chat/completions,這就是你的「總機 Endpoint」。

3. 設定第一個路由 + 壓縮策略(3 分鐘)

config/routes.yaml(實際以專案為準)中:

routes:
  - id: code-agent
    model: anthropic/claude-3.5
    fallback:
      - openai/gpt-4.1
    compression:
      rtk: true
      caveman: false

  - id: doc-assistant
    model: openai/gpt-4.1
    compression:
      rtk: true
      caveman: true

完成後重新啟動 OmniRoute(若需要)。

4. 把前端 / 後端改成單一 OmniRoute URL(2 分鐘)

無論你原本用什麼 SDKOpenAI, Anthropic, Cursor plugin):

  • baseURL 改成你的 OMNIROUTE_URL
  • model 改成 OmniRoute 裡定義的 id(例如 code-agent

以 OpenAI SDK 為例:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: process.env.OMNIROUTE_URL,
  apiKey: process.env.OMNIROUTE_KEY,
});

await client.chat.completions.create({
  model: "code-agent",
  messages,
});

到這一步,你已經:

  • 用一個 Endpoint 串起至少兩家模型
  • 開啟 basic 的 token 壓縮
  • 為之後加上更多 provider / 代理 / 模態預留位置

適合誰用?

使用者類型 具體場景
獨立開發者 Side Project 同時想用 Claude + GPT + 免費模型,又懶得寫一堆整合
小團隊 / Startups 想 A/B 測試不同供應商,控制成本,還要有 auto-fallback 防止掛點
AI Agent Builder 需要多代理協作(Code + Doc + Vision),又希望前端只接一個 Endpoint
教學 / 實驗環境 需要一鍵切換教學用模型、控制學生 token 使用量

如果你符合其中一項,可以先把 OmniRoute 當成:

「把所有 AI 模型集中管理的一支 API Gateway」,再視需要逐步開啟壓縮、A2A、多模態。


OmniRoute 與其他多模型工具比較

名稱 核心功能 免費方案 適合誰
OmniRoute 多供應商整合、auto-fallback、RTK/Caveman 壓縮、MCP/A2A、多模態 開源,支援 50+ 免費供應商 想統一管理多家模型、做複雜 Workflow 的開發者
直接用 OpenAI 單供應商模型 API 有免費試用額度 只用 GPT 系列、需求簡單的專案
直接用 Anthropic 單供應商 Claude 模型 有免費試用額度 只想專注 Claude Code / Sonnet

如果你只接一個模型供應商,OmniRoute 可以先當「統一壓縮 + 路由層」;當你的模型越來越多,它就自然變成你的多雲總機。


🚀 你現在可以做的事

  • 打開 OmniRoute GitHub 專案,依照 README 在本地啟動一個測試伺服器
  • 挑一支現有的 API 呼叫,將 baseURL 改成 OMNIROUTE_URL,並在 routes.yaml 設好對應的 model id
  • 在同一條路由上開啟 RTKCaveman 壓縮,對比啟用前後的 token 使用量與費用差異

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *