تكوين بوابة النماذج
تعرّف على كيفية إنشاء وإدارة ملف تكوين بوابة النماذج (Model Gateway)، بما في ذلك إعدادات الموفرين، وتعريفات النماذج، وإدارة بيانات الاعتماد، وتكوين TLS، وأمثلة النشر لموفري النماذج المدعومين.
تتيح بوابة النماذج (Model Gateway) لـ Bob المحلي الاتصال بالنماذج المدعومة وتوجيه الطلبات إليها عبر مختلف موفري الذكاء الاصطناعي، بما في ذلك نقاط النهاية المتوافقة مع OpenAI، وAWS Bedrock، وGoogle Vertex AI. يحدد تكوين بوابة النماذج نقاط نهاية النماذج، وإعدادات المصادقة، وسلوك التوجيه، وخيارات التراجع (fallback)، وإمكانيات النماذج، بينما تُدار بيانات الاعتماد والشهادات الحساسة بأمان من خلال config.yaml.
تكوين بوابة النماذج هو ملف YAML يحدد النماذج التي تتصل بها البوابة وكيفية المصادقة مع كل موفر.
هيّئ نموذج استدلال أساسي واحد فقط في بوابة النماذج في المرة الواحدة. تكوين عدة نماذج أساسية في الوقت نفسه غير مدعوم ويؤدي إلى سلوك غير محدد.
مواصفات النموذج
يجب أن يحتوي كل إدخال في قائمة models على model_name فريد. المواصفات الكاملة للنموذج هي:
- model_name: example_model
# Provider types (pick one per model):
openai_compatible: # — any OpenAI-compatible REST endpoint (Azure, …)
bedrock: # — AWS Bedrock invoke endpoint
vertex: # — Google Vertex AI (Gemini)
# Model info parameters (optional)
model_info:
exposed: true # true: visible in /models list; false: internal-only
max_input_tokens: 128000 # context window size
max_output_tokens: 4096 # maximum tokens the model may generate
input_cost_per_token: 0.0000025 # cost in USD per input token (used for usage metering)
output_cost_per_token: 0.000010 # cost in USD per output token
cache_read_input_token_cost: 0.00 # cost for cache-hit input tokens (prompt caching)
cache_creation_input_token_cost: 0.00 # cost to write a new cache entry
supports_prompt_caching: true # true if the model supports prompt caching
supports_function_calling: true # true if the model supports tool/function calls
supports_tool_choice: true # true if tool_choice param is honoured
supports_reasoning: false # true if the model supports a reasoning_effort param
supports_vision: false # true if the model accepts image inputs in chat messages
mode: chat # chat | embedding | image_generation
# Optional ordered list of model_name values to try when this model is unavailable
fallbacks:
- fallback_model
# Optional free-form request parameters appended to every request sent to
# the provider, including standard parameters (e.g. temperature, top_p,
# max_tokens) and provider-specific extensions (e.g. 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.
موفرو الخدمات (Providers)
openai_compatible
يتصل بأي نموذج مستضاف خارجيًا عبر واجهة برمجة تطبيقات REST متوافقة مع OpenAI (على سبيل المثال، Azure OpenAI، ونقاط النهاية المخصصة).
openai_compatible:
model: gpt-4o # Model ID as expected by the provider
base_url: https://base_url # Base URL of model deployment
api_key: env.API_KEY # API key to authenticate. env.<VAR> reads from the container environment
extra_headers: # Extra headers to include when inferencing
example_header: env.HEADER_VALUE
insecure_skip_verify: true # Disable TLS verification (not recommended for production)
ca_cert_pem: env.CA_CERT # CA certificate for TLS verificationbedrock
يتصل بنموذج يتم توفيره عبر AWS Bedrock.
bedrock:
model: claude # Model ID as expected by the provider
region: us-east-1 # AWS region where your Bedrock endpoint lives
access_key_id: env.AWS_ACCESS_KEY # Bedrock Access Key ID
secret_access_key: env.AWS_SECRET_ACCESS_KEY # Bedrock Secret Access Keyvertex
يتصل بنموذج يتم توفيره عبر Google Vertex AI (Gemini). يجب توفير بيانات الاعتماد كسلسلة JSON لحساب الخدمة مشفرة بـ base64.
vertex:
model: gemini # Model ID as expected by the provider
project: my-gcp-project # GCP project ID
location: global # Vertex AI region / "global" for Global API
credentials: env.GEMINI_CREDENTIALS # Service-account JSON, base64-encodedروابط YAML (YAML anchors)
روابط بيانات الاعتماد
عرّف بيانات الاعتماد مرة واحدة وقم بالإشارة إليها باستخدام <<: *anchor-name عبر إدخالات نماذج متعددة لتجنب التكرار.
# AWS Bedrock credentials — referenced by bedrock models.
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 # merge credentials anchor defined above
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. يتم تركيب الأسرار داخل حاوية خدمة الاستدلال في وقت التشغيل.
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 مع شهادات مؤسسية مخصصة أو موقعة ذاتيًا)، يجب عليك توفير شهادة Root/Intermediate CA الداخلية الخاصة بك لإنشاء ثقة TLS.
تكوين TLS لنقاط نهاية النماذج هذا منفصل عن الشهادة المطلوبة لاتصال Bob IDE وBob Shell بالواجهة الخلفية لـ Bob. للاطلاع على خطوات شهادة نقطة نهاية الواجهة الخلفية وثقة العميل، راجع شهادات TLS.
تتبع شهادات TLS المخصصة نفس نمط التكوين الموزع المكون من ملفين مثل بيانات اعتماد API:
- في
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 # Points to the variable name defined in config.yaml
model_info:
exposed: true
mode: chatتكوين التثبيت (config.yaml):
bob:
modelGateway:
secrets:
MODEL_API_KEY: "<your-api-key>"
# The actual PEM certificate content matching env.CA_CERT above:
CA_CERT: |
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQjJaDSmJT3g4qg05...
... [full PEM-encoded CA certificate data] ...
-----END CERTIFICATE-----أثناء النشر، يحقن bobctl المتغير CA_CERT في سر Kubernetes المسمى bob-inference-model-secrets. يتم بعد ذلك تركيب هذا السر في خدمة بوابة الاستدلال واستخدامه لمصافحة TLS مقابل خادم النموذج الخاص بك.
مثال كامل
فيما يلي مثال كامل يغطي جميع أنواع الموفرين. احفظ تكوين بوابة النماذج في ملف (على سبيل المثال، /tmp/example/model-gateway.yaml) وأشر إليه في وقت التثبيت.
تكوين بوابة النماذج (/tmp/example/model-gateway.yaml)
# ── Credential anchors (shared across model entries via YAML merge keys) ──────
# AWS Bedrock credentials
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 credentials
x-vertex-auth: &vertex-auth
project: my-gcp-project
location: global
credentials: env.GEMINI_CREDENTIALS
# ── Shared model anchors (optional) ───────────────────────────────────────────
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 ────────────────────────────────────────────────────────────────────
models:
# OpenAI-compatible model (e.g. Azure OpenAI) with API key
- 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
- model_name: my-bedrock-model
bedrock:
model: us.anthropic.claude-3-5-sonnet-20241022-v2:0
<<: *aws-bedrock-auth
fallbacks: # optional: ordered list of fallback model names
- 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 using shared model anchor
- model_name: my-gemini-model
<<: *my-base-model
# OpenAI-compatible model with custom CA certificate
- 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-compatible model with extra headers
- 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). يتطلب موفرو النماذج المختلفون أسرارًا مختلفة — مفاتيح AWS IAM لـ Bedrock، أو مفاتيح API لـ Azure OpenAI، أو ملف JSON لحساب الخدمة لـ Google Gemini.
أثناء التثبيت، يتم توفير بيانات الاعتماد هذه في ملف config.yaml الخاص بك تحت bob.modelGateway.secrets. تعالج واجهة سطر الأوامر bobctl هذا القسم تلقائيًا وتنشئ سر Kubernetes باسم bob-inference-model-secrets في المجموعة، مع تركيب المفاتيح كمتغيرات بيئة مباشرةً داخل حاوية خدمة بوابة الاستدلال.
bob:
modelGateway:
secrets:
# AWS Bedrock authentication
AWS_ACCESS_KEY: "<your-aws-access-key-id>"
AWS_SECRET_ACCESS_KEY: "<your-aws-secret-access-key>"
# Azure OpenAI authentication
BOB_AZURE_API_KEY: "<your-azure-api-key>"
# Google Cloud Vertex AI / Gemini authentication
BOB_GEMINI_CREDENTIALS: "<your-gemini-credentials-json>"
# Custom endpoint API keys / tokens or internal proxy auth
# RITS_APIKEY: "<your-api-key>"
# Custom CA certificate in PEM format for self-signed internal endpoints
# CA_CERT: |
# -----BEGIN CERTIFICATE-----
# ...
# -----END CERTIFICATE-----تحديث التكوين بعد التثبيت (bobctl update-model-config)
استخدم bobctl update-model-config لدفع تكوين بوابة النماذج و/أو الأسرار إلى مجموعة قيد التشغيل دون إعادة التثبيت. هذا هو المسار المطلوب عندما تم تشغيل bobctl install بدون --model-config، وهو نفس الأمر المستخدم عند تبديل نموذج الاستدلال الأساسي.
يدير الأمر موردين منفصلين للمجموعة:
| الراية | مورد المجموعة | المصدر |
|---|---|---|
--model-config <file> | ConfigMap bob-inference-model-config | الملف الذي تم تمريره |
--update-secrets | Secret bob-inference-model-secrets | bob.modelGateway.secrets في config.yaml |
يجب توفير واحد منهما على الأقل — عدم تمرير أي منهما يعد خطأً.
المتطلبات الأساسية:
- يجب أن تكون مسجلاً للدخول إلى المجموعة (
oc login) - يجب أن يكون
config.yamlموجودًا بجوارbobctl(انسخه منconfig-template.yaml) - يجب أن يكون
helm≥ 3.14.0 متوفرًا في مسار PATH لديك
الاستخدام الشائع:
# Update only the model config file
bobctl update-model-config --model-config ./my-model-config.yaml
# Update only the secrets (keys come from config.yaml)
bobctl update-model-config --update-secrets
# Update both at once
bobctl update-model-config --model-config ./my-model-config.yaml --update-secrets
# Preview what would be applied without touching the cluster
bobctl update-model-config --model-config ./my-model-config.yaml --update-secrets --dry-runجميع الرايات:
| الراية | القيمة الافتراضية | الوصف |
|---|---|---|
--model-config <file> | المسار إلى ملف تكوين النموذج لدفعه إلى ConfigMap | |
--update-secrets | دفع bob.modelGateway.secrets من config.yaml إلى Secret | |
--output-config <file> | model-gateway-config.yaml | مكان كتابة بيان ConfigMap المُولَّد |
--output-secret <file> | model-gateway-secret.yaml | مكان كتابة بيان Secret المُولَّد |
--cleanup | false | حذف ملفات البيانات المُولَّدة بعد تطبيقها |
--dry-run | false | طباعة ما سيتم تشغيله دون تنفيذ أي أوامر oc |