Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Evaluer une reponse LLM
Quand tu deploies un LLM, comment sais-tu si ses reponses sont bonnes ? Tu ne peux pas lire chaque reponse manuellement. Il faut des metriques automatiques. Dans l'industrie, on evalue generalement sur trois criteres : la pertinence (la reponse repond-elle a la question ?), la completude (la reponse est-elle assez detaillee ?) et la concision (la reponse est-elle trop longue ?).
C'est comme la notation d'un devoir : tu as une grille de criteres avec des points pour chacun. Le score final est la moyenne des criteres.
En pratique, ces evaluations sont souvent faites par un autre LLM (LLM-as-judge), mais ici on va utiliser des heuristiques simples basees sur le texte.
Tu vas ecrire une fonction evaluer_reponse(question, reponse, mots_cles_attendus=None) qui renvoie un dictionnaire avec les scores suivants (entre 0.0 et 1.0) :
- "pertinence" : proportion de mots de la question qui apparaissent dans la reponse (en minuscules, mots de plus de 3 caracteres seulement, pour ignorer les mots comme "le", "de", "est") - "completude" : si mots_cles_attendus est fourni, proportion de mots-cles presents dans la reponse. Si non fourni, renvoie 1.0. - "concision" : 1.0 si la reponse fait entre 50 et 500 caracteres. 0.5 si elle fait moins de 50 ou entre 500 et 1000. 0.0 si elle fait plus de 1000. - "score_global" : moyenne des trois scores, arrondie a 2 decimales.
Exemple :
evaluer_reponse( "Comment installer Python ?", "Pour installer Python, telecharge-le depuis python.org", ["installer", "python", "telecharger"] ) renvoie un dictionnaire avec pertinence, completude, concision et score_global
Tests (4/5)
Pertinence elevee
r = evaluer_reponse('Comment fonctionne Python ?', 'Python fonctionne avec un interpreteur')
assert r['pertinence'] > 0.5
Completude avec mots-cles
r = evaluer_reponse('Q', 'Python est un langage de programmation', ['python', 'langage'])
assert r['completude'] == 1.0
r2 = evaluer_reponse('Q', 'Bonjour', ['python', 'langage'])
assert r2['completude'] == 0.0