Traiter des milliers de documents : IA en lot
Classer des milliers d'avis clients avec Gemini sans exploser quotas ni budget : concurrence bornée, réessais exponentiels, reprise après incident, Batch API et Vertex AI batch prediction, suivi des coûts et contrôle qualité.
Appeler Gemini sur un document, c'est une ligne de code. Sur 10 000 documents, tout change : les quotas renvoient des erreurs 429, une coupure réseau à 80 % fait tout perdre si l'on n'a rien sauvegardé, les coûts deviennent visibles, et personne ne peut relire 10 000 réponses pour vérifier la qualité.
Fil rouge : une boutique en ligne veut classer ses avis clients (sentiment, catégorie, faut-il recontacter le client ?). Le lab génère 200 avis fictifs, les classe en parallèle maîtrisé, est interrompu en plein travail puis reprend sans refaire ce qui est fait, et produit un rapport CSV avec statistiques, coût et contrôle qualité. Le même classement est ensuite lancé en mode lot asynchrone, sur l'API Gemini et sur Vertex AI. Tout a été exécuté pour de vrai le 2026-10-15.
Pour qui ?
- Développeurs ou data analysts Python qui ont déjà appelé l'API Gemini.
- Aucune connaissance préalable d'
asyncion'est nécessaire : la leçon 1.1 l'explique. - Pour le module 3, partie Vertex AI : un projet Google Cloud (facultatif).
Ce que l'on construit
flowchart LR G["generer_avis.py : 200 avis fictifs"] --> A["avis.csv"] A --> C["classer.py : lots de 10, sémaphore, débit, réessais"] C -->|"une ligne par lot terminé"| J["resultats.jsonl (point de reprise)"] J -->|"relance après incident"| C A --> B["batch_api.py : Batch API Gemini ou Vertex AI"] B --> J2["resultats_batch.jsonl"] J --> R["rapport.py"] J2 --> R R --> O["rapport.csv, statistiques, coût, échantillon à relire"]
Objectifs
À la fin, vous saurez :
- lancer des centaines d'appels en parallèle borné avec
asyncioet un sémaphore, sous un plafond de débit ; - réessayer les erreurs temporaires avec une attente exponentielle et aléatoire ;
- rendre un traitement idempotent et reprenable grâce à un point de reprise (checkpoint) ;
- regrouper plusieurs documents par requête et valider chaque réponse ;
- utiliser la Batch API de Gemini (fichier JSONL) et la prédiction par lot de Vertex AI, et savoir quand les préférer ;
- mesurer le coût à partir des jetons et contrôler la qualité par échantillonnage.
Programme
| Module | Leçons | Durée indicative |
|---|---|---|
| 1. Passer à l'échelle | Concurrence maîtrisée avec asyncio ; limites de débit et réessais | 1h15 |
| 2. Robustesse | Idempotence et reprise ; lots et validation des réponses | 1h15 |
| 3. Le mode lot des fournisseurs | Batch API de Gemini ; Vertex AI batch prediction | 1h |
| 4. Mesurer et livrer | Coûts ; contrôle qualité ; projet final avec reprise sur incident | 1h30 |
En local ou sur Google Cloud ?
| En local (clé d'API) | Sur Google Cloud (Vertex AI) | |
|---|---|---|
| Traitement synchrone parallèle | classer.py avec GOOGLE_API_KEY | classer.py avec GOOGLE_GENAI_USE_VERTEXAI=TRUE |
| Mode lot asynchrone | batch_api.py gemini (fichier JSONL envoyé à l'API) | batch_api.py vertex (fichier JSONL dans Cloud Storage) |
| Identité | la clé | vos identifiants ADC, aucune clé |
| À nettoyer | le job de lot | le bucket et le job de lot |
Les fichiers du lab
| Fichier | Rôle |
|---|---|
| generer_avis.py | génère les 200 avis fictifs (reproductible, avec réponses attendues) |
| avis.csv | les avis générés |
| classer.py | le traitement parallèle, robuste et reprenable |
| batch_api.py | Batch API Gemini et Vertex AI batch prediction |
| rapport.py | rapport CSV, statistiques, coût, échantillon de contrôle |
| rapport.csv | le rapport produit le 2026-10-15 |
| test_lot.py | 9 tests sans clé : réessais, reprise, concurrence, rapport, format JSONL |
| .env.example, requirements.txt | configuration et dépendances |
Ressources
- example.env.example1 KB
- csvavis.csv27 KBVoir
- pybatch_api.py6 KBVoir
- pyclasser.py8 KBVoir
- pygenerer_avis.py4 KBVoir
- csvrapport.csv28 KBVoir
- pyrapport.py4 KBVoir
- txtrequirements.txt1 KBVoir
- pytest_lot.py5 KBVoir
Références
- API Gemini : Batch APIai.google.dev
- API Gemini : limites de débitai.google.dev
- API Gemini : tarifsai.google.dev
- Vertex AI : prédiction par lot avec Geminicloud.google.com
- API Gemini : sortie structurée (JSON Schema)ai.google.dev
- Python : primitives de synchronisation asyncio (Semaphore, Lock)docs.python.org
- Exponential Backoff And Jitter (AWS Architecture Blog)aws.amazon.com — L'article de référence sur la gigue dans les réessais