Monter une veille automatisée
Une chaîne qui collecte des flux, dédoublonne, trie sur un critère écrit et résume, avec les prompts à copier.
Une veille manuelle meurt toujours de la même façon : trois semaines d'enthousiasme, puis un onglet ouvert qu'on ne lit plus. Le problème n'est pas la lecture, c'est le tri. Sur cent articles publiés dans ton domaine chaque semaine, cinq te concernent vraiment.
Un agent de veille fait bien ce tri, à deux conditions. Il faut lui donner un critère de pertinence écrit, précis, qui ressemble à une consigne de stage et non à un thème. Et il faut résoudre le problème des doublons avant de lui parler, parce qu'aucun modèle ne le fera correctement à ta place.
Ce guide monte une chaîne en quatre morceaux : collecter, dédoublonner, trier, résumer. Les trois premiers sont du code déterministe. Seul le dernier est du travail de modèle.
Ce que l'agent ne doit pas faire
Il ne décide pas de ce qui est important, il applique ton critère. Il ne résume pas ce qu'il n'a pas lu : un titre de flux RSS n'est pas un article. Et il ne juge pas la fiabilité d'une source, c'est toi qui choisis les sources.
Le format de sortie décide de l'usage
Une veille lue est une veille courte. Vise dix lignes par semaine : trois éléments, une phrase de contexte chacun, un lien. Un rapport de deux pages finira comme les onglets.
Avant de commencer
- Python 3.10 ou plus récent, et
pip install feedparser - Cinq à quinze sources qui publient un flux RSS ou Atom
- Un critère de pertinence écrit en trois lignes
1Choisir des sources, pas des mots-clés
Commence par les flux RSS et Atom : ils sont structurés, datés, stables, et leur lecture ne pose aucun problème d'étiquette. Beaucoup de blogs, de médias spécialisés, de dépôts GitHub (fil des releases) et de portails institutionnels en publient encore, même sans l'afficher.
Quinze sources bien choisies battent une recherche large. Une recherche large ramène du bruit corrélé : dix reprises du même communiqué de presse.
2Collecter et dédoublonner
Le dédoublonnage se fait sur deux niveaux : le même article vu deux fois, et le même sujet couvert par deux sources.
Le premier niveau est mécanique. Chaque entrée d'un flux porte un identifiant
(id, le guid en RSS) ; à défaut, le lien fait l'affaire, à condition de le
normaliser en retirant les paramètres de suivi.
import json
import feedparser
from pathlib import Path
from urllib.parse import urlsplit, urlunsplit, parse_qsl, urlencode
VUS = Path("vus.json")
deja = set(json.loads(VUS.read_text())) if VUS.exists() else set()
def cle(entree):
url = entree.get("id") or entree.link
p = urlsplit(url)
params = [(k, v) for k, v in parse_qsl(p.query) if not k.startswith("utm_")]
return urlunsplit((p.scheme, p.netloc, p.path, urlencode(params), ""))
nouveaux = []
for source in SOURCES:
flux = feedparser.parse(source)
for e in flux.entries:
k = cle(e)
if k in deja:
continue
deja.add(k)
nouveaux.append({
"titre": e.title,
"lien": e.link,
"date": e.get("published", ""),
"extrait": e.get("summary", "")[:600],
"source": flux.feed.get("title", source),
})
VUS.write_text(json.dumps(sorted(deja)))
Le second niveau, deux sources qui racontent la même chose, relève du modèle : c'est une question de sens, pas d'URL. On le traite à l'étape de tri.
L'état doit survivre à l'exécution
Sans fichier vus.json persistant, chaque exécution te resservira les mêmes
articles. C'est la panne numéro un de ce type de script, et elle passe
inaperçue tant que tu testes à la main.
3Le prompt de tri
Un seul appel, sur la liste entière. Le modèle voit tous les éléments d'un coup, c'est ce qui lui permet de repérer les doublons de sujet.
Tu tries une veille. Voici [N] elements bruts, au format titre, source,
date, extrait.
Est pertinent uniquement ce qui concerne :
- [SUJET 1, formule en une ligne concrete]
- [SUJET 2]
- [SUJET 3]
N'est pas pertinent : [CE QUI REVIENT SOUVENT ET QU'ON NE VEUT PAS].
Consignes :
1. Ecarte tout element hors de ces trois sujets. Dans le doute, ecarte.
2. Si plusieurs elements traitent le meme fait, garde le plus complet et
cite les autres comme reprises.
3. Garde au maximum 5 elements. S'il y en a moins de 5 de pertinents,
rends-en moins. Ne complete pas pour atteindre 5.
4. Rends un tableau : titre, source, pourquoi c'est pertinent (une ligne),
lien.
5. Si rien n'est pertinent cette semaine, ecris "Rien a signaler" et
arrete-toi.
[LISTE]
Le point 5 n'est pas décoratif. Sans autorisation explicite de ne rien rendre, un modèle remplira toujours les cinq lignes, et ta veille perdra sa valeur en trois semaines.
4Le prompt de résumé
Le tri travaille sur des extraits, le résumé doit travailler sur les articles. Deuxième appel, seulement sur les éléments retenus.
Voici [N] articles retenus. Pour chacun, ecris :
- une phrase sur ce qui est nouveau ;
- une phrase sur ce que ca change pour [TON CONTEXTE : equipe, produit,
metier] ;
- le lien.
Contraintes : pas d'introduction, pas de conclusion, pas d'adjectif
d'enthousiasme. Si un article ne dit rien de nouveau par rapport a ce que
tout le monde sait deja, ecris-le et passe au suivant.
5Le faire tourner tout seul
En ligne de commande, le mode non interactif suffit :
python collecte.py > nouveaux.json
cat nouveaux.json | claude -p "$(cat prompt-tri.txt)" > veille.md
Pour un déclenchement hebdomadaire, GitHub Actions accepte une planification cron, avec deux limites à connaître : l'intervalle minimum est de cinq minutes, et les horaires sont en UTC. Les exécutions planifiées peuvent aussi être retardées en période de charge, ce qui n'a aucune importance pour une veille.
on:
schedule:
- cron: "0 7 * * 1"
Quelques prompts pour aller plus loin
| Objectif | Prompt à adapter |
|---|---|
| Trouver les flux | Voici 20 sites que je consulte. Pour chacun, trouve l'URL de son flux RSS ou Atom. Si le site n'en publie pas, dis-le au lieu de deviner une URL. |
| Écrire le critère | Voici 15 articles que j'ai trouves utiles et 15 que j'ai ignores. Deduis-en un critere de pertinence en trois lignes, formule pour un agent de tri. |
| Calibrer le tri | Voici ma consigne de tri et 40 elements dont je te donne mon verdict. Signale les cas ou ta consigne aurait donne un verdict different du mien. |
| Détecter les reprises | Parmi ces elements, regroupe ceux qui traitent du meme fait. Pour chaque groupe, indique la source la plus complete et pourquoi. |
| Bilan mensuel | Voici les 4 veilles hebdomadaires du mois. Degage les 3 tendances de fond, en ignorant les faits isoles. |
Tu as d’autres ressources comme ça ?
Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.
Me contacter
Une question, un projet, une envie de collaborer ? Écris-moi.
Cette page est en accès libre, n’hésite pas à la partager.