AGI Newsletter personnelle multi-thématique
Une veille automatisée pilotée par l'IA
- Capable de collecter automatiquement des actualités provenant de sources hétérogènes,
- De les analyser et les synthétiser grâce à différents modèles de langage
- Les distribuer au travers d'une newsletter structurée dans Telegram.
L'objectif est de construire un système de veille technologique extensible, capable de s'adapter à plusieurs thématiques. Cloud, Devops, IA, GitHub, Business, Europe etc.
Ceci me faisant gagner un temps considérable de recherche et m'assurant une routine de veille quotidienne.
Sans devoir réécrire le pipeline à chaque nouvelle thématique. Le système fonctionne aujourd'hui en local et compte plusieurs thématiques fonctionnelles et testées.
Mes choix concernant la version de l'agent IA
J'ai pondéré entre deux versions pour à la fois avoir une qualité optimale sans payer de surcoût inutile pour une version surdimensionnée par rapport à ce projet. Mon choix s'est orienté vers Claude Haiku 4.5.
| Critère | Claude Sonnet 5 | Claude Haiku 4.5 |
|---|---|---|
| Prix input | $2 / MTok | $1 / MTok |
| Prix output | $10 / MTok | $5 / MTok |
| Vitesse | Correcte | Nettement plus rapide |
| Qualité de synthèse/raisonnement | Meilleure lecture stratégique, nuances, ton éditorial plus fin | Bonne pour du factuel structuré, moins de nuance sur l'angle "avis perso" |
| Qualité de traduction EN→FR | Plus fiable sur du vocabulaire technique/nuancé | Correcte mais peut lisser certaines subtilités |
| Rapport qualité/prix pour mon usage | environ $0.016 à $0.03 par envoi | environ $0.008 à $0.015 par envoi |
Mes choix d'architecture
J'ai volontairement séparé le projet en plusieurs briques indépendantes :
Un pipeline centralisé
Pour orchestrer la collecte, l'analyse et la diffusion.
Une configuration par thématique
Afin d'ajouter une nouvelle veille principalement par configuration plutôt que par développement.
Une abstraction multi-LLM
Permettant de choisir Anthropic, OpenAI ou OpenRouter selon la thématique et le besoin.
Un système de stockage et de dédoublonnage
Pour éviter de republier plusieurs fois les mêmes informations.
Un système de monitoring
Permettant de vérifier automatiquement l'état des sources.
Un canal Telegram organisé par Topics
Utilisé comme interface de restitution.
Les points clés du projet
La conception d'une architecture extensible
Le but a été d'isoler les responsabilités principales :
Le scheduler déclenche les traitements, le pipeline orchestre les différentes étapes, les scrapers récupèrent les données, le LLM les analyse et les structure, puis Telegram assure la diffusion.
Cette séparation permet notamment de faire évoluer une brique sans remettre en cause l'ensemble du système.
Le pipeline de traitement
Le pipeline constitue le cœur du projet.
Pour chaque thématique, il réalise successivement :
- CollecteRécupération des nouvelles informations et filtrage des doublons.
- Analyse par le LLMConstruction du contexte envoyé au modèle et analyse des différents items.
- StructurationLe LLM retourne une structure JSON stricte avec notamment un score, du contexte, des faits et une opinion.
- Mise en formeLe pipeline transforme cette structure en digest lisible.
- DiffusionLe résultat est envoyé dans le Topic Telegram correspondant puis enregistré dans l'historique.
Mise en place de l'abstraction multi-LLM
Plutôt que de dépendre d'un seul fournisseur, j'ai créé une abstraction commune autour des modèles de langage.
Le système utilise un pattern Adapter avec une interface LLMProvider, implémentée pour Anthropic, OpenAI et OpenRouter.
Le choix du provider, du modèle et de la température se fait directement dans la configuration de chaque thématique.
Cela permet par exemple d'utiliser un modèle plus performant sur une veille prioritaire et un modèle moins coûteux ailleurs, sans modifier le pipeline.
Rendre les thématiques configurables
Une décision structurante du projet a été de déplacer au maximum la logique spécifique dans la configuration.
Chaque thématique possède notamment :
config.yaml→ sources, filtres, modèle, horaire, limitesprompt.md→ angle éditorial, ton et structure attendue
Le résultat : ajouter une nouvelle thématique ne nécessite aucune nouvelle ligne de code. Il suffit de créer sa configuration et son prompt, sauf lorsqu'un nouveau type de source doit être pris en charge par le scraper.
Le dédoublonnage et l'historique
Pour éviter qu'une même actualité soit envoyée plusieurs fois, j'ai intégré SQLite au pipeline.
Les éléments envoyés sont enregistrés avec un hash SHA256 basé sur le titre et l'URL, avec une fenêtre de dédoublonnage configurable, 7 jours par défaut.
La base sert également à conserver l'historique des exécutions.
La couche de diffusion Telegram
Telegram sert de couche de restitution.
Chaque thématique possède son propre Topic dans un supergroupe, ce qui permet de séparer les différents flux sans multiplier les bots.
J'ai également géré une contrainte technique importante : Telegram limite la taille des messages. Le système découpe donc automatiquement les messages dépassant 4096 caractères et les route vers le bon Topic.
Ajout d'un système de monitoring
Un système de health check a ensuite été ajouté pour éviter qu'une source défaillante passe inaperçue.
Chaque semaine, le système teste les sources de toutes les thématiques et génère un rapport indiquant les sources fonctionnelles ou en erreur.
Cela permet de distinguer un problème provenant du pipeline d'un problème provenant directement d'une source externe.