Configuratieprofielen voor development en productie
Omgevingsspecifieke configuraties, feature flags en gefaseerde deployments.
Configuratieprofielen voor development en productie is een gratis AI-agenten-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AI-agenten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AI-agenten bevat in totaal 4 lessen.
Waarom configuratieprofielen belangrijk zijn
Een productieagent en een ontwikkelagent horen zich verschillend te gedragen: verschillende niveaus voor logregistratie, verschillende modelniveaus (kosten tegenover kwaliteit), verschillende databases en verschillende limieten voor aanvragen. Met configuratieprofielen gebeurt dit automatisch — één omgevingsvariabele schakelt alle instellingen tegelijk om.
Omgevingen detecteren met de ENV-variabele
Het standaardpatroon is om een ENV- of ENVIRONMENT-variabele te lezen die de huidige implementatiecontext aangeeft. Je code selecteert vervolgens het juiste configuratieprofiel op basis van deze waarde.
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 developmentConfiguratieklassen per omgeving
Definieer een basisklasse voor configuratie en subklassen voor elke omgeving. Elke subklasse overschrijft de waarden die verschillen. Dit is leesbaarder en typeveiliger dan een groot woordenboek met voorwaardelijke logica.
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}')
Configuratiefunctie: het juiste profiel selecteren
Een configuratiefunctie leest de ENV-variabele en retourneert de juiste configuratieklasse. Deze ene functie is de enige plek die kennis heeft van de logica voor het wisselen tussen omgevingen.
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 voor getypeerde configuratie
pydantic-settings biedt een krachtige, typeveilige manier om configuratie te definiëren. Het leest automatisch omgevingsvariabelen, controleert typen en kan gegevens uit .env-bestanden laden. Installeer het met 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 met omgevingsspecifieke overschrijvingen
Combineer Pydantic Settings met berekende eigenschappen om omgevingsspecifieke standaardwaarden toe te passen die nog steeds door omgevingsvariabelen kunnen worden overschreven.
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'Functievlaggen per omgeving
Gebruik configuratieprofielen om functies per omgeving in of uit te schakelen. Schakel bijvoorbeeld alleen in de ontwikkelomgeving een foutopsporingsinterface in, gebruik alleen in productie echte betalingen en verwijs in staging naar diensten in een 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}')Configuratie bij het opstarten controleren
Controleer alle configuratie bij het opstarten en druk een samenvatting af, zodat beheerders kunnen verifiëren dat de agent correct is geconfigureerd voordat deze begint met verwerken. Zo voorkom je onopgemerkte configuratiefouten in productie.
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)
Configuratiewaarden per omgeving overschrijven
Overschrijf in CI/CD-pijplijnen specifieke configuratiewaarden zonder het volledige profiel te wijzigen. Geef afzonderlijke variabelen naast de ENV-variabele door om instellingen voor een specifieke implementatie aan te passen.
# 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}')Configuratieprofielen voor teamgenoten documenteren
Documenteer je configuratieprofielen duidelijk — in opmerkingen in de code, in de README of op beide plekken. Nieuwe ontwikkelaars moeten begrijpen wat er tussen omgevingen verandert om vol vertrouwen te kunnen implementeren.
# 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')Configuratie in testen: geforceerd testprofiel
Testen moeten altijd met een specifieke testconfiguratie worden uitgevoerd — nooit met productie-instellingen. Maak een testfixture voor configuratie die de juiste instellingen toepast en onbedoelde API-aanroepen naar productie voorkomt.
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 settingsKennischeck: configuratieprofielen
Toets je begrip van omgevingsspecifieke configuratieprofielen.
Samenvatting: configuratieprofielen voor ontwikkeling en productie
Je hebt nu een complete strategie voor configuratiebeheer van agents in verschillende omgevingen:
- Gebruik een
ENV-variabele om de implementatiecontext aan te geven - Definieer configuratieklassen per omgeving met geschikte standaardwaarden
- Gebruik een configuratiefunctie om automatisch het juiste profiel te selecteren
- Gebruik
pydantic-settingsvoor typeveilige, gevalideerde configuratie - Gebruik functievlaggen om functies per omgeving in of uit te schakelen
- Controleer de configuratie bij het opstarten en druk deze af, zodat beheerders de instellingen kunnen verifiëren
- Forceer een testconfiguratie in pytest-testfixtures om aanroepen naar productie te voorkomen
Goed configuratiebeheer zorgt ervoor dat dezelfde codebasis veilig kan worden uitgerold naar ontwikkeling, staging en productie.
Leer AI-agenten met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 60
- Lessen
- 239
Veelgestelde vragen
Is de les “Configuratieprofielen voor development en productie” gratis?
Ja — de volledige tekst van “Configuratieprofielen voor development en productie” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus AI-agenten wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus AI-agenten bevat in totaal 4 lessen.
Wat leer ik in “Configuratieprofielen voor development en productie”?
Omgevingsspecifieke configuraties, feature flags en gefaseerde deployments. Je oefent met AI-agenten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met AI-agenten te beginnen?
Ervaring vooraf is niet nodig. AI-agenten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Configuratieprofielen voor development en productie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over AI-agenten?
Ja. Elke les over AI-agenten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Omgevingsvariabelen voor agents
- .env-bestanden en python-dotenv
- Secrets roteren en beveiligen
- Configuratieprofielen voor development en productie