Lesson 8 — Projet final

Projet final : trier une boîte de 20 e-mails

6 min read

This content is not translated yet. Showing the original version.

Projet final : trier une boîte de 20 e-mails

Le cahier des charges

  1. Chaque e-mail reçoit un résumé, une catégorie (liste fermée), une priorité et un brouillon de réponse.
  2. Les cas sensibles sont marqués « à relire en priorité » par une règle en code.
  3. Rien n'est envoyé : un humain passe chaque ligne à « Validé » après relecture.
  4. On peut relancer sans repayer ni écraser ce qui est validé.
  5. Les tests passent sans clé.
flowchart LR
  subgraph "Machine"
    I["emails.csv"] --> T["traiter_lot.py"]
    T --> O["emails_traite.csv"]
  end
  subgraph "Humain"
    O --> F["Filtre : à relire en priorité"]
    F --> V["Relire, corriger, statut = Validé"]
    V --> E["Envoyer depuis la messagerie"]
  end
  V -. "écarts notés" .-> P["Améliorer la consigne"]
  P -.-> T

Étape 1 : lancer

Avec Google Sheets : importez emails.csv dans la feuille Emails (colonnes Objet, Texte), puis IA > Traiter les e-mails. Avec Python :

terminal
pytest -q                                   # 5 tests, sans clé
python traiter_lot.py emails.csv --limite 3 # vérifier la consigne
python traiter_lot.py emails_traite.csv     # reprendre et finir les 17 autres

Un exemple de sortie réelle est fourni : exemple_emails_traite.csv.

Étape 2 : organiser la relecture

OrdreFiltreCe que vous vérifiez
1statut = « à relire en priorité »ton du brouillon, aucune promesse, rappel rapide du client
2statut commence par « erreur »relancer ou traiter à la main
3statut = « à valider »catégorie juste, brouillon correct ; un coup d'œil suffit souvent
4catégorie = spamrien d'important classé par erreur

Par quelles lignes commencer la relecture ?

Étape 3 : mesurer la qualité

Avant d'adopter l'outil, comparez son tri au vôtre sur ces 20 e-mails. Le taux d'accord est simplement le nombre de lignes où vous êtes d'accord avec la catégorie, divisé par 20.

IndicateurComment le mesurerSeuil indicatif à fixer vous-même
Accord sur la catégorievos étiquettes contre la colonne categoriepar exemple 18/20
Prioritaires bien détectésaucun client mécontent en « à valider »100 %
Brouillons utilisablesbrouillons validés sans réécriture complèteà suivre dans le temps
Temps gagnéchronomètre : tri manuel contre tri IA + relecturepositif, sinon on arrête

Sur 20 lignes, vous êtes d'accord 17 fois avec la catégorie, et un client mécontent a été classé « à valider ». Que faites-vous ?

Exercice : calculer votre taux d'accord

Sans regarder la colonne categorie de exemple_emails_traite.csv, classez vous-même les 20 e-mails de emails.csv. Puis comparez et calculez le taux d'accord avec pandas.

Voir la solution
import pandas as pd

ia = pd.read_csv("exemple_emails_traite.csv")
moi = {1: "reclamation", 2: "facturation", 3: "information", 4: "rendez-vous", 5: "reclamation",
       6: "autre", 7: "commande", 8: "facturation", 9: "spam", 10: "information",
       11: "rendez-vous", 12: "commande", 13: "information", 14: "reclamation", 15: "fournisseur",
       16: "reclamation", 17: "information", 18: "commande", 19: "autre", 20: "reclamation"}
ia["moi"] = ia["id"].map(moi)
print((ia["moi"] == ia["categorie"]).sum(), "/ 20")
print(ia.loc[ia["moi"] != ia["categorie"], ["id", "objet", "categorie", "moi"]])

Avec ces étiquettes, on obtient 17 / 20. Les 3 écarts sont des cas défendables dans les deux sens : le salon professionnel (id 6), la relance fournisseur (id 15) et la demande de garantie (id 16). Aucun ne concerne un client mécontent : les 4 vraies réclamations sont toutes en « à relire en priorité ». Prochaine étape : préciser dans la consigne « une demande de garantie est une réclamation » et « un e-mail d'un fournisseur est fournisseur ».

Résultat obtenu

Sortie réelle du 2026-10-15 (gemini-3.5-flash-lite), deux lignes prioritaires de exemple_emails_traite.csv :

extrait
id 1  | reclamation | haute | à relire en priorité
résumé    : Le client signale que le pied de la table de sa commande 1042 est cassé et demande
            un remplacement rapide pour samedi.
brouillon : Bonjour, nous avons bien pris connaissance de votre message concernant votre commande
            n° 1042. Nous sommes désolés d'apprendre que le pied de la table est cassé et nous
            examinons votre dossier. Nous reviendrons vers vous dans les plus brefs délais pour
            vous indiquer la suite donnée.

id 20 | reclamation | haute | à relire en priorité
brouillon : Bonjour, nous avons bien pris connaissance de votre message concernant votre récente
            visite et votre canapé. Nous prenons vos remarques très au sérieux et transmettons votre
            dossier à notre responsable pour étude. Nous reviendrons vers vous dès que possible.

Les brouillons respectent la consigne : excuses, aucune promesse de remboursement ni de date. Bilan du lot : 20 lignes, 5 prioritaires, 0 erreur, accord de 17/20 avec un classement humain.

  • J'ai traité les 20 e-mails avec Google Sheets ou Python
  • J'ai relu les lignes prioritaires en premier et passé les statuts à « Validé »
  • J'ai calculé mon taux d'accord et noté les ambiguïtés de la consigne
  • Je sais décider si l'automatisation est prête, et quoi améliorer sinon