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

プロバイダー設定、モデル定義、クレデンシャル管理、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 など)
  bedrock:            # — AWS Bedrock invoke エンドポイント
  vertex:             # — Google Vertex AI (Gemini)

  # モデル情報パラメーター (オプション)
  model_info:
    exposed: true                          # true: /models リストに表示; false: 内部専用
    max_input_tokens: 128000               # コンテキストウィンドウサイズ
    max_output_tokens: 4096                # モデルが生成できる最大トークン数
    input_cost_per_token: 0.0000025        # 入力トークンあたりの USD コスト (使用量測定に使用)
    output_cost_per_token: 0.000010        # 出力トークンあたりの USD コスト
    cache_read_input_token_cost: 0.00      # キャッシュヒット入力トークンのコスト (プロンプトキャッシュ)
    cache_creation_input_token_cost: 0.00  # 新しいキャッシュエントリの書き込みコスト
    supports_prompt_caching: true          # モデルがプロンプトキャッシュをサポートする場合は true
    supports_function_calling: true        # モデルがツール/関数呼び出しをサポートする場合は true
    supports_tool_choice: true             # tool_choice パラメーターが尊重される場合は true
    supports_reasoning: false              # モデルが reasoning_effort パラメーターをサポートする場合は true
    supports_vision: false                 # true はモデルがチャットメッセージで画像入力を受け付ける場合
    mode: chat                             # chat | embedding | image_generation

  # このモデルが利用できない場合に試みる model_name 値の順序付きリスト (オプション)
  fallbacks:
    - fallback_model

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

supports_vision: true は画像入力を受け付けるモデルにのみ設定してください。画像入力をサポートしていないモデルに supports_vision を true に設定すると、チャットで画像を送信したときにプロバイダーエラーが発生します。以下のモデルは画像入力をサポートしていないため、supports_vision: false を使用するか、このフラグを省略する必要があります: Laguna S2.1 および Nvidia Nemotron 3。

プロバイダー

openai_compatible

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

openai_compatible:
  model: gpt-4o                          # プロバイダーが期待するモデル ID
  base_url: https://base_url             # モデルデプロイメントのベース URL
  api_key: env.API_KEY                   # 認証用 API キー。env.<VAR> はコンテナ環境から読み取ります
  extra_headers:                         # 推論時に含める追加ヘッダー
    example_header: env.HEADER_VALUE
  insecure_skip_verify: true             # TLS 検証を無効化 (本番環境には推奨されません)
  ca_cert_pem: env.CA_CERT               # TLS 検証用 CA 証明書

bedrock

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

bedrock:
  model: claude                                  # プロバイダーが期待するモデル ID
  region: us-east-1                              # Bedrock エンドポイントがある AWS リージョン
  access_key_id: env.AWS_ACCESS_KEY              # Bedrock アクセスキー ID
  secret_access_key: env.AWS_SECRET_ACCESS_KEY   # Bedrock シークレットアクセスキー

vertex

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

vertex:
  model: gemini                              # プロバイダーが期待するモデル ID
  project: my-gcp-project                    # GCP プロジェクト ID
  location: global                           # Vertex AI リージョン / グローバル API の場合は "global"
  credentials: env.GEMINI_CREDENTIALS        # サービスアカウント JSON、base64 エンコード

YAML アンカー

クレデンシャルアンカー

クレデンシャルを一度定義し、<<: *anchor-name で複数のモデルエントリに参照して繰り返しを避けます。

# AWS Bedrock クレデンシャル — bedrock モデルが参照します。
x-aws-bedrock-auth: &aws-bedrock-auth
  region: us-east-1
  access_key_id: env.AWS_ACCESS_KEY
  secret_access_key: env.AWS_SECRET_ACCESS_KEY

models:
  - model_name: my-bedrock-model
    bedrock:
      model: claude
      <<: *aws-bedrock-auth            # 上で定義したクレデンシャルアンカーをマージ
    model_info:
      exposed: true
      mode: chat

モデルアンカー

複数のエントリにわたって完全なモデルブロックをマージして、プロバイダー設定と model_info の繰り返しを避けます。

x-my-base-model: &my-base-model
  vertex:
    model: gemini-2.5-pro
    project: my-gcp-project
    location: global
    credentials: env.GEMINI_CREDENTIALS
  model_info:
    exposed: false
    supports_reasoning: true
    mode: chat

models:
  - model_name: my-gemini-model
    <<: *my-base-model

  - model_name: my-second-gemini-model
    <<: *my-base-model

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

シークレット

モデル設定で参照されるシークレット (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 と証明書要件

ルート CA バンドルにはクラウドプロバイダー向けの標準パブリック CA 証明書が含まれています。ただし、プライベートエンドポイントや内部モデルサーバー (カスタムまたは自己署名エンタープライズ証明書を持つ vLLM や OpenShift AI など) を使用する場合は、TLS 信頼を確立するために内部ルート/中間 CA 証明書を提供する必要があります。

注意:

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

カスタム TLS 証明書は API クレデンシャルと同じ 2 ファイル分散設定パターンに従います。

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

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

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

インストール設定 (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 ハンドシェイクに使用されます。

完全な例

以下はすべてのプロバイダータイプを網羅した完全な例です。モデルゲートウェイ設定をファイル (例: /tmp/example/model-gateway.yaml) に保存し、インストール時に参照します。

モデルゲートウェイ設定 (/tmp/example/model-gateway.yaml)

# ── クレデンシャルアンカー (YAML マージキーを通じてモデルエントリ間で共有) ──────
# AWS Bedrock クレデンシャル
x-aws-bedrock-auth: &aws-bedrock-auth
  region: us-east-1
  access_key_id: env.AWS_ACCESS_KEY
  secret_access_key: env.AWS_SECRET_ACCESS_KEY

# Google Vertex AI クレデンシャル
x-vertex-auth: &vertex-auth
  project: my-gcp-project
  location: global
  credentials: env.GEMINI_CREDENTIALS

# ── 共有モデルアンカー (オプション) ───────────────────────────────────────────
x-my-base-model: &my-base-model
  vertex:
    model: gemini-2.5-pro
    <<: *vertex-auth
  model_info:
    exposed: true
    max_input_tokens: 200000
    max_output_tokens: 12000
    input_cost_per_token: 0.00000125
    output_cost_per_token: 0.00001
    cache_read_input_token_cost: 0.000000125
    supports_reasoning: true
    mode: chat

# ── モデル ────────────────────────────────────────────────────────────────────
models:
  # API キーを持つ OpenAI 互換モデル (例: Azure OpenAI)
  - model_name: my-gpt-model
    openai_compatible:
      model: gpt-4o
      base_url: https://<resource>.cognitiveservices.azure.com/openai
      api_key: env.BOB_AZURE_API_KEY
    model_info:
      exposed: true
      max_input_tokens: 128000
      max_output_tokens: 4096
      input_cost_per_token: 0.0000025
      output_cost_per_token: 0.000010
      supports_function_calling: true
      supports_tool_choice: true
      mode: chat
    chat_inference_params:
      temperature: 0.7
      top_p: 0.9

  # AWS Bedrock モデル
  - model_name: my-bedrock-model
    bedrock:
      model: us.anthropic.claude-3-5-sonnet-20241022-v2:0
      <<: *aws-bedrock-auth
    fallbacks:                          # オプション: フォールバックモデル名の順序付きリスト
      - my-fallback-model
    model_info:
      exposed: false
      max_input_tokens: 200000
      max_output_tokens: 8192
      input_cost_per_token: 0.000003
      output_cost_per_token: 0.000015
      cache_creation_input_token_cost: 0.00000375
      cache_read_input_token_cost: 0.0000003
      supports_prompt_caching: true
      supports_function_calling: true
      supports_tool_choice: true
      mode: chat
    chat_inference_params:
      temperature: 0.7
      top_k: 50

  # 共有モデルアンカーを使用した Google Vertex AI (Gemini) モデル
  - model_name: my-gemini-model
    <<: *my-base-model

  # カスタム CA 証明書を持つ OpenAI 互換モデル
  - model_name: example-model-mini
    openai_compatible:
      model: gpt-4o-mini
      base_url: https://llm-mock-server.ca-tor.containers.appdomain.cloud
      ca_cert_pem: env.CA_CERT
    model_info:
      exposed: true
      max_input_tokens: 131072
      input_cost_per_token: 0.00000015
      output_cost_per_token: 0.0000006
      supports_function_calling: true
      supports_tool_choice: true
      mode: chat

  # 追加ヘッダーを持つ OpenAI 互換モデル
  - model_name: another-example-model-mini
    openai_compatible:
      model: gpt-4o-mini
      base_url: https://llm-mock-server.ca-tor.containers.appdomain.cloud
      extra_headers:
        model_key: env.MODEL_KEY
    model_info:
      exposed: true
      max_input_tokens: 131072
      input_cost_per_token: 0.00000015
      output_cost_per_token: 0.0000006
      supports_function_calling: true
      supports_tool_choice: true
      mode: chat

シークレット (config.yaml)

bob:
  modelGateway:
    secrets:
      BOB_AZURE_API_KEY: someapikeyvalue
      AWS_ACCESS_KEY: someapikeyvalue
      AWS_SECRET_ACCESS_KEY: someapikeyvalue
      GEMINI_CREDENTIALS: <base64_vertex_credentials>
      CA_CERT: <PEM encoded CA cert>
      MODEL_KEY: apikeyvalue

インストールコマンド

bobctl install --model-config /tmp/example/model-gateway.yaml

設定のデプロイ

初期インストール時

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

bobctl install --model-config path/to/model-gateway-config.yaml --accept-license
警告:

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

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

モデルゲートウェイ設定ファイルはクレデンシャルを環境変数として参照します (例: env.AWS_ACCESS_KEY、env.BOB_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 認証
      BOB_AZURE_API_KEY: "<your-azure-api-key>"

      # Google Cloud Vertex AI / Gemini 認証
      BOB_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 なしで実行された場合の必須パスであり、コア推論モデルの切り替え時にも使用されるコマンドです。

このコマンドは 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 コマンドを実行せずに実行される内容を表示
このトピックはいかがですか?