Un moteur de recherche pour une page
La génération augmentée par la recherche est un outil qui a un coût, et c’est parfois le mauvais. Elle ajoute un découpage, des vecteurs et une recherche qui peut rater la réponse.
Un club cycliste a une page de règles. Un étudiant bâtit tout un système de recherche pour elle. La page aurait tenu dans la consigne, et la recherche est maintenant ce qui peut échouer.
À la fin de cette leçon
Remarque
Je peux dire quand la recherche est le mauvais outil.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Fenêtre de contexte | le plus de texte qu’un modèle lit d’un coup | |
| Jeton | un petit morceau de texte que le modèle compte | environ 3/4 de mot |
| Budget | le plus de jetons que vous choisissez de dépenser | |
| Données en direct | des faits qui changent toutes les quelques minutes | |
| Recherche | trouver les morceaux qui répondent à une question |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La recherche est un compromis, pas un réflexe
La recherche permet à un modèle d’utiliser plus de texte qu’une consigne n’en contient. C’est son avantage.
Elle coûte du travail et ajoute un risque. Il faut découper, bâtir des vecteurs et régler une recherche. Celle-ci peut rendre le mauvais morceau, ou aucun, et la réponse se bâtit alors sur le mauvais texte. Si vous pouvez vous en passer, passez-vous-en.
Un petit document tient dans la consigne
Un modèle ne lit qu’une quantité limitée de texte à la fois : sa fenêtre de contexte. Le texte se compte en jetons. Pour l’anglais, un jeton vaut environ les trois quarts d’un mot ; en français, un peu moins. C’est une règle empirique, pas un compte exact.
Choisissez un budget de jetons pour le contexte. Si le document entier est dessous, mettez tout. Il n’y a rien à chercher, donc rien à rater.
Exemple travaillé : six cas, quatre méthodes
| Cas | Méthode | Pourquoi |
|---|---|---|
| Une page de règles | Tout dans la consigne | Elle tient, donc rien à chercher |
| Un guide de 40 000 mots | Recherche | Trop gros : trouvez les quelques morceaux utiles |
| Le total des amendes de 17 livres en retard | Calcul dans le code | Un modèle peut se tromper en arithmétique |
| Le retard du prochain bus | Consultation en direct | Cela change chaque minute : un stockage est périmé |
| Un règlement de 3 pages rarement consulté | Tout dans la consigne | Il tient et le surcoût est faible |
| L’intranet d’une université, des milliers de pages | Recherche | Aucune consigne ne peut le contenir |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Mesurer un document face à un budget
Le script suivant contient les règles du club cycliste et compte les mots. Il passe des mots aux jetons avec la règle empirique et compare avec un budget de 3000.
Il fait de même pour un guide de 40 000 mots, avec le seul nombre, puis bâtit la consigne entière pour les règles. Il n’appelle aucun modèle.
Écrire le script du budget, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const regles = \"Les sorties partent à 9 h du vieux moulin. Chaque cycliste porte un casque. Un groupe compte au plus 12 cyclistes et un responsable. Le responsable règle l’allure et attend à chaque virage. Les lumières sont obligatoires si la sortie finit après le coucher du soleil. La cotisation est de 20 euros par an. Un invité peut venir à deux sorties avant de payer. Une sortie est annulée en cas de verglas ou de forte pluie, et le responsable prévient tout le monde avant 7 h. Personne n’est laissé derrière. Signalez toute chute au responsable le jour même.\";' '// Règle empirique : un jeton vaut environ les trois quarts d’un mot. C’est grossier.' 'function jetonsPour(mots) { return Math.round(mots * 4 / 3); }' 'const BUDGET = 3000;' > entier.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire le script du budget, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const documents = [' ' { nom: \"Règles du club\", mots: regles.split(\" \").length },' ' { nom: \"Guide de la médiathèque\", mots: 40000 },' '];' 'documents.forEach(function (un) {' ' const besoin = jetonsPour(un.mots);' ' const verdict = besoin <= BUDGET ? \"tient en entier\" : \"demande une recherche\";' ' console.log(un.nom + \" : \" + un.mots + \" mots, environ \" + besoin + \" jetons, \" + verdict);' '});' 'const consigne = \"Répondez uniquement à partir des règles du club.\n\n\" + regles + \"\n\nQuestion : Combien de cyclistes au plus dans un groupe ?\";' 'console.log(\"La consigne entière fait\", consigne.length, \"caractères. Aucune recherche n’est nécessaire.\");' >> entier.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer le script et lire les verdicts
docker exec -w /home/node/project agent node entier.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce qu’il affiche
| Ligne | Ce qu’elle montre |
|---|---|
| Règles du club : 98 mots, environ 131 jetons, tient en entier | Très au-dessous du budget |
| Guide de la médiathèque : 40000 mots, environ 53333 jetons, demande une recherche | Très au-dessus |
| La consigne entière fait 659 caractères | Assez petite pour être envoyée telle quelle |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une erreur fréquente
Attention
Beaucoup de gens croient que la recherche vaut toujours mieux que de mettre le document dans la consigne. Si le document tient, la recherche ajoute une étape qui peut rater la réponse. Employez-la quand il le faut, pas parce qu’elle paraît moderne.