Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Evaluer la qualite des reponses
Ton pipeline RAG fonctionne, mais est-ce qu'il repond bien ? En production, tu ne peux pas te contenter de "ca a l'air de marcher". Il te faut des metriques. C'est ce qu'on appelle l'evaluation, et c'est souvent la partie que les developpeurs negligent.
L'idee est simple : tu crees un jeu de test avec des paires question/reponse attendue. Tu passes chaque question dans ton pipeline et tu compares la reponse obtenue avec la reponse attendue. Ce n'est pas une comparaison exacte (le LLM ne repondra jamais mot pour mot la meme chose), mais une verification que les mots-cles importants sont presents.
Voici un jeu de test typique :
test_set = [ {"question": "Combien de jours de conges ?", "mots_cles_attendus": ["25", "jours"]}, {"question": "Le teletravail est-il autorise ?", "mots_cles_attendus": ["3", "jours", "semaine"]}, ]
Ecris une fonction evaluer_reponse(reponse, mots_cles_attendus) qui prend une reponse (string) et une liste de mots-cles attendus. Elle renvoie un dictionnaire avec "score" (proportion de mots-cles trouves dans la reponse, entre 0 et 1), "trouves" (liste des mots-cles trouves) et "manquants" (liste des mots-cles manquants).
Ecris aussi une fonction evaluer_pipeline(test_set, fonction_reponse) qui prend un jeu de test et une fonction qui simule le pipeline (prend une question, renvoie une reponse). Elle renvoie un rapport avec "score_moyen" (moyenne des scores), "nb_tests" (nombre de tests), "details" (liste des resultats par question : question, reponse, score, mots_cles_trouves, mots_cles_manquants) et "taux_reussite" (proportion de tests avec un score >= 0.5).
Exemple :
evaluer_reponse("Les conges sont de 25 jours par an", ["25", "jours", "an"]) renvoie {"score": 1.0, "trouves": ["25", "jours", "an"], "manquants": []}
r = evaluer_reponse("Les conges sont de 25 jours par an", ["25", "jours", "an"])
assert r["score"] == 1.0, f"Tous les mots-cles sont presents, le score doit etre 1.0, pas {r['score']}"
assert r["trouves"] == ["25", "jours", "an"]
assert r["manquants"] == []
Aucun mot-cle trouve
r = evaluer_reponse("Le teletravail est possible", ["25", "conges"])
assert r["score"] == 0.0, f"Aucun mot-cle present, le score doit etre 0.0, pas {r['score']}"
assert len(r["manquants"]) == 2
Score partiel
r = evaluer_reponse("Il y a 25 jours de vacances", ["25", "jours", "conges"])
assert abs(r["score"] - 2/3) < 0.01, f"2 mots-cles sur 3, le score doit etre environ 0.6667, pas {r['score']}"
assert len(r["trouves"]) == 2
assert "conges" in r["manquants"]