0Pricing
AI Agents · درس

ملفات تعريف الإعدادات للتطوير والإنتاج

إعدادات خاصة بكل بيئة، ومفاتيح الميزات، وعمليات النشر المرحلية

ملفات تعريف الإعدادات للتطوير والإنتاج درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Agents، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Agents 4 دروس في المجموع.

أهمية ملفات تعريف الإعدادات

يجب أن يتصرف وكيل الإنتاج ووكيل التطوير بشكل مختلف: مستويات تسجيل مختلفة، ودرجات مختلفة للنماذج (من حيث التكلفة مقابل الجودة)، وقواعد بيانات مختلفة، وحدود مختلفة لمعدل الطلبات. تجعل ملفات تعريف الإعدادات هذا الأمر تلقائيًا — إذ يبدّل متغير بيئة واحد جميع الإعدادات دفعةً واحدة.

اكتشاف البيئة باستخدام متغير ENV

يتمثل النمط القياسي في قراءة متغير ENV (أو ENVIRONMENT) الذي يحدد سياق النشر الحالي. ثم يختار الكود ملف تعريف الإعدادات المناسب استنادًا إلى هذه القيمة.

import os

# Read the environment identifier
ENV = os.getenv('ENV', 'development').lower()

if ENV not in ('development', 'staging', 'production'):
    raise ValueError(
        f'Invalid ENV value: "{ENV}". '
        f'Must be: development, staging, or production'
    )

print(f'Running in {ENV} mode')

# Usage:
# ENV=development python agent.py   -> dev settings
# ENV=staging python agent.py       -> staging settings
# ENV=production python agent.py    -> prod settings
# python agent.py                   -> defaults to development

فئات إعدادات لكل بيئة

عرّف فئة أساسية للإعدادات وفئات فرعية لكل بيئة. تتجاوز كل فئة فرعية القيم المختلفة عن الفئة الأساسية. وهذا أوضح وأكثر أمانًا من ناحية الأنواع من استخدام قاموس كبير من الشروط.

import os

class BaseConfig:
    OPENAI_API_KEY: str = os.environ.get('OPENAI_API_KEY', '')
    MAX_STEPS: int = 20
    LOG_LEVEL: str = 'INFO'
    CACHE_ENABLED: bool = True
    CACHE_TTL_SECONDS: int = 3600

class DevelopmentConfig(BaseConfig):
    MODEL: str = 'gpt-4o-mini'  # cheaper in dev
    LOG_LEVEL: str = 'DEBUG'    # verbose logging in dev
    CACHE_ENABLED: bool = False  # fresh results in dev
    MAX_STEPS: int = 10          # shorter loops in dev

class StagingConfig(BaseConfig):
    MODEL: str = 'gpt-4o-mini'
    LOG_LEVEL: str = 'INFO'
    MAX_STEPS: int = 20

class ProductionConfig(BaseConfig):
    MODEL: str = 'gpt-4o'       # best quality in prod
    LOG_LEVEL: str = 'WARNING'  # less noise in prod
    MAX_STEPS: int = 30         # more steps allowed in prod

if __name__ == '__main__':
    for cls in (DevelopmentConfig, StagingConfig, ProductionConfig):
        c = cls()
        print(f'{cls.__name__}: model={c.MODEL} log_level={c.LOG_LEVEL} max_steps={c.MAX_STEPS} cache={c.CACHE_ENABLED}')

مصنع الإعدادات: اختيار ملف التعريف المناسب

تقرأ دالة مصنع الإعدادات متغير ENV وتعيد فئة الإعدادات المناسبة. وهذه الدالة الوحيدة التي تعرف منطق التبديل بين البيئات.

import os

def get_config():
    env = os.getenv('ENV', 'development').lower()
    configs = {
        'development': DevelopmentConfig,
        'staging': StagingConfig,
        'production': ProductionConfig
    }
    config_class = configs.get(env)
    if not config_class:
        raise ValueError(f'Unknown environment: {env}')
    return config_class()

# Usage throughout your agent:
config = get_config()
print(f'Model: {config.MODEL}')
print(f'Max steps: {config.MAX_STEPS}')
print(f'Log level: {config.LOG_LEVEL}')

# All code uses config.MODEL, config.LOG_LEVEL etc.
# Switching environments requires only changing ENV variable

إعدادات Pydantic للإعدادات المقيّدة بالأنواع

يوفر pydantic-settings طريقة قوية وآمنة من ناحية الأنواع لتعريف الإعدادات. فهو يقرأ متغيرات البيئة تلقائيًا، ويتحقق من الأنواع، ويمكنه التحميل من ملفات .env. ثبّته باستخدام pip install pydantic-settings.

# pip install pydantic-settings
from pydantic_settings import BaseSettings
from pydantic import Field
from typing import Literal

class AgentSettings(BaseSettings):
    # Required fields — raise error if not set
    openai_api_key: str
    search_api_key: str

    # Optional with defaults
    env: Literal['development', 'staging', 'production'] = 'development'
    model: str = 'gpt-4o-mini'
    max_steps: int = Field(default=20, ge=1, le=100)  # validated range
    log_level: str = 'INFO'
    cache_enabled: bool = True
    cache_ttl_seconds: int = Field(default=3600, ge=60)

    class Config:
        env_file = '.env'
        case_sensitive = False  # OPENAI_API_KEY -> openai_api_key

# settings = AgentSettings()  # raises ValidationError if required vars missing

إعدادات Pydantic مع تجاوزات خاصة بكل بيئة

اجمع بين إعدادات Pydantic والخصائص المحسوبة لتطبيق قيم افتراضية خاصة بكل بيئة، مع إمكانية تجاوزها باستخدام متغيرات البيئة.

from pydantic_settings import BaseSettings
from pydantic import model_validator
import os

class AgentSettings(BaseSettings):
    openai_api_key: str
    env: str = 'development'
    model: str = ''
    log_level: str = ''
    max_steps: int = 0

    @model_validator(mode='after')
    def apply_env_defaults(self) -> 'AgentSettings':
        env_defaults = {
            'development': {'model': 'gpt-4o-mini', 'log_level': 'DEBUG', 'max_steps': 10},
            'staging':     {'model': 'gpt-4o-mini', 'log_level': 'INFO',  'max_steps': 20},
            'production':  {'model': 'gpt-4o',      'log_level': 'WARNING', 'max_steps': 30}
        }
        defaults = env_defaults.get(self.env, env_defaults['development'])
        if not self.model:     self.model     = defaults['model']
        if not self.log_level: self.log_level = defaults['log_level']
        if not self.max_steps: self.max_steps = defaults['max_steps']
        return self

    class Config:
        env_file = '.env'

أعلام الميزات لكل بيئة

استخدم ملفات تعريف الإعدادات لتمكين الميزات أو تعطيلها حسب البيئة. فعلى سبيل المثال، فعّل واجهة تصحيح الأخطاء في بيئة التطوير فقط، واستخدم المدفوعات الحقيقية في الإنتاج فقط، ووجّه الطلبات إلى خدمات sandbox في بيئة التجهيز.

import os

class AgentFeatureFlags:
    env = os.getenv('ENV', 'development')

    # Enable memory persistence (requires DB)
    MEMORY_ENABLED: bool = env in ('staging', 'production')

    # Use real payment processing
    REAL_PAYMENTS: bool = env == 'production'

    # Enable verbose step-by-step output
    VERBOSE_STEPS: bool = env == 'development'

    # Use cheap model for unit test runs
    FORCE_MINI_MODEL: bool = os.getenv('CI') == 'true'

flags = AgentFeatureFlags()
print(f'Memory: {flags.MEMORY_ENABLED}')
print(f'Verbose: {flags.VERBOSE_STEPS}')
print(f'Payments: {flags.REAL_PAYMENTS}')

التحقق من الإعدادات عند بدء التشغيل

تحقق من جميع الإعدادات عند بدء التشغيل واطبع ملخصًا حتى يتمكن المشغلون من التأكد من إعداد الوكيل بشكل صحيح قبل أن يبدأ المعالجة. ويمنع ذلك وجود إعدادات خاطئة دون اكتشافها في الإنتاج.

import os
import sys

def validate_and_print_config(config) -> None:
    print(f'=== Agent Configuration ===')
    print(f'Environment : {config.env}')
    print(f'Model       : {config.model}')
    print(f'Max steps   : {config.max_steps}')
    print(f'Log level   : {config.log_level}')
    print(f'Cache       : {"enabled" if config.cache_enabled else "disabled"}')
    print(f'OpenAI key  : ...{config.openai_api_key[-4:]}')
    print('===========================')

    # Critical validations
    if config.env == 'production' and config.log_level == 'DEBUG':
        print('WARNING: DEBUG logging in production exposes sensitive data!')

    if not config.openai_api_key:
        print('FATAL: OPENAI_API_KEY not set')
        sys.exit(1)

    print('Configuration validated.')

if __name__ == '__main__':
    from types import SimpleNamespace
    demo_config = SimpleNamespace(
        env='development', model='gpt-4o-mini', max_steps=10,
        log_level='DEBUG', cache_enabled=False, openai_api_key='sk-demo-1234'
    )
    validate_and_print_config(demo_config)

تجاوز قيم الإعدادات حسب البيئة

في مسارات CI/CD، تجاوز قيم إعدادات محددة دون تغيير ملف التعريف بأكمله. مرّر متغيرات فردية إلى جانب متغير ENV لتخصيص الإعدادات لنشر معين.

# Staging deployment with custom model override:
# ENV=staging AGENT_MODEL=gpt-4o python agent.py

# Production with reduced max_steps for cost control:
# ENV=production AGENT_MAX_STEPS=15 python agent.py

# CI test run — use production profile but with cheap model:
# ENV=production AGENT_MODEL=gpt-4o-mini CI=true python agent.py

# The config class reads ENV first for the profile,
# then individual overrides take precedence:
import os

env = os.getenv('ENV', 'development')
config = get_config()  # loads base profile for env

# Individual overrides applied on top:
if os.getenv('AGENT_MODEL'):
    config.MODEL = os.getenv('AGENT_MODEL')
if os.getenv('AGENT_MAX_STEPS'):
    config.MAX_STEPS = int(os.getenv('AGENT_MAX_STEPS'))

print(f'Final model: {config.MODEL}')

توثيق ملفات تعريف الإعدادات لأعضاء الفريق

وثّق ملفات تعريف الإعدادات بوضوح — في تعليقات الكود أو README أو كليهما. يحتاج المطورون الجدد إلى فهم التغييرات بين البيئات حتى يتمكنوا من النشر بثقة.

# config_profiles.py — Configuration per environment
#
# | Setting        | development    | staging        | production  |
# |----------------|----------------|----------------|-------------|
# | MODEL          | gpt-4o-mini    | gpt-4o-mini    | gpt-4o      |
# | MAX_STEPS      | 10             | 20             | 30          |
# | LOG_LEVEL      | DEBUG          | INFO           | WARNING     |
# | CACHE_ENABLED  | False          | True           | True        |
# | MEMORY_DB      | SQLite (local) | PostgreSQL     | PostgreSQL  |
#
# To switch environments:
#   ENV=staging python agent.py
#
# To override a single setting:
#   ENV=production AGENT_MAX_STEPS=15 python agent.py

print('Config profile table documents all per-environment differences')

الإعدادات في الاختبارات: فرض ملف تعريف الاختبار

يجب أن تُشغّل الاختبارات دائمًا باستخدام إعدادات اختبار محددة — وليس إعدادات الإنتاج مطلقًا. أنشئ fixture لإعدادات الاختبار يطبّق الإعدادات المناسبة ويمنع أي استدعاءات غير مقصودة لواجهات API الخاصة بالإنتاج.

import os
import pytest

@pytest.fixture(autouse=True)
def test_environment(monkeypatch):
    'Force test configuration for all tests'
    monkeypatch.setenv('ENV', 'test')
    monkeypatch.setenv('AGENT_MODEL', 'gpt-4o-mini')
    monkeypatch.setenv('AGENT_MAX_STEPS', '5')  # short loops in tests
    monkeypatch.setenv('LOG_LEVEL', 'DEBUG')
    monkeypatch.setenv('CACHE_ENABLED', 'false')
    # Use a fake API key — tests should mock all LLM calls
    monkeypatch.setenv('OPENAI_API_KEY', 'test-key-not-real')

# This fixture runs before every test automatically
# Tests cannot accidentally use production settings

اختبار المعرفة: ملفات تعريف الإعدادات

اختبر مدى فهمك لملفات تعريف الإعدادات الخاصة بكل بيئة.

مراجعة: ملفات تعريف الإعدادات للتطوير والإنتاج

أصبحت لديك الآن استراتيجية متكاملة لإدارة إعدادات الوكلاء عبر البيئات المختلفة:

  • استخدم متغير ENV لتحديد سياق النشر
  • عرّف فئات إعدادات لكل بيئة مع القيم الافتراضية المناسبة
  • استخدم مصنع إعدادات لاختيار ملف التعريف المناسب تلقائيًا
  • استخدم pydantic-settings لإعدادات آمنة من ناحية الأنواع وموثّقة صحتها
  • استخدم أعلام الميزات لتمكين الميزات أو تعطيلها حسب البيئة
  • تحقق من الإعدادات واطبعها عند بدء التشغيل حتى يتمكن المشغلون من التأكد منها
  • افرض إعدادات اختبار في fixtures الخاصة بـ pytest لمنع الاستدعاءات إلى الإنتاج

إن الإدارة الجيدة للإعدادات هي ما يجعل قاعدة الشيفرة نفسها قابلة للنشر بأمان في بيئات التطوير والتجهيز والإنتاج.

الأسئلة الشائعة

هل درس «ملفات تعريف الإعدادات للتطوير والإنتاج» مجاني؟

نعم — نص درس «ملفات تعريف الإعدادات للتطوير والإنتاج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «ملفات تعريف الإعدادات للتطوير والإنتاج»؟

إعدادات خاصة بكل بيئة، ومفاتيح الميزات، وعمليات النشر المرحلية تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «ملفات تعريف الإعدادات للتطوير والإنتاج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. متغيرات البيئة للوكلاء
  2. ملفات .env وpython-dotenv
  3. تدوير الأسرار وأمنها
  4. ملفات تعريف الإعدادات للتطوير والإنتاج
← العودة إلى AI Agents