Défi 004 : Optimiser un budget de tokens¶
Scénario¶
OutdoorGear dispose d'un assistant de support qui envoie trop de contexte au modèle. Il inclut de longs textes juridiques et du contenu marketing même lorsqu'un résumé court de politique suffirait. L'équipe veut des prompts plus courts sans perdre en qualité de réponse.
Votre tâche consiste à corriger un optimiseur local de budget de prompt qui sélectionne un contexte compact et pertinent tout en gardant chaque prompt sous une limite stricte de tokens.
Objectif¶
Corrigez starter_token_budget.py afin que l'optimiseur sélectionne le bon document de contexte pour chaque requête, évite le contexte non pertinent, construise des prompts compacts, rapporte la conformité au budget et génère un code de validation.
Votre optimiseur final doit :
- Estimer les tokens de prompt de manière déterministe
- Normaliser les mots-clés pour la correspondance lexicale
- Préférer les résumés concis et pertinents aux documents longs et bruités
- Sélectionner le contexte dans un budget de tokens de contexte
- Construire des prompts sous le budget total de chaque requête
- Rapporter les documents sélectionnés et la conformité au budget
Fichiers de départ¶
Enregistrez ces fichiers dans un dossier nommé challenge-004/ :
| Fichier | Objectif | Télécharger |
|---|---|---|
context_docs.json |
Contexte de support compact et verbeux | Télécharger |
requests.json |
Requêtes de support avec budget | Télécharger |
starter_token_budget.py |
Optimiseur de budget cassé | Télécharger |
test_token_budget.py |
Tests d'acceptation | Télécharger |
validate_token_budget.py |
Génère le code final de réussite | Télécharger |
Brief du défi¶
Vous recevez des documents compacts, des documents verbeux, des requêtes budgétées et un optimiseur cassé. Il n'y a pas de walkthrough : décidez comment estimer les tokens, classer le contexte, sélectionner les preuves et construire des prompts qui respectent le budget.
Contraintes¶
- Utilisez uniquement la bibliothèque standard Python dans
starter_token_budget.py. - N'appelez pas d'API LLM.
- Ne hardcodez pas le comportement par ID de requête.
- N'incluez pas de documents non pertinents simplement parce qu'il reste de la place.
- Gardez la structure du prompt courte et ancrée.
Critères d'acceptation¶
Votre solution est complète lorsque :
python -m pytest test_token_budget.pypasse- Le document concis attendu est sélectionné pour chaque requête
- Les documents verbeux ou non pertinents ne passent pas devant les correspondances concises
- Chaque prompt respecte son
max_prompt_tokens - L'évaluation rapporte
within_budget is True - L'évaluation rapporte
all_prompts_under_budget is True
Validation¶
Lorsque votre implémentation est prête, exécutez :
Saisissez le code de réussite imprimé par validate_token_budget.py :
Indices¶
Indice 1 — L'estimation de tokens n'a pas besoin d'être parfaite
Elle doit seulement être déterministe et assez proche pour comparer les tailles de prompts.
Indice 2 — La pertinence ne suffit pas
Un document long avec les bons mots peut être moins utile qu'un résumé concis avec la même preuve.
Indice 3 — Budgétez au moment de la sélection
Il est plus facile de respecter le budget si vous rejetez le contexte avant de construire le prompt final.
Indice 4 — Le template de prompt compte
Un template d'instructions verbeux peut consommer le budget que vous essayez d'économiser.
Rubrique¶
| Domaine | Points | Ce qui est attendu |
|---|---|---|
| Estimation des tokens | 20 | Déterministe, proche de mots, utile pour les budgets |
| Classement du contexte | 30 | Sélectionne les documents concis et pertinents |
| Construction du prompt | 25 | Reste ancrée et sous budget |
| Évaluation | 15 | Rapporte correctement les documents sélectionnés et la conformité |
| Simplicité | 10 | Logique locale déterministe, sans sur-ingénierie |
Objectifs bonus¶
- Ajouter des budgets séparés pour prompt système, contexte et réponse
- Rapporter les économies de tokens par rapport au baseline verbeux
- Ajouter un fallback lorsqu'aucun document ne tient dans le budget
- Ajouter une nouvelle requête avec budget plus serré et mettre à jour localement le payload du validateur