Portkey AI Gateway:把 1600 個模型收斂成一個 OpenAI 相容端點
A blazing fast AI Gateway with integrated guardrails. Route to 1,600+ LLMs, 50+ AI Guardrails with 1 fast & friendly API.
秒懂
- 它是什麼?
- 這個專案用一個 Node.js 服務集中處理模型路由、重試、負載平衡與輸出護欄,並附帶本機 Console 檢視日誌。它的價值在於把多供應商的呼叫邏輯從應用程式碼裡抽出來,代價是你要多維運一層服務,而且 2.0 版正在改寫核心。
- 適合誰用?
- 如果你同時接了三家以上的模型供應商,而且已經在應用層手寫重試與降級邏輯,這個閘道值得花一個下午自架驗證:先跑 npx @portkey-ai/gateway,把 retry、fallbacks 與 output_guardrails 用 Configs 表達一次,確認 http://localhost:8787/public/ 的 Console 能看到完整請求日誌,再決定要不要進到正式環境。若你只用單一供應商、或需要對每個請求做細緻的 token 計費與 prompt 版本控管,這層抽象帶來的維運成本大於收益,直接呼叫官方 SDK 更省事。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 113 天前。
- 用什麼語言寫的?
- 主要是 TypeScript(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它解決的是供應商蔓延,不是模型品質問題
團隊一開始通常只呼叫一家模型 API。等到需要成本對沖、區域合規或特定任務換模型時,程式碼裡就長出一堆 if 分支:這條走 OpenAI、那條走 Bedrock、失敗了要退回 Groq。重試次數、逾時、金鑰輪替散落在各處,每個服務各寫一份。Portkey Gateway 的定位就是把這層邏輯搬到應用之外,讓你的程式只認一個 OpenAI 相容端點,供應商差異由閘道吸收。README 把它描述為 lightweight、open-source、enterprise-ready 的路由層,並宣稱整合任何模型可在兩分鐘內完成。目標讀者是已經跨過單一供應商階段的團隊:需要多模型路由、需要自動重試與 fallback、需要在請求進出時加一層內容檢查的人。若你只有一個供應商、一個環境,這層額外服務沒有對應的收益。
請求進來之後發生什麼:Configs 是核心抽象
閘道本身是一個 TypeScript 服務,預設監聽 8787 埠,同時提供 /v1 的 API 與 /public/ 的 Console。真正的機制在 Configs:一個 JSON 物件,掛在客戶端或請求上,裡面描述這個請求要怎麼被處理。README 的範例同時放了 retry 與 output_guardrails 兩個鍵。retry 用 attempts 指定重試次數;output_guardrails 則是一個陣列,範例用 default.contains 搭配 operator 為 none、words 為 ["Apple"],再加上 deny 為 true,意思是回覆只要包含 Apple 就攔下來。README 對這段行為的說明是:模型被要求隨機回覆 Apple 或 Bat,但護欄會拒絕所有含 Apple 的回應,retry 則會在放棄前重試五次。這揭露了一個容易忽略的設計事實:護欄觸發後不是直接回錯,而是走進重試迴圈,靠重新生成來取得合規輸出。護欄與重試因此是耦合的,重試次數設得低,護欄就可能直接把請求判死。
兩分鐘跑起來的實際指令
啟動只需要 Node.js 與 npm,README 給的指令是 npx @portkey-ai/gateway。跑完之後 API 在 http://localhost:8787/v1,Console 在 http://localhost:8787/public/。客戶端兩種寫法。Python 端安裝 portkey-ai,建立 Portkey 物件時帶 provider 與 Authorization,provider 可填 openai、anthropic、bedrock、groq 等,Authorization 填供應商金鑰,之後用 client.chat.completions.create 發送,model 填 gpt-4o-mini 這類模型名。要掛設定就用 client.with_options(config=config) 產生一個帶 Configs 的新客戶端。REST 與 OpenAI SDK 也在支援清單內,另外列了 Langchain、LlamaIndex、Autogen、CrewAI 的整合連結。部署選項除本機外,README 列出 Portkey Cloud、Docker、Node.js server、Cloudflare Workers、Replit,以及一個 CloudFormation 範本的一鍵 EC2 部署按鈕。這些路徑的細節都指向 docs/installation-deployments.md,本文沒有實際執行過任何一條。
122kb 與 1ms 是宣傳數字,不是驗收標準
README 開頭寫著 blazing fast(<1ms latency)、122kb 體積、每天處理超過 10B tokens。這三個數字都沒有說明量測條件:1ms 是閘道自身的額外開銷,還是包含網路往返?122kb 是打包後的產物,還是原始碼?10B tokens 是全託管服務的流量,還是自架實例的加總?文件沒有交代,讀者也不該把它當成選型依據。真正該自己量的是:加上這一跳之後,你的 p99 端到端延遲增加多少。閘道位於請求路徑正中央,任何它引入的延遲都會乘上你的呼叫量。另一個沒被回答的問題是併發下的行為:多個請求同時觸發護欄重試時,重試是否會放大對上游的壓力。這些都得靠自己的壓測回答,而本文沒有做過。
護欄是關鍵字比對,不是內容理解
範例裡的 default.contains 搭配 words 陣列,本質是字串包含判斷。它對「回覆中不得出現某個品牌名」這類硬規則有效,成本低、行為可預測。但它擋不住改寫、同義替換或跨語言繞過,也無法判斷語意層面的不當內容。把關鍵字護欄當成合規防線會高估它的能力。更實際的風險在於它與 retry 的互動:如果模型對某個提示詞有強烈的輸出傾向,而該輸出剛好命中護欄,五次重試可能全部失敗,使用者拿到的是重試耗盡的錯誤,而非被攔截的說明。文件沒有描述護欄觸發時回傳什麼錯誤碼,這一點在接上正式使用者之前應該先用一個必然觸發的輸入實測。另外要注意 Configs 是掛在客戶端的,如果團隊成員各自初始化客戶端,設定的傳播需要靠共用封裝來保證。
替代方案的差異在抽象層的位置
LiteLLM 是這個位置最常被拿來對比的開源專案,兩者都提供 OpenAI 相容端點與多供應商路由,差別在實作語言與生態:LiteLLM 是 Python 專案,路由與設定偏向 Python 設定檔與 SDK 慣例,對 Python 為主的資料與 ML 團隊較順手;Portkey Gateway 是 TypeScript,部署形態更接近一個可丟到 Cloudflare Workers 或容器裡的邊緣服務,並內建一個本機 Console 看日誌。若你的服務本身就跑在 Node 生態、想用同一個語言維運這層,Portkey 的形狀更貼合;若你已經有大量 Python 服務與 LiteLLM 的設定檔,換過來主要是重寫設定而非重寫應用。兩者都不是唯一解:直接在各服務內用官方 SDK 加一層自寫的 fallback 函式,在供應商只有兩家時仍然是合理的選擇,只是重試與護欄邏輯會複製到每個服務。
授權、維護與 2.0 分支的變數
授權是 MIT,這對商業使用相對寬鬆,但授權條款的法律解讀不在本文範圍,採用前請自行確認條文與你的散佈方式。維護節奏上,最近的版本是 v1.15.2(2026 年 1 月),前兩版 v1.15.1 與 v1.15.0 都在 2025 年 12 月,屬於持續發布的狀態。真正需要留意的是 README 最上方那則提示:Gateway 2.0 為 pre-release,Portkey 的企業版核心正在併入開源,並指向 2.0.0 分支。這意味著現在從 main 建起來的東西,未來可能要面對一次不小的架構調整,而 2.0 的細節在目前這份材料裡看不到。升級成本無法從現有資訊估算。實務上的做法是在部署時明確鎖定版本或分支,把升級當成獨立專案排程,而不是讓容器每次重啟都拉最新。
誰該採用,以及先驗證哪三件事
適合採用的情況:你已經在應用層手寫多供應商路由與重試,且團隊能接受多維運一個 Node 服務。不適合的情況:單一供應商、低呼叫量,或你需要的是 prompt 版本管理與逐請求成本歸因這類偏應用層的能力。決定之前先驗證三件事。第一,跑 npx @portkey-ai/gateway,用一個必然觸發 output_guardrails 的輸入,看它回傳什麼錯誤、retry 是否如 README 所述在放棄前重試五次。第二,量測加上這一跳之後的端到端延遲變化,README 的 <1ms 不構成你的驗收依據。第三,確認你要追的是 main 還是 2.0.0 分支,因為 README 明說企業核心正在併入開源,這個選擇會決定你半年後要不要重做一次部署。
編輯結論
如果你同時接了三家以上的模型供應商,而且已經在應用層手寫重試與降級邏輯,這個閘道值得花一個下午自架驗證:先跑 npx @portkey-ai/gateway,把 retry、fallbacks 與 output_guardrails 用 Configs 表達一次,確認 http://localhost:8787/public/ 的 Console 能看到完整請求日誌,再決定要不要進到正式環境。若你只用單一供應商、或需要對每個請求做細緻的 token 計費與 prompt 版本控管,這層抽象帶來的維運成本大於收益,直接呼叫官方 SDK 更省事。務必先確認 2.0.0 分支與 main 的差異,因為 README 明言企業版核心正在併入開源,現在選定的分支可能不是半年後維護的那一條。
社群筆記