تكوين بوابة النماذج

تعرّف على كيفية إنشاء وإدارة ملف تكوين بوابة النماذج (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 verification

bedrock

يتصل بنموذج يتم توفيره عبر 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 Key

vertex

يتصل بنموذج يتم توفيره عبر 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:

  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           # 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-secretsSecret bob-inference-model-secretsbob.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 المُولَّد
--cleanupfalseحذف ملفات البيانات المُولَّدة بعد تطبيقها
--dry-runfalseطباعة ما سيتم تشغيله دون تنفيذ أي أوامر oc
ما رأيك في هذا الموضوع؟