0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenGatewayで複数LLMの呼び出しとフォールバックを共通化

0
Posted at

OpenGatewayとは

OpenGatewayは、アプリケーションと複数のLLM提供元の間に置くAIゲートウェイです。アプリケーションはOpenGatewayのAPIを呼び出し、OpenGatewayが指定されたモデルの提供元へリクエストを転送します。

image.png

OpenAI互換のAPIを提供しているため、対応モデルは共通の接続先とAPIキーから呼び出せます。また、障害時に試す代替モデルの指定や、リクエストごとの費用・遅延・エラーの確認にも対応しています。
コストの支払いも一本化できるという利点もあります。

OpenGatewayを挟むと何が楽になるのか

OpenAIとAnthropicをアプリから呼び分けたい。障害時には別のモデルを試したい。さらに、どのリクエストにいくらかかったかを確認したい。

それぞれを個別に実装する代わりに、LLMへのリクエストを共通のAPIに通す方法があります。この記事では、OpenGatewayを例に、その技術的な利点と利用時の注意点を紹介します。

アカウントとAPIキーを準備する

  1. OpenGatewayでアカウントを作成し、サインインします。

  2. ダッシュボードのAPI Keysを開き、Create Keyを選びます。

  3. local-devなど用途が分かる名前を付けてキーを作成します。キーが表示されるのは一度だけなので、その場で安全な場所に保存します。
    image.png

  4. キーを環境変数OPENGATEWAY_API_KEYに設定します。ソースコードには直接書き込みません。

新しいチームには試用用のクレジットが付与され、残高と有効期限はBilling画面で確認できます。残高がない場合、作成したキーは停止状態になり、入金後に有効化されます。

実装例(python)

Chat API

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_OPENGATEWAY_API_KEY>",
    base_url="https://apis.opengateway.ai/v1"
)

completion = client.chat.completions.create(
        model="openai/gpt-6-astra",
        messages=[
            {"role": "user", "content": "こんにちは!"},
        ],
    )

print(completion.choices[0].message.content)

こんにちは!今日はどんなことをお手伝いしましょうか?

Responses API

Responses 系 API でも同様です。

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_OPENGATEWAY_API_KEY>",
    base_url="https://apis.opengateway.ai/v1"
)

response = client.responses.create(
    model="openai/gpt-6-astra",
    input="こんにちは。ひとこと挨拶してください。",
)

print(response.output_text)
こんにちは!よろしくお願いします。

複数モデル比較

Open AI のモデル間の比較

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_OPENGATEWAY_API_KEY>",
    base_url="https://apis.opengateway.ai/v1"
)


if __name__ == "__main__":
    models = [
        "gpt-6-astra",
        "gpt-5.6-sol",
        "gpt-5.4-mini"
    ]

    for model in models:
        response = client.responses.create(
            model=f"openai/{model}",
            input="こんにちは。ひとこと挨拶してください。",
        )

        print(f"{model} : {response.output_text}")
gpt-6-astra : こんにちは!お会いできてうれしいです。
gpt-5.6-sol : こんにちは!今日はよろしくお願いします。
gpt-5.4-mini : こんにちは!おはようございます。

複数 Vendor 間比較

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_OPENGATEWAY_API_KEY>",
    base_url="https://apis.opengateway.ai/v1"
)


if __name__ == "__main__":
    models = [
        "openai/gpt-6-astra",
        "anthropic/claude-sonnet-5",
        "google/gemini-3.5-flash"
    ]

    for model in models:
        response = client.responses.create(
            model=f"{model}",
            input="こんにちは。ひとこと挨拶してください。",
        )

        print(f"{model} : {response.output_text}")

openai/gpt-6-astra : こんにちは!お会いできてうれしいです。
anthropic/claude-sonnet-5 : こんにちは!今日はどのようなご用件でしょうか?何かお手伝いできることがあれば、お気軽にお聞かせください。
google/gemini-3.5-flash : こんにちは!今日もよろしくお願いします。何かお手伝いできることはありますか?

Open AI 以外のモデルでも同じコードで使用可能です。

Fall Back

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_OPENGATEWAY_API_KEY>",
    base_url="https://apis.opengateway.ai/v1"
)


response = client.responses.create(
    model="openai/gpt-6-astra",
    extra_body={
        "extra": {
            "fallbacks": [
                "anthropic/claude-sonnet-5", 
                "google/gemini-3.5-flash"
            ]
        }
    },    
    input="こんにちは。ひとこと挨拶してください。",
)

print(f"{response.model} : {response.output_text}")
openai/gpt-6-astra : こんにちは!お会いできてうれしいです。

この例では、最初のモデルがタイムアウト、レート制限、提供元のサーバーエラーなどで応答できない場合に、指定した順番で代替モデルを試します。通常の成功時には切り替わりません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?