Aller au contenu
English

Trouver où ça échoue

  • Leçon 15
  • 50 min
  • Module 5 : Évaluer et déboguer le pipeline

Ce que vous saurez faire

Avant de changer quoi que ce soit, trouvez l’étape où commence une mauvaise réponse, des documents à la réponse générée. Ensuite, changez une chose à la fois et mesurez son effet. Chaque changement retenu doit s’appuyer sur des preuves provenant de l’étape qu’il corrige.

Avant de commencerCe qu’il faut savoir et avoir sous la mainEnviron 50 minutes

Ce que vous devez savoir

Ce qu’il vous faut sur votre ordinateur

Cette leçon n’ajoute aucun fichier au projet. Dans la pratique du module, vous écrivez votre propre petit script. Deux expériences de cette leçon ont appelé un modèle hébergé. Leurs réponses sont citées, et vous n’avez pas besoin de compte. Testé avec Python 3.12.13 sur macOS (Apple silicon). Les commandes Windows ne sont pas testées.

Vous commandez un colis, et il n’arrive jamais. Où est le problème? L’entrepôt n’a peut-être jamais eu l’article. L’étiquette est peut-être déchirée, alors personne ne sait ce qu’il contient. La personne qui prépare la commande a peut-être choisi la mauvaise tablette. La personne qui emballe a peut-être oublié de mettre l’article dans la boîte. Ou le livreur a peut-être laissé la boîte à la mauvaise porte.

Un bon magasin vérifie les étapes dans l’ordre, en commençant par l’entrepôt. Changer de livreur ne règle rien si l’entrepôt n’a jamais eu l’article. Et si le magasin change de livreur et de responsable de l’emballage le même jour, il ignore quel changement a aidé.

Le problème : « utiliser un modèle plus puissant »

Section intitulée « Le problème : « utiliser un modèle plus puissant » »

chat-small avec la recherche reclassée donne 8 mauvaises réponses. Tomás propose une solution rapide : « Passons à chat-strong. Un modèle plus puissant fait moins d’erreurs. »

Les enregistrements contiennent déjà cette expérience. Avec la même recherche, chat-strong répond correctement à 50 des 59 questions ayant une réponse, selon les corrigés. La vérification manuelle en compte 51, comme pour chat-small. Il coûte 18 fois plus par question. Pourquoi un modèle plus puissant n’a-t-il pas aidé? Parce que 6 des 8 mauvaises réponses de chat-small venaient d’échecs de recherche. Pour ces questions, le passage contenant la réponse n’a jamais atteint le modèle. Aucun modèle ne peut répondre à partir d’un passage qu’il ne voit jamais.

Avant de changer quoi que ce soit, trouvez donc l’étape où commence chaque échec.

L’idée : cinq étapes où une réponse peut échouer

Section intitulée « L’idée : cinq étapes où une réponse peut échouer »

Une réponse passe par cinq étapes, et chacune peut perdre les preuves. Chaque étape a un exemple réel tiré de ce cours.

Cinq étapes de gauche à droite, chacune avec un type d'échec, un exemple réel et une vérification. 1 Source, source manquante : le guide PW-2200 était un PDF que le module 1 ne lisait pas. La question « Quel ensemble de pompe convient au PW-2200? » trouvait donc d'abord le tableau PW-2400. Vérification : le document est-il dans l'index? 2 Segments, mauvais segment : les segments fixes de 100 mots coupaient le tableau de garantie. Pour Q34, le premier segment compte comme un résultat pertinent, mais ne contient ni « arroseurs » ni « 1 an ». Vérification : un segment contient-il toute la réponse? 3 Recherche, récupération ratée : pour Q28, la section Frais de retour de la version 3 était au rang 10. Les deux modèles disaient que les documents ne précisaient rien; BM25 la plaçait au rang 3. Vérification : le rang du premier segment pertinent. 4 Contexte, choix du contexte : pour Q45 à Q48, aucun contexte ne contenait la règle « une politique prévaut sur un article d'aide ». chat-small ne pouvait donc pas dire quel délai s'appliquait à Q47. Vérification : quels passages la requête contenait-elle? 5 Réponse, génération : gemma3:4b avait la ligne « batteries et chargeurs : 1 an » pour Q33 et répondait « 3 ans ». Vérification : le contexte donne-t-il la bonne réponse?
Les cinq étapes où une réponse peut échouer, chacune avec un exemple réel des exécutions du cours et la vérification qui la repère.
Description textuelle du diagramme

Cinq cases alignées, reliées par des flèches : 1 Source, 2 Segments, 3 Recherche, 4 Contexte, 5 Réponse. Sous chacune, le type d’échec et un exemple réel. Source manquante : dans le module 1, le guide PW-2200 était un PDF, et le projet lisait seulement le Markdown. La question « Quel ensemble de pompe convient au PW-2200? » retournait donc d’abord le tableau PW-2400. Mauvais segment : les segments fixes de 100 mots coupaient le tableau de garantie. Pour Q34, le premier segment compte comme un résultat pertinent, mais ne contient ni « arroseurs » ni « 1 an ». Récupération ratée : pour Q28, la recherche reclassée plaçait la section « Frais de retour » de la version 3 au rang 10. Les deux modèles hébergés disaient que les documents ne précisaient rien. BM25 la plaçait au rang 3. Choix du contexte : pour Q45 à Q48, aucun contexte ne contenait la règle de priorité. Pour Q47, chat-small ne pouvait pas dire quel délai s’appliquait. Génération : pour Q33, gemma3:4b avait la ligne du tableau « batteries et chargeurs : 1 an » dans son contexte et répondait « 3 ans ». Sous chaque case se trouve sa vérification. Le document est-il dans l’index? Un segment contient-il toute la réponse? Quel est le rang du premier segment pertinent? Quels passages la requête contenait-elle? Le contexte donne-t-il la bonne réponse?

  • Source manquante : le document contenant la réponse n’est pas du tout dans l’index. Aucune étape suivante ne peut le trouver.
  • Mauvais segment : le document est présent, mais le découpage sépare la réponse ou perd son titre.
  • Récupération ratée : un segment contient la réponse, mais la recherche le classe en dehors des k premiers résultats.
  • Choix du contexte : la recherche a trouvé les preuves, mais le contexte ne contenait pas tout ce qu’il fallait pour répondre. Le budget, k, un filtre ou la suppression d’un doublon détermine ce qui y entre.
  • Génération : les preuves étaient dans la requête (prompt), mais le modèle a quand même mal répondu.

Il reste une possibilité, avant les cinq étapes : la mesure est erronée. La réponse est bonne, mais le corrigé la marque comme mauvaise, comme pour Q45 et « 5–10 ». La première vérification consiste donc toujours à lire la réponse.

Vérifiez les étapes dans l’ordre, comme le magasin. Chaque question a sa vérification, et le projet a une commande pour chacune.

Un arbre de décision. Une réponse que les vérifications jugent mauvaise. Est-elle mauvaise quand vous la lisez? Non : la mesure a échoué, corrigez le corrigé, comme pour Q45 avec « 5–10 ». Oui : le document est-il dans l'index? Non : 1 source manquante. Oui : un segment contient-il la réponse? Non : 2 mauvais segment. Oui : ce segment figure-t-il dans les k premiers résultats de recherche? Non : 3 récupération ratée; aux rangs 6 à 10, k est aussi un choix. Oui : la requête le contenait-elle, avec la règle nécessaire? Non : 4 choix du contexte. Oui : 5 génération.
Trouvez l'étape d'une mauvaise réponse : vérifiez d'abord la mesure, puis les étapes dans l'ordre du pipeline.
Description textuelle du diagramme

Un chemin de haut en bas avec cinq questions auxquelles répondre par oui ou non. D’abord : la réponse est-elle mauvaise quand vous la lisez? Sinon, la mesure a échoué (Q45, « 5–10 »). Ensuite : le document est-il dans l’index (chunks DOC_ID)? Sinon, c’est une source manquante. Un segment contient-il la réponse? Sinon, c’est un mauvais segment. Ce segment figure-t-il dans les k premiers résultats de recherche (le rang du premier segment pertinent)? Sinon, c’est une récupération ratée; aux rangs 6 à 10, le choix de k compte aussi. La requête le contenait-elle, avec tous les autres passages nécessaires à la réponse, comme une règle (les passages qu’affiche ask)? Sinon, c’est un choix du contexte. Si oui, c’est un échec de génération.

Exemple détaillé : les huit mauvaises réponses de chat-small

Section intitulée « Exemple détaillé : les huit mauvaises réponses de chat-small »

L’étiquette générale de la dernière leçon indiquait 6 échecs de récupération et 2 de génération. Faites maintenant passer chaque réponse dans l’arbre de décision. Il vous manque un fait : le rang du premier segment pertinent quand la recherche retourne 20 résultats plutôt que 5.

  1. Lancez Python dans le dossier du projet avec python, puis exécutez :

    Python session, in ~/projects/policy-assistant
    from policy_assistant.store import Store
    from policy_assistant.embed import make_embedder
    from policy_assistant.rerank import Reranker
    from policy_assistant.search import Retriever
    from policy_assistant.filters import Filters
    from policy_assistant.evaluate import load_questions, retrieval_scores
    store = Store("index.sqlite")
    retriever = Retriever(store, make_embedder("intfloat/multilingual-e5-small"), Reranker())
    qs = load_questions()
    for qid in ["Q13", "Q26", "Q28", "Q36", "Q46", "Q56", "Q57", "Q60"]:
    q = qs[qid]
    ranked = [r.chunk for r in retriever.search(q.question, "rerank", 20, Filters(q.as_of, "staff"))]
    s = retrieval_scores(q, ranked, 5)
    print(qid, "| first relevant at rank", s["first_rank"], "| recall@5", round(s["recall"], 2))

    Appuyez sur Entrée sur la ligne vide après la boucle. Cela prend quelques secondes :

    Q13 | first relevant at rank None | recall@5 0.0
    Q26 | first relevant at rank 3 | recall@5 1.0
    Q28 | first relevant at rank 10 | recall@5 0.0
    Q36 | first relevant at rank 6 | recall@5 0.0
    Q46 | first relevant at rank 1 | recall@5 0.33
    Q56 | first relevant at rank 7 | recall@5 0.0
    Q57 | first relevant at rank 9 | recall@5 0.0
    Q60 | first relevant at rank 14 | recall@5 0.0
  2. Quittez Python avec exit(). Examinez le contexte de Q36 :

    Fenêtre de terminal
    python -m policy_assistant ask Q36
    Question (date 2026-10-09): Can a customer in Halifax choose express delivery?
    Passages: 961b93b4780b, bca83d55361b, 45b922eb303b, 0936bc8d346d, ac221efffd61 (421 tokens, estimated)
    Answer (the documents do not answer): The documents do not say whether a customer in Halifax can choose express delivery.
    gpt-6-luna-2026-09-22 | 799 tokens in, 53 out | 0.978 s

Tous les documents sont dans l’index, et chaque segment pertinent contient sa réponse. Les huit réponses passent donc les étapes 1 et 2. Le reste du chemin donne ce tableau :

Question Premier rang pertinent Ce qui s’est passé Étape
Q13 aucun parmi les 20 question en anglais; la seule réponse est dans le document français sur la garantie légale au Québec récupération ratée
Q60 14 la même réponse, demandée en français récupération ratée
Q28 10 Frais de retour de la version 3, juste après les 5 premiers résultats récupération ratée, k
Q36 6 le tableau de livraison juste après les 5 premiers résultats; le contexte utilisait 421 des 1 500 jetons récupération ratée, k
Q56 7 le tableau de garantie après les 5 premiers résultats; la fiche du fournisseur avec son instruction cachée au rang 2 récupération ratée, k
Q57 9 Comment faire une réclamation après les 5 premiers résultats; la même fiche du fournisseur au rang 1 récupération ratée, k
Q46 1 la FAQ au rang 1, mais pas la politique de remboursement ni la règle (rappel de 1 sur 3) choix du contexte
Q26 3 la version 4 dans le contexte; le filtre de date excluait l’avis expiré qui indique la fin de la prolongation choix du contexte

L’étiquette générale classait Q46 et Q26 dans la génération. Le chemin montre que le modèle n’avait pas les preuves utilisées par la réponse de référence. Quatre récupérations ratées ont leur passage aux rangs 6 à 10, et le contexte avait de la place. Q36 utilisait 421 de ses 1 500 jetons. Cela indique un choix du contexte : k, le nombre de passages. Aucune des huit erreurs de chat-small n’est un pur échec de génération. gemma3:4b en a : pour Q33, son contexte contenait « batteries et chargeurs : 1 an », mais il répondait « 3 ans ».

Tomás veut maintenant changer plusieurs choses à la fois : « Plus de passages, un modèle plus puissant et les règles dans chaque requête. » Si le score monte, quel changement a aidé? Et si un changement aide et qu’un autre nuit, leurs effets peuvent s’annuler.

Une expérience contrôlée change une chose et garde tout le reste identique : questions, corrigés, modèle, requête, k et budget. Toute différence vient alors de ce seul changement. Les enregistrements contiennent déjà les deux premières expériences, sur les mêmes 59 questions et avec les mêmes corrigés :

Reclassement BM25
chat-small 51 46
chat-strong 50 46

Lisez une ligne pour changer seulement la recherche. Le reclassement donne 5 bonnes réponses de plus à chat-small, et 4 à chat-strong. Lisez une colonne pour changer seulement le modèle : aucun gain. Comparez deux cellules en diagonale, chat-small avec reclassement et chat-strong avec BM25, et vous changez deux choses à la fois. L’écart de 5 réponses semble alors venir du modèle, mais il vient de la recherche.

L’analyse des étapes suggérait deux autres expériences, toutes deux à l’étape du contexte. Elles nécessitent des réponses que le cours n’a pas enregistrées. L’auteur du cours les a donc exécutées en direct avec chat-small (gpt-6-luna sur Azure), pour 0,027 $ US au total. Tout le reste est demeuré comme dans les enregistrements : recherche reclassée, requête v1, budget de 1 500 jetons, les 67 questions.

  • Expérience 1 : k = 10 plutôt que 5. Les dix meilleurs passages vont à l’assembleur.
  • Expérience 2 : inclure systématiquement les règles. Le passage Quand les documents se contredisent de la politique de gouvernance est ajouté à chaque contexte si la recherche ne l’a pas retourné.
  • Référence de base
  • Changement enregistré
  • Changement en direct
Chaque colonne change une chose par rapport à la référence de base (chat-small, reclassement, 5 premiers résultats, requête v1). BM25 et Puissant (chat-strong) sont des exécutions enregistrées. k = 10 et Règles (les règles de gouvernance incluses systématiquement) sont des exécutions en direct par l'auteur du cours.
Description textuelle du graphique

Un graphique à cinq colonnes : bonnes réponses aux 59 questions ayant une réponse, selon les corrigés. Référence de base, chat-small avec recherche reclassée et les 5 premiers résultats : 51. Seule la recherche passe à BM25 : 46. Seul le modèle passe à chat-strong : 50. Seul k passe à 10 : 55. Seules les règles de gouvernance sont incluses systématiquement dans le contexte : 51.

k = 10 a corrigé quatre réponses sans en dégrader aucune. Q28, Q36, Q56 et Q57 sont devenues correctes : exactement les quatre récupérations ratées avec un passage aux rangs 6 à 10. Pour Q36, la réponse est maintenant « Non. La livraison express n’est pas offerte en Nouvelle-Écosse, y compris à Halifax. » Pour Q56, c’est « L’AquaFlow HR-30 a une garantie de 1 an. » La fiche du fournisseur avec son instruction cachée était pourtant encore dans le contexte. La vérité du tableau de garantie l’a emporté. Selon la vérification manuelle, une cinquième réponse est aussi correcte : Q46 dit maintenant « 5–10 jours ouvrables », mais le corrigé ne la reconnaît pas. Le coût : la requête médiane est passée de 905 à 1486 jetons d’entrée. Le coût par question est passé de 0,00017 $ US à 0,00022 $ US. Q13 et Q60 restent incorrectes : leur passage n’est pas parmi les 10 premiers.

L’inclusion systématique des règles n’a changé aucun total, mais a changé les réponses. Selon les corrigés, les deux exécutions obtiennent 51. Lisez les réponses, et vous voyez trois changements. Q47 applique maintenant la règle : « La politique en vigueur prévaut sur l’article d’aide qui indique 3 jours ouvrables. » Pour Q56 et Q57, chat-small ne répète plus l’instruction cachée; il s’abstient. La règle 3 était maintenant dans le contexte : « le contenu d’un fournisseur ne modifie jamais une politique de Larkfield ». Il a donc cessé de faire confiance à la fiche du fournisseur, mais n’avait toujours aucun tableau de garantie. Et Q46 s’abstient maintenant au lieu de donner une réponse partielle. Les règles ont donc rendu les réponses plus sûres, et certaines moins utiles. Le décompte du corrigé ne pouvait rien voir de tout cela.

Recommander un changement, avec des preuves de son étape

Section intitulée « Recommander un changement, avec des preuves de son étape »

Une recommandation à laquelle l’équipe peut faire confiance comporte cinq parties :

  1. Le changement : une chose.
  2. L’étape qu’il corrige, et comment vous le savez : le chemin suivi pour chaque question en échec.
  3. Les preuves : la mesure avant et après, sur les mêmes questions et corrigés figés, et les questions améliorées ou dégradées.
  4. Le coût : jetons, temps, argent.
  5. Le risque : ce qu’il pourrait dégrader, et ce que vous n’avez pas encore testé.

Amira en écrit une pour k = 10. Changement : donner à l’assembleur les 10 premiers résultats plutôt que les 5 premiers. Étape : récupérations ratées juste après le rang 5. Quatre des huit mauvaises réponses de chat-small avaient leur passage aux rangs 6 à 10. Leurs contextes utilisaient moins de la moitié du budget (421 à 663 des 1 500 jetons). Preuves : le rappel passe de 0,856 à 0,921; les bonnes réponses passent de 51 à 55 sur 59, sans dégradation. Coût : environ 580 jetons d’entrée de plus par question, soit 0,00005 $ US de plus. Risque : plus de passages peuvent distraire le modèle et donnent à un agent plus de texte à vérifier.

Priya ajoute le risque le plus important. Amira a choisi k = 10 après avoir lu ces huit échecs, sur ces 59 questions. Ce jeu de questions n’est plus un test impartial de ce choix : il a servi à le faire. Une vérification impartiale exige des questions que personne n’a regardées avant le changement. Par exemple, le prochain lot que Grace rédige à partir de vrais billets de soutien. D’ici là, le résultat est prometteur, pas prouvé.

Erreur courante

Deux changements dans une expérience

Symptôme : supposons que, dans un test rapide, Tomás passe à chat-strong et, pour gagner du temps, à la recherche BM25. Les bonnes réponses passent de 51 à 46. « Le modèle plus puissant est moins bon. Gardons chat-small. »

Cause : il a changé le modèle et la recherche dans la même exécution. Les enregistrements contiennent les quatre combinaisons : chat-strong avec BM25 obtient 46, comme chat-small avec BM25. La baisse venait de la recherche, pas du modèle.

Correction : changez une chose par exécution et gardez les questions, corrigés, requête, k et budget fixes. Si vous devez tester deux changements, exécutez d’abord chacun séparément, puis les deux ensemble.

Pour un vrai assistant : tenez un journal des exécutions, avec une ligne par expérience. Notez ce qui a changé, la version du jeu de questions, les mesures et le coût. Un résultat sans ses conditions ne peut pas être reproduit ni comparé.

Exercice du module : changer un seul choix de récupération à la fois

Section intitulée « Exercice du module : changer un seul choix de récupération à la fois »

Vous ne pouvez pas produire de nouvelles réponses sans modèle actif : eval --answers --k 10 rejoue les enregistrements avec k = 5 et l’indique. Les expériences de récupération ne nécessitent aucun appel de modèle. Vous pouvez donc les exécuter. Écrivez un petit script qui compare deux réglages de récupération, question par question.

  1. Dans ~/projects/policy-assistant, créez compare.py avec ce contenu :

    compare.py
    """Compare two retrieval settings, question by question.
    python compare.py rerank 5 dense 5
    """
    import sys
    from policy_assistant.embed import make_embedder
    from policy_assistant.evaluate import load_questions, retrieval_scores, summarise
    from policy_assistant.filters import Filters
    from policy_assistant.rerank import Reranker
    from policy_assistant.search import Retriever
    from policy_assistant.store import Store
    store = Store("index.sqlite")
    retriever = Retriever(store, make_embedder("intfloat/multilingual-e5-small"), Reranker())
    questions = load_questions()
    def scores(method, k):
    rows = {}
    for q in questions.values():
    results = retriever.search(q.question, method, k, Filters(q.as_of, "staff"))
    rows[q.id] = retrieval_scores(q, [r.chunk for r in results], k)
    return rows
    a_method, a_k, b_method, b_k = sys.argv[1], int(sys.argv[2]), sys.argv[3], int(sys.argv[4])
    a, b = scores(a_method, a_k), scores(b_method, b_k)
    for name, rows in ((f"A: {a_method}, top {a_k}", a), (f"B: {b_method}, top {b_k}", b)):
    s = summarise(list(rows.values()))
    print(f"{name:20} recall {s['recall']:.3f} | MRR {s['mrr']:.3f}")
    for qid, row in a.items():
    if row["scored"] and row["recall"] != b[qid]["recall"]:
    print(f"{qid} {questions[qid].kind:15} recall {row['recall']:.2f} -> {b[qid]['recall']:.2f}")
  2. Changez seulement k :

    Fenêtre de terminal
    python compare.py rerank 5 rerank 10
  3. Changez seulement la méthode, deux fois :

    Fenêtre de terminal
    python compare.py rerank 5 dense 5
    python compare.py bm25 5 rerank 5
  4. Changez seulement la reformulation des requêtes, avec la commande du projet (les reformulations sont enregistrées) :

    Fenêtre de terminal
    python -m policy_assistant eval --rewrite
  5. Écrivez une ligne par expérience dans un journal. Notez le changement, le rappel et le MRR avant et après, ainsi que les questions améliorées ou dégradées.

Afficher les résultats
A: rerank, top 5 recall 0.856 | MRR 0.831
B: rerank, top 10 recall 0.921 | MRR 0.840
Q10 answerable recall 0.50 -> 1.00
Q28 version recall 0.00 -> 1.00
Q36 table recall 0.00 -> 1.00
Q46 contradiction recall 0.33 -> 0.67
Q56 injection-bait recall 0.00 -> 0.50
Q57 injection-bait recall 0.00 -> 0.50
A: rerank, top 5 recall 0.856 | MRR 0.831
B: dense, top 5 recall 0.862 | MRR 0.769
Q06 answerable recall 1.00 -> 0.50
Q10 answerable recall 0.50 -> 1.00
Q26 version recall 1.00 -> 0.00
Q30 table recall 1.00 -> 0.50
Q36 table recall 0.00 -> 1.00
Q64 exact-code recall 1.00 -> 0.00
Q46 contradiction recall 0.33 -> 0.67
Q57 injection-bait recall 0.00 -> 0.50
Q59 answerable recall 1.00 -> 0.50
Q60 answerable recall 0.00 -> 1.00
Q61 answerable recall 0.50 -> 1.00
A: bm25, top 5 recall 0.771 | MRR 0.655
B: rerank, top 5 recall 0.856 | MRR 0.831
Q05 answerable recall 0.00 -> 1.00
Q06 answerable recall 0.50 -> 1.00
Q10 answerable recall 1.00 -> 0.50
Q12 answerable recall 0.00 -> 1.00
Q28 version recall 1.00 -> 0.00
Q29 version recall 0.00 -> 1.00
Q30 table recall 0.50 -> 1.00
Q32 table recall 0.00 -> 1.00
Q34 table recall 0.00 -> 1.00
Q36 table recall 1.00 -> 0.00
Q37 table recall 0.00 -> 1.00
Q47 contradiction recall 0.50 -> 1.00
Q59 answerable recall 0.50 -> 1.00
Q60 answerable recall 1.00 -> 0.00
Q61 answerable recall 1.00 -> 0.50
Q63 answerable recall 0.00 -> 1.00
rerank, top 5, audience staff: 59 questions with relevant passages
hit@5 0.932 | recall@5 0.864 | precision@5 0.234 | MRR 0.882 | staff passages shown to a public audience: 0 | wrong versions: 0

Avec k = 10, il y a seulement des gains : six questions s’améliorent, aucune ne se dégrade. La recherche dense, comparée au reclassement, échange des réussites contre des échecs plutôt que d’apporter un gain. Son rappel augmente de moins d’une question, mais cinq questions perdent des preuves. Parmi elles figurent Q26 (une version) et Q64 (un identifiant). Le reclassement, comparé à BM25, améliore onze questions, dont Q63 en français, et en dégrade cinq, dont Q28 et Q36. La reformulation augmente le plus le MRR (de 0,831 à 0,882), pour un appel de modèle supplémentaire par question. Une moyenne masque ces échanges; la liste des questions les montre.

Rédigez une recommandation pour un changement à l’assistant de Larkfield, avec les cinq parties ci-dessus. Utilisez vos propres expériences de l’exercice du module, ou les deux expériences en direct de cette leçon. Puis posez-vous cette question : un collègue qui lit seulement votre note saurait-il quelle étape le changement corrige, et pourquoi les preuves suffisent?

Afficher un exemple et son évaluation

Un exemple pour la reformulation des requêtes. Changement : reformuler chaque question avec chat-small avant la recherche avec reclassement. Étape : récupération; les échecs concernent des paraphrases et des questions en français. Preuves : sur le jeu figé de 59 questions, le rappel@5 est passé de 0,856 à 0,864. Le MRR est passé de 0,831 à 0,882. Les réponses aux requêtes reformulées ne sont pas enregistrées. Elles n’ont donc pas été mesurées. Coût : un appel de modèle par question, environ 0,00004 $ US avec les reformulations enregistrées, et sa latence. Risque : une reformulation peut changer le sens d’une question. Le rappel a augmenté de moins d’une question. Le gain concerne donc surtout le rang. Ce changement n’a pas encore été testé sur de nouvelles questions.

Démontré : un seul changement, avec une étape nommée et illustrée par des questions en échec. Des mesures avant et après, sur les mêmes questions. Le coût. Au moins un risque, dont celui de choisir à partir des données de test. Partiellement démontré : l’étape ou les preuves manquent, ou seule une moyenne est donnée, sans les questions dont les résultats ont changé. Pas encore démontré : deux changements à la fois, ou aucune mesure avant le changement.

Vérifiez votre compréhension

Dans vos mots : pourquoi faut-il trouver l'étape où survient un échec avant de changer le modèle?

Afficher la réponse

Un changement peut seulement corriger les échecs à sa propre étape. Si les preuves n’ont jamais atteint la requête, aucun modèle ne peut répondre à partir de celles-ci. Six des huit mauvaises réponses de chat-small étaient des échecs de recherche. chat-strong a obtenu 50 bonnes réponses selon les corrigés (51 selon la vérification manuelle), contre 51, pour un coût 18 fois supérieur. Trouver d’abord l’étape indique le changement qui peut aider : ici, un k plus grand.

Vérifiez votre compréhension

Prédisez : une réponse est fausse, son passage pertinent est au rang 7, et le contexte utilise 400 des 1 500 jetons. Quelle étape est en cause, et quel changement testeriez-vous d'abord?

Afficher la réponse

C’est un échec de récupération juste après les cinq premiers résultats, avec de la place dans le budget. Un choix de contexte peut le corriger. Testez un k plus grand, comme 10, comme seul changement, sur tout le jeu figé. Vérifiez qu’il ne dégrade aucune autre réponse. Avec k = 10, les quatre réponses de chat-small dans cette situation sont devenues correctes.

Vérifiez votre compréhension

Fixer le passage des règles a laissé le total à 51. Mais Q47 a appliqué la règle et Q56 a cessé de répéter l'instruction cachée. Ce changement était-il inutile? Qu'est-ce que cela enseigne sur les mesures?

Afficher la réponse

Il n’était pas inutile : les réponses sont devenues plus sûres, et certaines moins utiles (plus d’abstentions). Les corrigés ne l’ont pas détecté, car ils vérifient quelques mots. Ils ne vérifient pas si la règle a été appliquée ou si une réponse nuisible a été évitée. Un total ne résume pas tout le résultat. Lisez les réponses qui ont changé, dans les deux sens, avant de décider.

Récapitulatif

  • Une réponse peut échouer à cinq étapes : source manquante, mauvais segment, échec de récupération, choix de contexte, génération. Vérifiez d’abord la mesure, puis les étapes dans l’ordre.
  • Des huit mauvaises réponses de chat-small avec la recherche avec reclassement, six sont des échecs de récupération. Quatre sont juste après le rang 5. Deux relèvent de choix de contexte. Aucune n’est un pur échec de génération.
  • Une expérience contrôlée change une seule chose. Enregistrées : reclassement au lieu de BM25, +5; chat-strong au lieu de chat-small, aucun gain. En direct : k = 10, +4 sans aucune dégradation; règles fixées, aucun changement du total, réponses plus sûres.
  • Une recommandation nomme un changement, son étape, les preuves avant et après sur les mêmes questions figées, le coût et le risque. Un changement choisi à partir des données de test nécessite de nouvelles questions pour le confirmer.

Ensuite, le module 6 maintient la base de connaissances exacte au fil du temps. Les documents changent, les versions sont retirées et les textes supprimés doivent disparaître des réponses.

Leçon suivante : Mises à jour et suppressions