モデルゲートウェイの設定

プロバイダー設定、モデル定義、クレデンシャル管理、TLS 設定、サポートされているモデルプロバイダーのデプロイ例を含む、モデルゲートウェイ設定ファイルの作成と管理方法について説明します。

モデルゲートウェイにより、Bob オンプレミスは OpenAI 互換エンドポイント、AWS Bedrock、Google Vertex AI など、さまざまなプロバイダーのサポートされている AI モデルに接続してリクエストをルーティングできます。モデルゲートウェイ設定はモデルエンドポイント、認証設定、ルーティング動作、モデル機能を定義し、機密クレデンシャルと証明書は config.yaml を通じて安全に管理されます。

モデルゲートウェイ設定は、ゲートウェイが接続するモデルと各プロバイダーへの認証方法を定義する YAML ファイルです。

警告:

モデルゲートウェイで設定するコア推論モデルは一度に 1 つのみにしてください。複数のコアモデルを同時に設定することはサポートされておらず、未定義の動作を引き起こします。

モデル仕様

models リストの各エントリには一意の model_name が必要です。完全なモデル仕様は以下の通りです。

- model_name: example_model
  # プロバイダータイプ (モデルごとに 1 つ選択):
  openai_compatible:  # — OpenAI 互換 REST エンドポイント (Azure、vLLM など)
  bedrock:            # — AWS Bedrock invoke エンドポイント
  vertex:             # — Google Vertex AI (Gemini)

  # モデルメタデータ
  model_info:
    exposed: true                         # true: /v1/model/info リストに表示; false: 内部専用
    provider: openai                      # モデルプロバイダー (例: openai, anthropic, google, nvidia, mistral)
    family: gpt                           # プロバイダー内のモデルファミリー (例: gpt, sonnet, gemini)
    version: "5.6-sol"                    # モデルバージョン文字列 (以下の表を参照)
    max_input_tokens: 270000              # コンテキストウィンドウサイズ
    max_output_tokens: 20000              # モデルが生成できる最大トークン数
    supports_prompt_caching: true         # モデルがプロンプトキャッシュをサポートする場合は true
    supports_vision: true                 # モデルが画像入力をサポートする場合は true
    mode: chat                            # chat | embedding | image_generation

  # プロバイダーに送信されるすべてのリクエストに追加されるオプションの自由形式リクエストパラメーター。
  # 標準パラメーター (temperature、top_p、max_tokens など) と
  # プロバイダー固有の拡張 (top_k、repetition_penalty、anthropic_beta など) を含みます。
  chat_inference_params:
    temperature: 0.7
    top_p: 0.9
注:

ユーザーがチャットインターフェースで画像入力を送信できるようにするには、コア推論モデルの model_info ブロックで supports_vision: true が設定されている必要があります。このフラグがないか false の場合、画像入力は利用できません。

警告:

実際には画像入力をサポートしていないモデルに対して supports_vision を true に設定すると、画像の使用時にプロバイダーからエラーが発生します。このフラグは画像入力をサポートするモデルに対してのみ有効にしてください。以下のモデルは画像入力をサポートしていないため、supports_vision: false に設定する必要があることに注意してください: Laguna S2.1 および Nvidia Nemotron 3。

サポートされている provider / family / version の値

Bob は provider、family、version フィールドを組み合わせて使用し、モデル固有のプロンプトチューニングと最適化を選択します。リストにないモデルには、最も近い一致する値を使用してください。

providerfamilyversionモデル ID の例
openaigpt5.6-solgpt-5.6-sol
openaigpt-oss20bopenai/gpt-oss-20b
anthropicsonnet5us.anthropic.claude-sonnet-5
googlegemini3.6-flashgemini-3.6-flash
googlegemini3.1-progemini-3.1-pro
nvidianemotron3-ultranvidia/nemotron-3-ultra-550b
mistralmedium3.5mistralai/mistral-medium-3-5-0
poolsidelagunas2.1poolside/laguna-s-2.1

予約済みモデル名スロット

models リストには、以下の model_name 値が存在する必要があります:

model_name用途
premium-ideインタラクティブチャット用のデフォルトモデル
securityガードレール / セキュリティチェック
backgroundバックグラウンドおよび自律エージェントタスク

テンプレートでは、security と background がアクティブなモデルの YAML マージエイリアスとして定義されているため、すべて自動的に同じプロバイダー設定に従います。security と background については、利用可能な場合はより小さく効率的なモデルが推奨されます(例: openai/gpt-oss-20b)。

プロバイダー

openai_compatible

OpenAI 互換 REST API を持つ外部ホスト型モデル (例: Azure OpenAI、vLLM、カスタムエンドポイント) に接続します。

- model_name: premium-ide
  openai_compatible:
    model: gpt-5.6-sol                     # プロバイダーが期待するモデル ID
    base_url: https://<resource>.cognitiveservices.azure.com/openai
    api_key: env.AZURE_API_KEY             # env.<VAR> はモデルゲートウェイシークレットから読み取ります
    extra_headers:                         # 推論時に含める追加ヘッダー
      example_header: env.HEADER_VALUE
    ca_cert_pem: env.CA_CERT               # TLS 検証用 CA 証明書
  model_info:
    exposed: true
    provider: openai
    family: gpt
    version: "5.6-sol"
    max_input_tokens: 270000
    max_output_tokens: 20000
    supports_prompt_caching: true
    supports_vision: true
    mode: chat

bedrock

AWS Bedrock 経由で提供されるモデルに接続します。

- model_name: premium-ide
  bedrock:
    model: us.anthropic.claude-sonnet-5    # プロバイダーが期待するモデル ID
    region: us-east-1                      # Bedrock エンドポイントがある AWS リージョン
    access_key_id: env.AWS_ACCESS_KEY      # Bedrock アクセスキー ID
    secret_access_key: env.AWS_SECRET_ACCESS_KEY
  model_info:
    exposed: true
    provider: anthropic
    family: sonnet
    version: "5"
    max_input_tokens: 270000
    max_output_tokens: 20000
    supports_prompt_caching: true
    supports_vision: true
    mode: chat

vertex

Google Vertex AI (Gemini) 経由で提供されるモデルに接続します。クレデンシャルは base64 エンコード されたサービスアカウント JSON 文字列として提供する必要があります。

- model_name: premium-ide
  vertex:
    model: gemini-3.6-flash                # プロバイダーが期待するモデル ID
    project: <gcp-project-id>              # GCP プロジェクト ID
    location: global                       # Vertex AI リージョン / グローバル API の場合は "global"
    credentials: env.GEMINI_CREDENTIALS    # サービスアカウント JSON、base64 エンコード
  model_info:
    exposed: true
    provider: google
    family: gemini
    version: "3.6-flash"
    max_input_tokens: 270000
    max_output_tokens: 20000
    supports_prompt_caching: true
    supports_vision: true
    mode: chat

ルーター

routers セクションは、フロントエンドとバックエンド間のモデル解決を設定します。設定された default_model がチャット対話中に使用されるメインの LLM になります。

routers:
  - name: router
    strategy: static
    static:
      default_model: premium-ide   # models リストの model_name と一致する必要があります
フィールド説明
nameルーター名 (常に router を使用)
strategyルーティング戦略。現在は static のみサポートされています
static.default_modelメインの LLM として使用する model_name。models リストの model_name エントリと完全に一致する必要があります
注:

premium-ide は必須のモデル名スロットです(予約済みモデル名スロットを参照)。そのため、default_model: premium-ide のままにしておき、models リスト内で premium-ide エントリが指すプロバイダー/モデルを変更することをお勧めします。

YAML アンカー

モデルゲートウェイ設定は、標準の YAML アンカー (&name) とマージキー (<<: *name) をサポートしています。テンプレートではこれを使用して再利用をサポートし、繰り返しを回避しています。

x-providers:
  gemini: &gemini
    vertex:
      model: gemini-3.6-flash
      project: <gcp-project-id>
      location: global
      credentials: env.GEMINI_CREDENTIALS
    model_info:
      exposed: true
      provider: google
      family: gemini
      version: "3.6-flash"
      max_input_tokens: 270000
      max_output_tokens: 20000
      supports_prompt_caching: true
      supports_vision: true
      mode: chat

models:
  - &chat_llm
    <<: *gemini
    model_name: premium-ide

  - <<: *chat_llm
    model_name: security               # マージされたアンカーからの premium-ide をオーバーライド

  - <<: *chat_llm
    model_name: background

クレデンシャルとシークレット管理

シークレット

モデル設定で参照されるシークレット (API キー、パスワード、証明書) は、インストール config.yaml の bob.modelGateway.secrets の下に設定してください。シークレットはランタイム時に Inference Service コンテナにマウントされます。

bob:
  modelGateway:
    secrets:
      VAR_BAR_1: FOO_1
      VAR_BAR_2: FOO_2
      VAR_BAR_N: FOO_N

モデル設定でシークレットを参照するには env.<VAR_NAME> 構文を使用します。

api_key: env.VAR_BAR_1

TLS と証明書要件

プライベートエンドポイントや内部モデルサーバー (カスタムまたは自己署名エンタープライズ証明書を持つ vLLM や OpenShift AI など) を使用する場合は、推論コンテナが TLS 信頼を確立できるように内部ルート/中間 CA 証明書を提供する必要があります。

注:

このモデルエンドポイントの TLS 設定は、Bob IDE と Bob Shell が Bob バックエンドに接続するために必要な証明書とは別のものです。バックエンドエンドポイント証明書とクライアント信頼の手順については、TLS 証明書を参照してください。

推論用の CA を追加するには 2 つの方法があります:

オプション 1 — 推論信頼バンドル (推奨)

Kubernetes Secret にラベルを付けることで、CA を bob-inferencing-bundle-tls に追加します。オペレーターはラベルを検出してバンドルを自動的に再構築します — モデルゲートウェイの設定変更は不要で、CA はすべての推論コンテナですぐに利用可能になります。

oc create secret generic my-model-endpoint-ca \
  --from-file=tls.crt=model-ca.crt \
  -n <instance-namespace>

oc label secret my-model-endpoint-ca \
  bob.ibm.com/inferencing-bundle-ca=true \
  -n <instance-namespace>

bob-inferencing-bundle-tls Secret は、信頼ストアとして推論コンテナにマウントされます。これには常に bob-bundle-tls 内のすべてのコンテンツと、追加でラベル付けされた Secret が含まれます。Pod の再起動は不要です — Secret は実行中のコンテナに投影されます。

詳細および確認手順については、TLS 証明書を参照してください。

オプション 2 — モデルごとの ca_cert_pem (モデルゲートウェイ設定)

他の推論コンテナに影響を与えることなく、単一の特定のモデルエンドポイントに CA を提供する必要がある場合にこれを使用します。カスタム TLS 証明書は API クレデンシャルと同じ 2 ファイル分散設定パターンに従います:

  1. model-gateway.yaml で: ca_cert_pem を環境変数名 (例: env.CA_CERT) に設定します。
  2. config.yaml で: bob.modelGateway.secrets の下に一致する変数名を追加し、完全な PEM エンコードされた証明書文字列を貼り付けます。

1. モデルゲートウェイ設定 (model-gateway.yaml):

models:
  - model_name: example-model
    openai_compatible:
      model: mistral-3.5
      base_url: https://vllm.internal.corp:8000/v1
      api_key: env.MODEL_API_KEY
      ca_cert_pem: env.CA_CERT           # config.yaml で定義された変数名を指します
    model_info:
      exposed: true
      mode: chat

2. インストール設定 (config.yaml):

bob:
  modelGateway:
    secrets:
      MODEL_API_KEY: "<your-api-key>"
      # 上記 env.CA_CERT に一致する実際の PEM 証明書コンテンツ:
      CA_CERT: |
        -----BEGIN CERTIFICATE-----
        MIIFazCCA1OgAwIBAgIRAIIQjJaDSmJT3g4qg05...
        ... [完全な PEM エンコードされた CA 証明書データ] ...
        -----END CERTIFICATE-----

デプロイメント中に bobctl は CA_CERT を bob-inference-model-secrets Kubernetes シークレットに注入します。これにより inference gateway サービスにマウントされ、プライベートモデルサーバーとの TLS ハンドシェイクに使用されます。

完全な例

以下は、Bob Bundle の config-model-gateway-template.yaml の構造を反映した完全な例です。これをファイル (例: /tmp/example/model-gateway.yaml) に保存し、インストール時に参照します。

モデルゲートウェイ設定

# ── プロバイダー定義 ───────────────────────────────────────────────────────────
# x-providers キーはモデルゲートウェイによって無視されます — これは
# プロバイダーの例用の YAML スクラッチパッドです。以下ではアクティブなプロバイダーのアンカーのみが参照されます。
x-providers:

  # AWS Bedrock
  bedrock: &bedrock
    bedrock:
      model: us.anthropic.claude-sonnet-5
      region: us-east-1
      access_key_id: env.AWS_ACCESS_KEY
      secret_access_key: env.AWS_SECRET_ACCESS_KEY
    model_info:
      exposed: true
      provider: anthropic
      family: sonnet
      version: "5"
      max_input_tokens: 270000
      max_output_tokens: 20000
      supports_prompt_caching: true
      supports_vision: true
      mode: chat

  # Google Vertex AI (Gemini)
  gemini: &gemini
    vertex:
      model: gemini-3.6-flash
      project: <gcp-project-id>
      location: global
      credentials: env.GEMINI_CREDENTIALS
    model_info:
      exposed: true
      provider: google
      family: gemini
      version: "3.6-flash"
      max_input_tokens: 270000
      max_output_tokens: 20000
      supports_prompt_caching: true
      supports_vision: true
      mode: chat

  # Azure OpenAI
  azure: &azure
    openai_compatible:
      model: gpt-5.6-sol
      base_url: https://<resource>.cognitiveservices.azure.com/openai
      api_key: env.AZURE_API_KEY
    model_info:
      exposed: true
      provider: openai
      family: gpt
      version: "5.6-sol"
      max_input_tokens: 270000
      max_output_tokens: 20000
      supports_prompt_caching: true
      supports_vision: true
      mode: chat

  # カスタム推論サービス (RHOAI、vLLM など)
  inference_service: &isvc
    openai_compatible:
      model: nvidia/nemotron-3-ultra-550b
      base_url: https://<llm-inference-server>
      api_key: env.INFERENCE_API_KEY
    model_info:
      exposed: true
      provider: nvidia
      family: nemotron
      version: "3-ultra"
      max_input_tokens: 262144
      supports_vision: false
      mode: chat

# ── モデル ────────────────────────────────────────────────────────────────────
models:

  # ── アクティブモデル ─────────────────────────────────────────────────────────
  # プロバイダーを切り替えるには、<<: *bedrock を *azure、*gemini、または *isvc などに変更します。
  - &chat_llm
    <<: *bedrock                       # ← ここでプロバイダーを変更
    model_name: premium-ide
    model_info:
      exposed: true

  # ── エイリアス ───────────────────────────────────────────────────────────────
  - <<: *chat_llm
    model_name: security               # マージされたアンカーからの premium-ide をオーバーライド

  - <<: *chat_llm
    model_name: background

# ── ルーター ──────────────────────────────────────────────────────────────────
routers:
  - name: router
    strategy: static
    static:
      default_model: premium-ide

シークレット (config.yaml)

bob:
  modelGateway:
    secrets:
      AWS_ACCESS_KEY: "<your-aws-access-key-id>"
      AWS_SECRET_ACCESS_KEY: "<your-aws-secret-access-key>"
      GEMINI_CREDENTIALS: "<base64-encoded service-account JSON>"
      AZURE_API_KEY: "<your-azure-api-key>"
      INFERENCE_API_KEY: "<your-inference-api-key>"
      CA_CERT: <PEM encoded CA cert>

インストールコマンド

bobctl install --model-config /tmp/example/model-gateway.yaml --accept-license --registry-creds <username:password>

接続環境の場合は、icr.io のライセンスキー (entitlement key) を指定します。--registry-creds は、プルに認証を必要としないプライベートレジストリがある場合にのみ省略できます。

設定のデプロイ

初期インストール時

インストール時に --model-config フラグを使用してモデルゲートウェイ設定ファイルへのパスを渡します:

bobctl install --model-config path/to/model-gateway-config.yaml --accept-license --registry-creds <username:password>
警告:

bobctl install を --model-config なしで実行すると、Bob は空のモデルゲートウェイ設定でインストールされます。Inference Service は実行されますが、推論のためのモデルへの接続はありません。インストール後に bobctl update-model-config を使用してモデル設定をクラスターにプッシュしてください。

クレデンシャルのクラスターへのデプロイ方法

モデルゲートウェイ設定ファイルはクレデンシャルを環境変数として参照します (例: env.AWS_ACCESS_KEY、env.AZURE_API_KEY)。異なるモデルプロバイダーは異なるシークレットを必要とします — Bedrock の場合は AWS IAM キー、Azure OpenAI の場合は API キー、Google Gemini の場合はサービスアカウント JSON です。

インストール中、これらのクレデンシャルは config.yaml の bob.modelGateway.secrets の下に提供されます。bobctl CLI はこのセクションを自動的に処理し、クラスターに bob-inference-model-secrets という名前の Kubernetes シークレットを作成して、inference gateway サービスコンテナ内で直接環境変数としてキーをマウントします。

bob:
  modelGateway:
    secrets:
      # AWS Bedrock 認証
      AWS_ACCESS_KEY: "<your-aws-access-key-id>"
      AWS_SECRET_ACCESS_KEY: "<your-aws-secret-access-key>"

      # Azure OpenAI 認証
      AZURE_API_KEY: "<your-azure-api-key>"

      # Google Cloud Vertex AI / Gemini 認証
      GEMINI_CREDENTIALS: "<your-gemini-credentials-json>"

      # カスタムエンドポイント API キー/トークンまたは内部プロキシ認証
      # RITS_APIKEY: "<your-api-key>"

      # 自己署名内部エンドポイント用の PEM 形式のカスタム CA 証明書
      # CA_CERT: |
      #   -----BEGIN CERTIFICATE-----
      #   ...
      #   -----END CERTIFICATE-----

インストール後の設定更新 (bobctl update-model-config)

bobctl update-model-config を使用して、再インストールなしでモデルゲートウェイ設定やシークレットをライブクラスターにプッシュします。これは bobctl install が --model-config なしで実行された場合の必須パスであり、コア推論モデルの切り替え時にも使用されるコマンドです。

内部的には、ローカルの ibm-bob チャート内の model-config.yaml および model-secrets.yaml テンプレートに対して helm template を実行し、レンダリングされたマニフェストをクラスターに適用します。適用されると、ibm-bob-operator は新しいモデル設定で bob-inference デプロイメントを調整 (reconcile) します。

このコマンドは 2 つの独立したクラスターリソースを管理します。

フラグクラスターリソースソース
--model-config <file>ConfigMap bob-inference-model-config渡すファイル
--update-secretsSecret bob-inference-model-secretsconfig.yaml の bob.modelGateway.secrets

少なくとも一方を指定する必要があります — どちらも指定しない場合はエラーになります。

前提条件:

  • クラスターにログインしている必要があります (oc login)
  • config.yaml が bobctl の隣に存在する必要があります (config-template.yaml からコピー)
  • helm ≥ 3.14.0 が PATH にある必要があります

一般的な使用方法:

# モデル設定ファイルのみを更新
bobctl update-model-config --model-config ./my-model-config.yaml

# シークレットのみを更新 (キーは config.yaml から取得)
bobctl update-model-config --update-secrets

# 両方を一度に更新
bobctl update-model-config --model-config ./my-model-config.yaml --update-secrets

# クラスターに触れずに適用される内容をプレビュー
bobctl update-model-config --model-config ./my-model-config.yaml --update-secrets --dry-run

すべてのフラグ:

フラグデフォルト説明
--model-config <file>ConfigMap にプッシュするモデル設定ファイルへのパス
--update-secretsconfig.yaml から bob.modelGateway.secrets をシークレットにプッシュ
--output-config <file>model-gateway-config.yamlレンダリングされた ConfigMap マニフェストの書き込み先
--output-secret <file>model-gateway-secret.yamlレンダリングされたシークレットマニフェストの書き込み先
--cleanupfalse適用後にレンダリングされたマニフェストファイルを削除
--dry-runfalseoc コマンドを実行せずに実行される内容を表示
このトピックはいかがですか?