Profile konfiguracji dla środowisk deweloperskich i produkcyjnych
Konfiguracje zależne od środowiska, feature flags i wdrożenia etapowe.
Profile konfiguracji dla środowisk deweloperskich i produkcyjnych to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.
Znaczenie profili konfiguracji
Agent produkcyjny i agent deweloperski powinny działać inaczej: mieć różne poziomy logowania, korzystać z różnych poziomów modeli (koszt a jakość), różnych baz danych i różnych limitów szybkości. Profile konfiguracji automatyzują te różnice — jedna zmienna środowiskowa przełącza wszystkie ustawienia jednocześnie.
Wykrywanie środowiska za pomocą zmiennej ENV
Standardowy wzorzec polega na odczytaniu zmiennej ENV (lub ENVIRONMENT), która identyfikuje bieżący kontekst wdrożenia. Następnie kod wybiera odpowiedni profil konfiguracji na podstawie wartości tej zmiennej.
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 developmentKlasy konfiguracji dla poszczególnych środowisk
Należy zdefiniować bazową klasę konfiguracji oraz podklasy dla każdego środowiska. Każda podklasa nadpisuje wartości, które się różnią. Takie rozwiązanie jest czytelniejsze i bezpieczniejsze typowo niż duży słownik warunków.
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}')
Fabryka konfiguracji: wybór właściwego profilu
Funkcja fabryki konfiguracji odczytuje zmienną ENV i zwraca odpowiednią klasę konfiguracji. Ta jedna funkcja jest jedynym miejscem, które zna logikę przełączania środowiska.
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 variablePydantic Settings na potrzeby typowanej konfiguracji
pydantic-settings zapewnia zaawansowany i bezpieczny typowo sposób definiowania konfiguracji. Automatycznie odczytuje zmienne środowiskowe, weryfikuje typy i może ładować dane z plików .env. Instalacja odbywa się za pomocą polecenia 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 missingPydantic Settings z nadpisaniami zależnymi od środowiska
Połącz Pydantic Settings z właściwościami obliczanymi, aby stosować wartości domyślne zależne od środowiska, które nadal można nadpisywać za pomocą zmiennych środowiskowych.
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'Flagi funkcji dla poszczególnych środowisk
Należy używać profili konfiguracji do włączania lub wyłączania funkcji w poszczególnych środowiskach. Można na przykład włączyć interfejs debugowania tylko w środowisku deweloperskim, używać rzeczywistych płatności wyłącznie na produkcji oraz kierować środowisko stagingowe do usług sandboxowych.
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}')Walidacja konfiguracji podczas uruchamiania
Należy zweryfikować całą konfigurację podczas uruchamiania i wyświetlić podsumowanie, aby operatorzy mogli sprawdzić, czy agent jest poprawnie skonfigurowany, zanim rozpocznie przetwarzanie. Pozwala to uniknąć cichej błędnej konfiguracji na produkcji.
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)
Nadpisywanie wartości konfiguracji dla poszczególnych środowisk
W potokach CI/CD należy nadpisywać wybrane wartości konfiguracji bez zmieniania całego profilu. Oprócz zmiennej ENV należy przekazywać pojedyncze zmienne, aby dostosować ustawienia do konkretnego wdrożenia.
# 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}')Dokumentowanie profili konfiguracji dla zespołu
Profile konfiguracji należy jasno opisać — w komentarzach w kodzie, pliku README lub w obu miejscach. Nowi programiści muszą rozumieć, co zmienia się między środowiskami, aby móc bez obaw wykonywać wdrożenia.
# 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')Konfiguracja w testach: wymuszony profil testowy
Testy powinny zawsze działać z określoną konfiguracją testową — nigdy z ustawieniami produkcyjnymi. Należy utworzyć fixture testowy, który stosuje odpowiednie ustawienia i zapobiega przypadkowym wywołaniom produkcyjnego 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 settingsSprawdzenie wiedzy: profile konfiguracji
Sprawdź swoją wiedzę na temat profili konfiguracji zależnych od środowiska.
Podsumowanie: profile konfiguracji dla środowisk deweloperskich i produkcyjnych
Ma już Pani/Pan kompletną strategię zarządzania konfiguracją agentów w różnych środowiskach:
- Używać zmiennej
ENVdo identyfikowania kontekstu wdrożenia - Definiować klasy konfiguracji dla poszczególnych środowisk wraz z odpowiednimi wartościami domyślnymi
- Używać fabryki konfiguracji do automatycznego wyboru właściwego profilu
- Używać
pydantic-settingsdo bezpiecznej typowo i zweryfikowanej konfiguracji - Używać flag funkcji do włączania i wyłączania funkcji w poszczególnych środowiskach
- Weryfikować i wyświetlać konfigurację podczas uruchamiania, aby operatorzy mogli sprawdzić ustawienia
- Wymuszać konfigurację testową w fixture'ach pytest, aby zapobiegać wywołaniom produkcyjnym
Dobre zarządzanie konfiguracją pozwala bezpiecznie wdrażać tę samą bazę kodu w środowiskach deweloperskim, stagingowym i produkcyjnym.
Często zadawane pytania
Czy lekcja „Profile konfiguracji dla środowisk deweloperskich i produkcyjnych” jest bezpłatna?
Tak — pełny tekst „Profile konfiguracji dla środowisk deweloperskich i produkcyjnych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.
Co nauczysz się w „Profile konfiguracji dla środowisk deweloperskich i produkcyjnych”?
Konfiguracje zależne od środowiska, feature flags i wdrożenia etapowe. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć AI Agents?
Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Profile konfiguracji dla środowisk deweloperskich i produkcyjnych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?
Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zmienne środowiskowe dla agentów
- Pliki .env i python-dotenv
- Rotacja sekretów i bezpieczeństwo
- Profile konfiguracji dla środowisk deweloperskich i produkcyjnych