モデルゲートウェイの設定
プロバイダー設定、モデル定義、クレデンシャル管理、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 フィールドを組み合わせて使用し、モデル固有のプロンプトチューニングと最適化を選択します。リストにないモデルには、最も近い一致する値を使用してください。
provider | family | version | モデル ID の例 |
|---|---|---|---|
openai | gpt | 5.6-sol | gpt-5.6-sol |
openai | gpt-oss | 20b | openai/gpt-oss-20b |
anthropic | sonnet | 5 | us.anthropic.claude-sonnet-5 |
google | gemini | 3.6-flash | gemini-3.6-flash |
google | gemini | 3.1-pro | gemini-3.1-pro |
nvidia | nemotron | 3-ultra | nvidia/nemotron-3-ultra-550b |
mistral | medium | 3.5 | mistralai/mistral-medium-3-5-0 |
poolside | laguna | s2.1 | poolside/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: chatbedrock
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: chatvertex
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_1TLS と証明書要件
プライベートエンドポイントや内部モデルサーバー (カスタムまたは自己署名エンタープライズ証明書を持つ 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 ファイル分散設定パターンに従います:
model-gateway.yamlで:ca_cert_pemを環境変数名 (例:env.CA_CERT) に設定します。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: chat2. インストール設定 (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-secrets | Secret bob-inference-model-secrets | config.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-secrets | config.yaml から bob.modelGateway.secrets をシークレットにプッシュ | |
--output-config <file> | model-gateway-config.yaml | レンダリングされた ConfigMap マニフェストの書き込み先 |
--output-secret <file> | model-gateway-secret.yaml | レンダリングされたシークレットマニフェストの書き込み先 |
--cleanup | false | 適用後にレンダリングされたマニフェストファイルを削除 |
--dry-run | false | oc コマンドを実行せずに実行される内容を表示 |