Exercices Projets guidés Evaluer la qualite de l'agent
🎉

Bravo!

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

Evaluer la qualite de l'agent

Tu as construit un agent. Mais comment savoir s'il est bon ? En production, tu ne peux pas te contenter de le tester a la main sur trois questions. Il te faut un benchmark : un jeu de questions avec les reponses attendues, des metriques objectives, et un rapport automatique.

L'evaluation d'un agent est plus complexe que l'evaluation d'un modele classique parce qu'il faut mesurer plusieurs dimensions :
La precision des reponses (est-ce que la reponse contient les bons mots-cles ?)
L'efficacite (combien d'etapes pour repondre ?)
Le cout (combien de tokens consommes ?)
La fiabilite (est-ce que les sources citees sont pertinentes ?)

On va construire un evaluateur simple mais complet.

Ecris une fonction evaluer_reponse(reponse, mots_cles_attendus) qui prend une reponse (string) et une liste de mots-cles qui devraient apparaitre dans une bonne reponse. Elle renvoie un score entre 0 et 1 (proportion de mots-cles trouves dans la reponse, comparaison insensible a la casse).

Ecris une fonction evaluer_agent(agent_fn, benchmark) qui prend une fonction agent (qui prend une question et renvoie un dict avec au minimum "reponse" et "iterations") et un benchmark (liste de dicts avec "question", "mots_cles_attendus", et optionnellement "max_iterations_attendues").

Elle renvoie un rapport sous forme de dictionnaire :

{
"total_questions": N,
"score_moyen": 0.85,
"iterations_moyennes": 2.3,
"resultats_detailles": [
{"question": "...", "score": 0.75, "iterations": 2, "reussi": True},
...
],
"taux_reussite": 80.0 (pourcentage de questions avec score >= 0.5)
}

Exemple :

evaluer_reponse("Python a ete cree par Guido van Rossum en 1991", ["guido", "1991", "python"])
renvoie 1.0 (les trois mots-cles sont presents)

evaluer_reponse("Python est un langage", ["guido", "1991"])
renvoie 0.0 (aucun mot-cle attendu)

Tests (4/5)

Evaluation d'une reponse parfaite
score = evaluer_reponse("Python a ete cree par Guido van Rossum en 1991", ["guido", "1991", "python"])
assert score == 1.0, f"Score parfait attendu, obtenu {score}"
Evaluation d'une reponse partielle
score = evaluer_reponse("Python est un langage de programmation", ["python", "guido", "1991", "langage"])
assert score == 0.5, f"2 mots sur 4, attendu 0.5, obtenu {score}"
Evaluation d'un agent complet
def fake_agent(question):
    reponses = {
        "Q1": {"reponse": "Python et Guido", "iterations": 2},
        "Q2": {"reponse": "Rien de pertinent", "iterations": 1},
    }
    return reponses.get(question, {"reponse": "", "iterations": 1})

benchmark = [
    {"question": "Q1", "mots_cles_attendus": ["python", "guido"]},
    {"question": "Q2", "mots_cles_attendus": ["javascript", "react"]},
]
rapport = evaluer_agent(fake_agent, benchmark)
assert rapport["total_questions"] == 2
assert rapport["score_moyen"] == 0.5, f"Moyenne de 1.0 et 0.0 = 0.5, obtenu {rapport['score_moyen']}"
assert rapport["taux_reussite"] == 50.0
assert len(rapport["resultats_detailles"]) == 2
Mots-cles vides
score = evaluer_reponse("N'importe quoi", [])
assert score == 1.0, "Sans mots-cles attendus, le score doit etre 1.0"

+ 0 tests cachés

Indices (3 disponibles)

solution.py