モデルゲートウェイの設定
プロバイダー設定、モデル定義、クレデンシャル管理、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.9supports_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_1TLS と証明書要件
ルート CA バンドルにはクラウドプロバイダー向けの標準パブリック CA 証明書が含まれています。ただし、プライベートエンドポイントや内部モデルサーバー (カスタムまたは自己署名エンタープライズ証明書を持つ vLLM や OpenShift AI など) を使用する場合は、TLS 信頼を確立するために内部ルート/中間 CA 証明書を提供する必要があります。
このモデルエンドポイントの TLS 設定は、Bob IDE と Bob Shell が Bob バックエンドに接続するために必要な証明書とは別のものです。バックエンドエンドポイント証明書とクライアント信頼の手順については、TLS 証明書を参照してください。
カスタム TLS 証明書は API クレデンシャルと同じ 2 ファイル分散設定パターンに従います。
model-gateway.yamlで:ca_cert_pemを環境変数名 (例:env.CA_CERT) に設定します。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-licensebobctl 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-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 コマンドを実行せずに実行される内容を表示 |