ملفات تعريف الإعدادات للتطوير والإنتاج
إعدادات خاصة بكل بيئة، ومفاتيح الميزات، وعمليات النشر المرحلية
ملفات تعريف الإعدادات للتطوير والإنتاج درس مجاني في 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- متغيرات البيئة للوكلاء
- ملفات .env وpython-dotenv
- تدوير الأسرار وأمنها
- ملفات تعريف الإعدادات للتطوير والإنتاج