Exercices Projets guidés Configuration et personnalisation
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Configuration et personnalisation

Un bon outil est un outil configurable. Le vrai Claude Code utilise des fichiers de configuration pour definir le modele, les permissions, les patterns a ignorer. Tu peux le personnaliser pour chaque projet.

Ton Mini Claude Code a besoin de la meme chose. Un fichier de configuration (au format JSON ou YAML) qui definit le comportement de l'agent. Et surtout, des profils : un profil "coding" qui privilegie la precision, un profil "writing" qui privilegie la creativite, un profil "debug" qui est verbeux et methodique.

YAML est le format prefere pour les fichiers de config lisibles par les humains. Mais comme le sandbox n'a pas forcement le module yaml, on va utiliser des dictionnaires Python pour representer la config et une fonction de validation.

Ecris une classe ConfigurationAgent qui gere la configuration de ton agent.

La classe prend un dictionnaire de config optionnel a la construction. Si rien n'est fourni, elle utilise la config par defaut.

Config par defaut :

{
"model": "gpt-4o-mini",
"provider": "openai",
"max_tokens": 4096,
"temperature": 0.7,
"dossier_travail": ".",
"max_iterations": 10,
"confirmer_ecriture": True,
"extensions_autorisees": [".py", ".js", ".ts", ".md", ".txt", ".json", ".yaml", ".toml"],
"profil": "coding"
}

Profils predefinies :

"coding" : temperature 0.2, system_prompt "Tu es un assistant de programmation expert. Tu ecris du code propre, bien commente, avec des tests."
"writing" : temperature 0.8, system_prompt "Tu es un assistant d'ecriture creatif. Tu aides a rediger des textes clairs et engageants."
"debug" : temperature 0.1, system_prompt "Tu es un debugger methodique. Tu analyses les erreurs etape par etape, tu proposes des hypotheses et tu les verifies."

Methodes :

valider() : verifie que la config est valide (types corrects, valeurs dans les bornes). Renvoie une liste d'erreurs (vide si tout est OK).

obtenir(cle, defaut=None) : recupere une valeur de config.

modifier(cle, valeur) : modifie une valeur. Reverifie la validite.

appliquer_profil(nom_profil) : applique un profil (modifie temperature et system_prompt).

exporter() : renvoie un dictionnaire complet de la config actuelle.

obtenir_system_prompt() : renvoie le system prompt du profil actif.

Validations :
temperature doit etre entre 0 et 2
max_tokens doit etre entre 1 et 128000
max_iterations doit etre entre 1 et 50
provider doit etre "openai" ou "anthropic"
profil doit etre "coding", "writing" ou "debug"

Exemple :

config = ConfigurationAgent()
config.obtenir("model") # "gpt-4o-mini"
config.obtenir("temperature") # 0.7

config.appliquer_profil("debug")
config.obtenir("temperature") # 0.1

config.modifier("temperature", 5.0)
erreurs = config.valider()
# ["temperature doit etre entre 0 et 2"]

Tests (4/5)

Config par defaut
config = ConfigurationAgent()
assert config.obtenir("model") == "gpt-4o-mini"
assert config.obtenir("temperature") == 0.7
assert config.obtenir("max_iterations") == 10
assert config.obtenir("provider") == "openai"
Validation detecte les erreurs
config = ConfigurationAgent({"temperature": 5.0, "max_tokens": 0, "provider": "google"})
erreurs = config.valider()
assert len(erreurs) >= 3, f"Attendu au moins 3 erreurs, obtenu {len(erreurs)}: {erreurs}"
assert any("temperature" in e for e in erreurs)
assert any("max_tokens" in e for e in erreurs)
assert any("provider" in e for e in erreurs)
Appliquer un profil
config = ConfigurationAgent()
config.appliquer_profil("debug")
assert config.obtenir("temperature") == 0.1, "Le profil debug doit mettre la temperature a 0.1"
assert config.obtenir("profil") == "debug"

prompt = config.obtenir_system_prompt()
assert "debug" in prompt.lower() or "methodique" in prompt.lower(), "Le system prompt doit correspondre au profil debug"
Modifier et exporter
config = ConfigurationAgent()
config.modifier("model", "gpt-4o")
config.modifier("max_tokens", 8192)
export = config.exporter()
assert export["model"] == "gpt-4o"
assert export["max_tokens"] == 8192
assert isinstance(export, dict)

+ 0 tests cachés

Indices (3 disponibles)

solution.py