0Pricing
AI Agents · Lekcja

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 development

Klasy 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 variable

Pydantic 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 missing

Pydantic 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 settings

Sprawdzenie 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 ENV do 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-settings do 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

  1. Zmienne środowiskowe dla agentów
  2. Pliki .env i python-dotenv
  3. Rotacja sekretów i bezpieczeństwo
  4. Profile konfiguracji dla środowisk deweloperskich i produkcyjnych
← Powrót do AI Agents