Briefing produit

VEILLE-01

Un agent IA de veille défense & export-contrôle, cadré et construit comme un livrable réel — pipeline fonctionnel de bout en bout, pas une maquette.

LangGraph · StateGraph Claude Haiku FastAPI · React V1 — testé de bout en bout

Synthèse

Réduire le temps de synthèse quotidienne sans céder sur la traçabilité

  • Le constat. Le point dur n'est pas de collecter — les outils existent — mais de classer un flux hétérogène de façon homogène, de recouper, et de pouvoir justifier a posteriori pourquoi une information a été retenue.
  • La réponse. Un pipeline en quatre nœuds où chaque affirmation est adossée à une citation vérifiée verbatim, et où seules les catégories les plus sensibles déclenchent une escalade agentique bornée.
  • L'état. V1 fonctionnelle de bout en bout, première tranche du vérificateur V2 livrée, garde-fous codés et testés dans les deux sens — pas seulement déclarés.
  • La recommandation. Achever la couverture du vérificateur avant le déploiement cloud : un score de confiance partiel est plus utile qu'un score fabriqué, mais moins qu'un score complet.

Ce qui suit détaille le cadrage, l'architecture et les preuves — dans cet ordre.

Le problème

Le suivi manuel du risque export ne se justifie pas a posteriori

  • Revue de presse quotidienne dispersée, alertes email non structurées
  • Aucune trace de pourquoi une information a été retenue ou écartée
  • Cible : fonctions conformité export, intelligence économique, affaires publiques

Non-objectif explicite : le système ne décide pas. Il accélère et structure la veille humaine — la décision reste humaine.

Cadrage

Trois enjeux critiques, pas un seul

  1. Classification cohérente d'un flux hétérogène de sources
  2. Recoupement multi-sources — distinguer signal confirmé et rumeur isolée
  3. Traçabilité systématique — chaque affirmation adossée à une source identifiée

1 et 3 couverts en V1 · 2 livré en première tranche V2, sur les deux catégories les plus sensibles — l'extension aux trois autres est le prochain jalon (cf. feuille de route)

Périmètre MECE

Cadré en MECE, puis corrigé au contact des données réelles

Inclus (V1)

Export control, contrats d'armement, mouvements militaires, diplomatie défense, programmes industriels — filtrage thématique, zone mondiale.

Exclu explicitement

Renseignement classifié, cybersécurité (périmètre voisin distinct), décision automatisée, analyse financière de marché.

Révision assumée : un filtrage géographique strict, testé sur données réelles, rejetait à tort la quasi-totalité de 2 sources sur 5 → retiré, remplacé par une extraction de lieu en métadonnée non filtrante. Documenté comme révision, pas masqué.

Architecture

Un pipeline agentique traçable, pas un script

Sources

16 flux RSS, sélection par pays, validés en direct

Collecte

collector.py

Dédoublonnage

avant l'appel LLM, pas après

Analyse

classification + résumé + citation vérifiée

Vérification

recoupement + score de confiance, boucle d'outil bornée

État partagé (VeilleState) entre les nœuds, chaque nœud tracé nativement — sans instrumentation manuelle. Les trois premiers nœuds sont un workflow déterministe ; seul le vérificateur laisse le modèle décider de ses propres appels d'outil, sous double plafond.

Ce qui survit aux runs — budget LLM, liens vus, historique analysé — passe par une couche de persistance unique, fichiers locaux en développement et Firestore en production. Le digest servi est une fenêtre glissante sur cet historique, pas la photographie du dernier run : le dédoublonnage vidant les collectes suivantes, servir le run brut effacerait l'affichage à chaque passage.

Restitution

Le digest rend visible ce qui engage la confiance

Digest VIGIE : bandeau d'indicateurs, filtres par catégorie et par état de vérification, et fiches d'événement portant le score de confiance et la citation vérifiée.

Score de confiance sur une rampe séquentielle et non en rouge/vert — un score lu comme un verdict invaliderait le non-objectif. Un item hors du périmètre du vérificateur sort sans score plutôt qu'avec un zéro. La provenance « média d'État » est affichée, pas noyée.

Couverture

La carte affiche aussi ce qu'elle ne peut pas placer

Carte de couverture géographique, construite sur le lieu vérifié de chaque événement, avec le décompte des items sans lieu extrait et des lieux non rattachables à un pays.

Construite sur le lieu vérifié de l'événement, pas sur le pays de la source. Les items sans lieu extractible et les lieux non rattachables à un pays (espaces maritimes, commandements) sont comptés explicitement : une carte qui ne montrerait que ses succès surestimerait la couverture réelle.

Garde-fou non négociable

Pas de résumé sans preuve

Chaque résumé généré par le LLM doit être accompagné d'une citation vérifiée verbatim contre le texte source. Sans preuve, l'item est rejeté automatiquement — pas seulement signalé.

« The Rafale export deal was signed today. » — extrait source, jamais traduit, jamais paraphrasé

Même principe appliqué au lieu extrait : vide plutôt que non vérifiable.

Valeur estimée

Ordre de grandeur illustratif

PosteHypothèseValeur
Équipe concernée4 analystes dédiés
Gain de temps90 → 30 min de revue / jour / analyste528 h/an
Valeur temps528 h × 60 €/h chargé~32 000 €/an
Coût du système (mesuré réel)~200 items/j × 1 appel + escalade plafonnée~140 €/an

Ratio favorable même en scénario dégradé (gain divisé par deux). Le bénéfice qualitatif — standardisation, traçabilité — reste déterminant au-delà du seul temps.

Risques

Traités par priorité, pas par exhaustivité

Haute priorité

Hallucination LLM

Citation verbatim obligatoire, rejet automatique si absente.

Haute priorité

Usage détourné

Positionnement explicite : aide à la veille, jamais outil de décision automatisée.

Moyenne

Biais de sources

Sélection par pays sur critère SIPRI, médias d'État marqués comme tels dans le digest.

Moyenne

Dérive de coût LLM

Plafond d'appels/jour + escalade agentique bornée — codés et testés, pas seulement documentés.

Preuve par l'usage · 1/2

Le chiffre flatteur a été questionné avant d'être retenu

  • Garde-fou déclaré, non câblé. Le plafond d'appels LLM/jour existait dans la config sans être vérifié nulle part dans le code. Trouvé par auto-audit, corrigé, testé dans les deux sens.
  • Précision auto-questionnée. 27/30 d'accord avec l'annotation manuelle, au-dessus de la cible — retenu seulement après avoir requestionné l'annotation elle-même, ce qui a révélé des définitions de catégorie ambiguës plutôt qu'un défaut du classifieur.
  • Deuxième mesure, plus sévère. Après la reprise des sources : 73/88 (83 %), sous la cible. Le protocole d'annotation comportait lui-même un biais — documenté dans le cadrage plutôt que le chiffre présenté comme acquis.
  • Troisième mesure, décomposée. 51/68 (75 %) sur un échantillon reconstruit. Le global était le moins informatif : le tri du bruit tient la cible (85 %), la qualification de ce qui parvient au digest échoue une fois sur trois (64 %). Deux problèmes distincts qu'un chiffre unique confondait.

Une mesure de précision teste autant la clarté des définitions que la qualité du modèle. Les deux s'auditent ensemble — la troisième mesure a fait ressortir la seule frontière de catégorie que le cadrage n'avait jamais spécifiée.

Preuve par l'usage · 2/2

Les défauts sont venus du test, pas de la relecture

  • Le volume réel a démenti l'estimation. La reprise des sources a fait apparaître des flux exposant des mois d'historique. Sans fenêtre de fraîcheur, le premier run aurait consommé le budget d'une journée entière sur l'arriéré avant de s'interrompre.
  • Symptôme à l'affichage, cause en amont. Deux pays seulement ressortaient sur la carte. Plutôt que d'ajouter des règles de rattrapage à la restitution : mesurer d'abord. 10 des 11 lieux manquants avaient leur pays nommé dans le titre — or la vérification verbatim ne portait que sur le corps de l'article, et effaçait des extractions correctes.
  • Corrigé sans affaiblir le garde-fou. Le titre est du texte publié par la source : l'extrait doit toujours y correspondre mot pour mot. Couverture passée de 6 à 13 lieux sur 16 items.
  • Un plantage a révélé la vraie perte. Une réponse de modèle hors énumération a interrompu un run. Au relancement : zéro item neuf — le dédoublonnage marquait les liens comme vus avant l'analyse, donc les items du run perdu étaient réputés traités sans exister nulle part, et exclus de toutes les collectes suivantes. Le marquage appartient désormais au nœud qui a réellement payé l'appel.

Remonter du symptôme à la cause plutôt que corriger là où le problème se voit — et documenter ce qui reste non vérifié plutôt que de l'omettre. Aucun de ces défauts n'était visible en relecture de code.

Feuille de route

V1 solide, prochain jalon identifié précisément

V1
Collecte + dédoublonnage + classification + résumé tracé + API + frontend — testé de bout en bout
V1
Sources par pays : top 10 exportateurs SIPRI + Iran/Corée du Nord, chaque flux validé en direct
V1
Déploiement Cloud Run + Cloud Scheduler — séquencé après un pipeline local qui tourne réellement
V2
Vérificateur, 1re tranche : recoupement sur l'historique et score de confiance, sur les catégories les plus sensibles
V2
Carte de couverture interactive, construite sur le lieu vérifié de chaque événement
V2
Étendre le vérificateur aux trois autres catégories et récupérer le texte intégral des articles
V3
Raisonnement longitudinal : fils d'événements, brief hebdomadaire, détection de signal faible — le signal d'une veille se situe largement entre les items, pas dans l'item isolé
V3
Mémoire interrogeable sur l'historique (requêtes en langage naturel)

Recommandation : achever la couverture du vérificateur avant le déploiement — le score n'est produit que sur deux des cinq catégories. Le prérequis technique du déploiement est levé (état porté par une couche de persistance, Firestore en production), mais ce backend-là n'a pas encore tourné contre une base réelle.

En synthèse

Un cadrage complet, appliqué à un système réel — pas juste des slides

MECE, alternatives évaluées, KPIs, risques, gouvernance — avec le même niveau d'exigence de vérification empirique du début à la fin, jusqu'à la mesure de précision finale.