Variables d’environnement pour les agents
os.environ, os.getenv() et raisons de ne jamais intégrer de secrets en dur dans le code source.
Variables d’environnement pour les agents est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Pourquoi ne faut-il pas coder les clés d’API en dur ?
Le codage en dur de clés d’API directement dans le code source est l’une des erreurs de sécurité les plus courantes et les plus coûteuses. Les clés enregistrées dans le système de gestion de versions sont visibles par toute personne ayant accès au dépôt — notamment les futurs contributeurs, les systèmes d’intégration continue et toute personne trouvant le dépôt en ligne.
Le problème de l’historique Git
Même si vous supprimez ultérieurement une clé codée en dur de votre code, elle reste présente dans votre historique git. Toute personne qui clone le dépôt et exécute git log ou git show peut la retrouver. Les clés ne doivent jamais être enregistrées dans le système de gestion de versions.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123def456' # simulate deployment env
OPENAI_API_KEY = os.environ['OPENAI_API_KEY']
print('Key loaded from environment — never hard-coded')os.environ[] par rapport à os.getenv()
Il existe deux façons de lire les variables d’environnement. os.environ['KEY'] lève KeyError si la variable est absente — ce qui est utile pour les clés obligatoires. os.getenv('KEY', default) renvoie une valeur par défaut si la variable est absente — ce qui est utile pour les paramètres facultatifs.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-demo-key'
try:
openai_key = os.environ['OPENAI_API_KEY']
except KeyError:
print('ERROR: OPENAI_API_KEY environment variable is not set!')
raise
model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
timeout = float(os.getenv('AGENT_TIMEOUT', '30'))
log_level = os.getenv('LOG_LEVEL', 'INFO')
max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
print(f'Model: {model}, Timeout: {timeout}s, Log: {log_level}')Valider les variables d’environnement obligatoires au démarrage
Une bonne pratique consiste à vérifier toutes les variables d’environnement obligatoires au démarrage et à échouer rapidement en affichant un message d’erreur clair. Cela évite des défaillances difficiles à déboguer à l’exécution, au cœur d’une boucle d’agent, lorsqu’une clé est absente.
import os
import sys
REQUIRED_VARS = [
'OPENAI_API_KEY',
'SEARCH_API_KEY',
'DATABASE_URL'
]
def check_required_env_vars():
missing = [var for var in REQUIRED_VARS if not os.getenv(var)]
if missing:
print('FATAL: Missing required environment variables:')
for var in missing:
print(f' - {var}')
print('\nSet these in your .env file or shell environment.')
sys.exit(1)
print(f'All {len(REQUIRED_VARS)} required environment variables are set.')
# Call this at the very start of your agent:
# check_required_env_vars()
if __name__ == '__main__':
for var in REQUIRED_VARS:
os.environ.setdefault(var, 'demo-value')
check_required_env_vars()
Le principe de l’application 12-Factor
La méthodologie 12-Factor App définit les bonnes pratiques pour les logiciels modernes. Facteur III : stocker la configuration dans l’environnement. Tout ce qui varie d’un déploiement à l’autre (développement, préproduction, production) — clés d’API, URL et indicateurs de fonctionnalité — doit provenir de variables d’environnement et non du code.
import os
os.environ['OPENAI_API_KEY'] = 'sk-proj-demo'
os.environ['SEARCH_API_KEY'] = 'tvly-demo'
os.environ['DATABASE_URL'] = 'postgresql://user:pass@localhost/agentdb'
config = {
'openai_key': os.environ['OPENAI_API_KEY'],
'search_key': os.environ['SEARCH_API_KEY'],
'database_url': os.environ['DATABASE_URL'],
'redis_url': os.getenv('REDIS_URL', 'redis://localhost:6379'),
'enable_caching': os.getenv('ENABLE_CACHING', 'true') == 'true',
'max_results': int(os.getenv('MAX_RESULTS', '10')),
'log_level': os.getenv('LOG_LEVEL', 'INFO'),
'env': os.getenv('ENV', 'development')
}
print('Config loaded from environment:', config['env'])Définir les variables d’environnement dans le shell
Définissez les variables d’environnement dans votre session de terminal avec export (Mac/Linux) ou set (Windows). Elles sont disponibles pour tout programme exécuté dans cette session.
# Mac/Linux (bash/zsh):
# export OPENAI_API_KEY='sk-proj-your-key-here'
# export AGENT_MODEL='gpt-4o-mini'
# python agent.py
# Windows (Command Prompt):
# set OPENAI_API_KEY=sk-proj-your-key-here
# python agent.py
# Windows (PowerShell):
# $env:OPENAI_API_KEY = 'sk-proj-your-key-here'
# python agent.py
# One-liner (temporary, only for this command):
# OPENAI_API_KEY='sk-proj-...' python agent.py
print('Shell exports set env vars for the current session only')Lister les variables obligatoires dans les commentaires du code
Documentez directement dans le code source les variables d’environnement dont votre agent a besoin. Un nouveau développeur devrait pouvoir lire le début de votre fichier d’agent et savoir exactement quoi configurer.
# agent.py
#
# REQUIRED ENVIRONMENT VARIABLES:
# OPENAI_API_KEY OpenAI API key (get from platform.openai.com)
# SEARCH_API_KEY Tavily search API key (get from tavily.com)
#
# OPTIONAL ENVIRONMENT VARIABLES:
# AGENT_MODEL LLM model (default: gpt-4o-mini)
# AGENT_MAX_STEPS Max loop iterations (default: 20)
# LOG_LEVEL Logging verbosity: DEBUG|INFO|WARNING (default: INFO)
# DATABASE_URL PostgreSQL URL (default: none, disables memory storage)
#
# EXAMPLE SETUP:
# cp .env.example .env
# Edit .env with your keys
# python agent.py --query 'Your question'
print('Document required variables at the top of each agent file')Accéder à une configuration imbriquée en toute sécurité
Pour les agents qui disposent de nombreuses options de configuration, créez une classe de configuration qui lit et valide toutes les variables d’environnement au même endroit. Cela centralise la validation et rend le reste de votre code plus clair.
import os
class AgentConfig:
def __init__(self):
self.openai_key = self._require('OPENAI_API_KEY')
self.search_key = self._require('SEARCH_API_KEY')
self.model = os.getenv('AGENT_MODEL', 'gpt-4o-mini')
self.max_steps = int(os.getenv('AGENT_MAX_STEPS', '20'))
self.log_level = os.getenv('LOG_LEVEL', 'INFO')
self.env = os.getenv('ENV', 'development')
def _require(self, key: str) -> str:
value = os.getenv(key)
if not value:
raise EnvironmentError(
f'Required environment variable {key} is not set. '
f'See .env.example for setup instructions.'
)
return value
# config = AgentConfig() # raises clear error if any key is missing
# client = openai.OpenAI(api_key=config.openai_key)
if __name__ == '__main__':
os.environ.setdefault('OPENAI_API_KEY', 'sk-demo-1234')
os.environ.setdefault('SEARCH_API_KEY', 'demo-search-key')
config = AgentConfig()
print(f'Model: {config.model}, max_steps: {config.max_steps}, env: {config.env}')
Masquer les clés dans les journaux
Ne consignez jamais les clés d’API en clair. Si vous devez journaliser la configuration à des fins de débogage, masquez tous les caractères sauf les 4 derniers. Vous confirmez ainsi que la clé est chargée sans l’exposer.
import os
def mask_key(key: str) -> str:
if not key or len(key) < 8:
return '****'
return '*' * (len(key) - 4) + key[-4:]
def log_config_summary(config: dict):
print('Agent configuration:')
for name, value in config.items():
if 'key' in name.lower() or 'secret' in name.lower() or 'token' in name.lower():
print(f' {name}: {mask_key(value)}')
else:
print(f' {name}: {value}')
config = {
'openai_key': os.getenv('OPENAI_API_KEY', ''),
'model': 'gpt-4o-mini',
'max_steps': '20'
}
log_config_summary(config)
# openai_key: ****abcd
# model: gpt-4o-miniVariables d’environnement dans Docker et l’intégration continue
Dans Docker, transmettez les variables d’environnement avec des options -e ou un fichier --env-file. Dans GitHub Actions, stockez-les comme secrets et référencez-les dans le fichier YAML du flux de travail. Ne les intégrez jamais à l’image Docker.
# Docker run with env vars:
# docker run -e OPENAI_API_KEY='sk-...' -e AGENT_MODEL='gpt-4o-mini' myagent:latest
# Docker with an env file:
# docker run --env-file .env myagent:latest
# GitHub Actions workflow (secrets stored in repo settings):
# env:
# OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
# SEARCH_API_KEY: ${{ secrets.SEARCH_API_KEY }}
# docker-compose.yml:
# services:
# agent:
# image: myagent:latest
# env_file:
# - .env
print('Never bake secrets into Docker images — always inject at runtime')Que faire lorsqu’une clé est exposée
Si vous validez accidentellement une clé d’API dans un dépôt public ou partagé, agissez immédiatement. Considérez la clé comme compromise dès qu’elle échappe à votre contrôle — des robots analysent GitHub à la recherche de clés quelques secondes seulement après une validation.
# Immediate response if a key is exposed:
# 1. REVOKE the key immediately (provider dashboard)
# OpenAI: platform.openai.com/api-keys -> Delete key
# Anthropic: console.anthropic.com -> API Keys
# 2. Generate a new key
# 3. Update your .env file with the new key
# 4. Rotate in all environments (staging, prod)
# Remove from git history (does NOT guarantee removal from forks/clones):
# git filter-branch or git-filter-repo to rewrite history
# Force push to all branches
# Note: Rewriting git history cannot undo exposure
# if others have already cloned or forked the repo
print('Revoke immediately. Do not just remove from code — rotate the key.')Vérification des connaissances : variables d’environnement
Testez votre compréhension des variables d’environnement utilisées pour gérer les secrets d’un agent.
Récapitulatif : variables d’environnement pour les agents
Vous comprenez désormais la bonne approche de la gestion des secrets pour les agents :
- Ne codez jamais les clés d’API en dur — elles restent définitivement dans l’historique git
- Utilisez
os.environ['KEY']pour les variables obligatoires etos.getenv('KEY', default)pour les variables facultatives - Validez toutes les variables obligatoires au démarrage avec un message d’erreur clair
- Documentez les variables obligatoires dans les commentaires du code et dans
.env.example - Masquez les clés dans les journaux — n’affichez que les 4 derniers caractères
- Injectez les secrets à l’exécution dans Docker ; utilisez les secrets GitHub dans l’intégration continue
- Si une clé est exposée : révoquez-la d’abord, puis renouvelez-la partout
Questions Fréquemment Posées
La leçon « Variables d’environnement pour les agents » est-elle gratuite ?
Oui — le texte complet de « Variables d’environnement pour les agents » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Variables d’environnement pour les agents » ?
os.environ, os.getenv() et raisons de ne jamais intégrer de secrets en dur dans le code source. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Variables d’environnement pour les agents » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Variables d’environnement pour les agents
- Fichiers .env et python-dotenv
- Rotation et sécurité des secrets
- Profils de configuration pour le développement et la production