モデル / データセット
Portkey-AI/gateway avatar
Portkey-AI/gateway

Portkey AI Gateway を採用する前に読む、ルーティング設定とガードレールの実際

A blazing fast AI Gateway with integrated guardrails. Route to 1,600+ LLMs, 50+ AI Guardrails with 1 fast & friendly API.

スター 13,000フォーク 1,299TypeScriptMIT

ひと目でわかる

これは何?
OpenAI 互換のクライアントから複数プロバイダのモデルを呼び分けるための OSS ゲートウェイ。設定ファイルで再試行やフォールバック、出力フィルタを宣言的に書ける点が中心で、本稿はその仕組みと導入判断の境界を扱う。
誰に向いている?
複数のプロバイダを OpenAI 互換のクライアントから呼び分けたい、しかも再試行や出力フィルタの条件をコードではなく設定として外に出したいチームに向く。逆に、単一プロバイダしか使わずプロンプトの管理だけが課題なら、間に一枚挟む価値は薄い。
商用利用できる?
できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。最後のコミットは 113 日前です。
何の言語で書かれている?
主に TypeScript です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

このゲートウェイが埋めるのはどの隙間か

アプリ側のコードは OpenAI の SDK を前提に書かれているのに、実際に呼びたいモデルは OpenAI だけではない、という状況は珍しくない。プロバイダごとに SDK を入れ、認証の渡し方もエンドポイントも揃え、障害時のリトライを自前で書く、という作業が発生する。Portkey の AI Gateway はこの差分を吸収する層として提示されている。README の説明では、language、vision、audio、image のモデルへルーティングするための軽量な OSS 実装と位置づけられている。

対象読者は、複数のモデルを 1 つのアプリケーションから扱う必要があり、かつルーティングの条件をアプリのビジネスロジックから分離したい開発者である。プロバイダの切り替えを設定ファイルの変更で済ませたい、という要求がある場合に意味が出る。逆に、最初から 1 社のモデルだけを使うと決まっているなら、間に挟む層は増えるだけで、得られるものは少ない。

Configs という宣言的な設定オブジェクト

このゲートウェイの中心にあるのは Configs と呼ばれる設定で、README では「ルーティングルールを作り、信頼性を追加し、ガードレールを設定する」ためのものと説明されている。ポイントは、これがアプリのコードに埋め込まれるのではなく、クライアントに後から差し込める形になっていることだ。README の例では client.with_options(config=config) として既存のクライアントに設定を装着している。

設定の中身は宣言的で、retry は attempts の数値を、output_guardrails は条件とアクションの組を取る。README の例では default.contains に対して operator に none、words に ["Apple"] を指定し、deny を True にしている。意味としては、応答に Apple が含まれていなければ条件を満たす、含まれていれば拒否する、という構造になる。ルーティングの判断を Python の if 文で書く代わりに、辞書として表現するわけだ。

この設計の利点は、設定をアプリのデプロイとは独立に差し替えられる点にある。欠点は、条件の表現力がこの辞書のスキーマに縛られる点で、複雑な分岐を書きたくなった時点でアプリ側のロジックに戻ることになる。

retry と output_guardrails が同時に効くときの挙動

README の例は、retry と output_guardrails を 1 つの config に同居させている点が示唆的である。retry に attempts 5 を、output_guardrails に Apple を含む応答の拒否を設定したうえで、「Reply randomly with Apple or Bat」というプロンプトを投げる例が載っている。README の注記によれば、この構成では Apple を含む応答がガードレールで拒否されるため、結果として常に Bat が返り、拒否が続く間は retry が最大 5 回試行される。

ここから読み取れるのは、ガードレールの拒否がリトライのトリガーとして機能するという関係である。フィルタで弾くだけなら呼び出し元にエラーを返せば済むが、この例では再試行によって別の応答を引き出そうとしている。出力の検査と再試行が同じ設定の中で結びついているわけだ。

注意したいのは、この組み合わせが有効なのは「再試行すれば条件を満たす応答が出る可能性がある」場合に限られるという点である。モデルが同じ出力を返し続けるなら、5 回の試行はコストを 5 倍にするだけになる。試行回数はこの性質を踏まえて決める必要がある。

起動と最初のリクエストまでの手順

README が示す最短の起動方法は npx である。Node.js と npm が必要だと明記されており、コマンドは npx @portkey-ai/gateway の 1 行。起動すると Gateway は http://localhost:8787/v1 で待ち受け、Gateway Console は http://localhost:8787/public/ で見られる。Console ではローカルのログを一箇所で確認できると説明されている。

クライアント側は pip install -qU portkey-ai で Python SDK を入れ、Portkey(provider="openai", Authorization="sk-***") のようにプロバイダ名とプロバイダの API キーを渡す。provider には openai のほか anthropic、bedrock、groq などが例として挙げられている。以降は client.chat.completions.create(...) という OpenAI 互換の呼び出しになる。

設定を効かせる場合は config 辞書を作り、client.with_options(config=config) で装着してから同じ create を呼ぶ。README の例では model に gpt-4o-mini を指定している。手順としては、起動、SDK の準備、プロバイダ情報の指定、必要なら config の装着、という順序になる。

デプロイ先としては README が Portkey Cloud、Docker、Node.js サーバ、Cloudflare Workers、Replit を列挙し、EC2 へのデプロイ用テンプレートも案内している。ローカルの npx はあくまで試用の入口だと読める。

2.0.0 ブランチと現行 main の関係

README の冒頭には重要度の高い注記があり、Portkey の企業向けゲートウェイの中核が 2.0 リリースでオープンソース側に統合されると書かれている。試用は 2.0.0 ブランチで可能とされている。つまり現行の main と、これから来る 2.0 系は別物として扱う必要がある。

この注記は導入判断に直接影響する。今 main を使って本番運用を始めた場合、2.0 への移行時に設定のスキーマや挙動が変わる可能性を織り込んでおかなければならない。README には 2.0 で何がどう変わるかの詳細は書かれていないため、互換性の範囲はこの資料からは判断できない。pre-release を触って確かめるか、2.0 の安定版が出るまで待つか、どちらかの選択になる。

リリース履歴を見ると v1.15.0 が 2025 年 12 月、v1.15.1 が同月下旬、v1.15.2 が 2026 年 1 月に公開されている。1.15 系の更新が続いている間に 2.0 の準備が並行して進んでいる、という状態だと読める。

向かない場面と、代わりに検討される構成

このゲートウェイが不要になる典型は、単一プロバイダだけを使い、複数モデルの切り替えも障害時の退避も必要としない場合である。プロバイダの SDK を直接使えば、間に挟まるプロセスも、追加の設定ファイルも、Console も要らない。

もう 1 つの境界は、ルーティングの条件が複雑な場合だ。Configs は辞書で表現できる範囲の条件に向く。アプリの状態やユーザー属性に応じた多段の分岐を組みたいなら、ゲートウェイの設定ではなくアプリ側のコードで書いたほうが素直である。

比較対象として分かりやすいのは、各プロバイダの SDK を薄いラッパーで包む自前の抽象化層だ。違いは設定の置き場所にある。自前のラッパーではルーティング条件もリトライ回数もコードの中に入り、変更にはデプロイが要る。このゲートウェイでは config 辞書として外に出るため、条件の変更がアプリのリリースサイクルから切り離される。逆に言えば、その切り離しが不要なチームにとっては、辞書のスキーマを覚える手間だけが残る。

LangChain や LlamaIndex、Autogen、CrewAI といったライブラリとの併用も README では案内されているが、これらはゲートウェイの代替ではなく、その上で動くクライアント側の選択肢として挙げられている点に注意したい。

ライセンスと更新コストの見取り図

ライセンスは MIT である。この種のゲートウェイを自前のサービスに組み込む場合、MIT は再配布や改変の条件が比較的緩い部類に入る。ただし、ホスト型の Portkey Cloud や Enterprise 向けの提供が README で別途案内されている以上、OSS 部分と商用部分の境界がどこにあるかは導入前に確認しておく価値がある。本稿は法的助言ではないので、条件の解釈は各自の法務判断に委ねる。

更新コストの面で押さえておきたいのは、先述の 2.0 統合である。企業向けゲートウェイの中核が OSS 側に取り込まれるということは、機能追加のペースが上がる可能性がある一方で、追従すべき変更も増えるということだ。1.15 系が短期間に 3 版出ている事実は、更新が止まっていないことの裏返しでもある。

運用面では、README が Cloudflare Workers や Docker など複数の実行形態を挙げているため、どの形態を選ぶかによって依存するランタイムと更新手順が変わる。ローカルの npx で試した構成をそのまま本番に持ち込むのではなく、デプロイ形態を決めたうえでバージョンを固定するのが現実的である。

編集部の結論

複数のプロバイダを OpenAI 互換のクライアントから呼び分けたい、しかも再試行や出力フィルタの条件をコードではなく設定として外に出したいチームに向く。逆に、単一プロバイダしか使わずプロンプトの管理だけが課題なら、間に一枚挟む価値は薄い。導入前に確認すべきは 2 点で、1 つは 2.0.0 ブランチの pre-release が現行 main とどう設定互換なのか、もう 1 つは本番で使う予定のプロバイダとガードレールが README の列挙に実際に含まれるかどうかである。

公式情報源

  1. License: MIT
  2. Portkey-AI/gateway on GitHub
  3. Project website
  4. README
  5. Releases
コミュニティノート

コミュニティノート