Exercices AI Engineering Evaluer une reponse LLM
🎉

Bravo!

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
Concision correcte
r_court = evaluer_reponse('Q', 'Oui')
assert r_court['concision'] == 0.5
r_bon = evaluer_reponse('Q', 'x' * 100)
assert r_bon['concision'] == 1.0
r_long = evaluer_reponse('Q', 'x' * 1500)
assert r_long['concision'] == 0.0
Score global est une moyenne arrondie
r = evaluer_reponse('test question', 'x' * 100, ['test'])
assert r['score_global'] == round((r['pertinence'] + r['completude'] + r['concision']) / 3, 2)

+ 0 tests cachés

Indices (3 disponibles)

solution.py