Comment construire un système d'agents IA auto-apprenants — Notre architecture réelle
La plupart des agents IA sont statiques. Ils exécutent les mêmes prompts, font les mêmes erreurs et ne s'améliorent jamais. Voici comment nous avons construit un système qui s'améliore du jour au lendemain — avec de vrais exemples de code tirés de notre système de production.
Le problème des agents IA statiques
Vous construisez un agent. Il fonctionne. Vous le déployez. Trois semaines plus tard, il fait les mêmes erreurs que le premier jour.
C'est le résultat par défaut de la plupart des déploiements d'agents IA. Les prompts sont figés. Les stratégies sont codées en dur. L'agent n'a aucune mémoire de ce qui a fonctionné et de ce qui n'a pas fonctionné.
Nous avons nous-mêmes touché ce mur. Notre agent de pipeline de contenu publiait des posts sur les réseaux sociaux sans engagement, générait des images qui ne correspondaient pas aux sujets des articles, et répétait les mêmes erreurs d'une session à l'autre. Chaque matin, nous corrigions quelque chose manuellement, et le lendemain l'agent avait oublié la correction.
Alors nous avons construit quelque chose de différent : une architecture d'agent auto-apprenant où chaque correction humaine, chaque métrique d'engagement et chaque échec est capturé et réinjecté automatiquement dans le système. L'agent qui tourne aujourd'hui est mesurablment meilleur que celui de la semaine dernière — sans que personne ne touche au code.
Voici exactement comment cela fonctionne.
Vue d'ensemble de l'architecture : Les quatre couches
Notre système d'agent auto-apprenant repose sur quatre couches interconnectées :
┌─────────────────────────────────────────────────┐
│ COUCHE D'EXÉCUTION │
│ Jobs Cron → Sessions d'Agent → Appels d'outils │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────▼──────────────────────────────┐
│ COUCHE MÉMOIRE │
│ Notes quotidiennes → Règles apprises → Long terme │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────▼──────────────────────────────┐
│ COUCHE FEEDBACK │
│ Métriques d'engagement → Corrections → Logs │
└──────────────────┬──────────────────────────────┘
│
┌──────────────────▼──────────────────────────────┐
│ COUCHE STRATÉGIE │
│ Règles de contenu → Logique de rotation → Playbooks │
└─────────────────────────────────────────────────┘
Chaque couche alimente les autres. L'exécution génère des données. Les données alimentent la mémoire. La mémoire façonne la stratégie. La stratégie guide le prochain cycle d'exécution.
Couche 1 : Une mémoire qui persiste vraiment
Les agents IA démarrent chaque session à zéro. Ils n'ont aucune continuité à moins que vous ne la construisiez. Notre système de mémoire utilise un pattern simple mais puissant : des fichiers sur le disque.
Notes quotidiennes
Chaque jour, l'agent crée un fichier markdown daté :
memory/
├── 2026-02-13.md
├── 2026-02-14.md
├── 2026-02-15.md
└── ...
Ceux-ci contiennent des données brutes — ce qui s'est passé, ce qui a été publié, ce qui a échoué, ce que l'humain a corrigé. L'agent lit le fichier du jour plus celui de la veille au début de chaque session.
Fichier des règles apprises
C'est l'innovation clé. Nous maintenons un fichier content-rules-learned.md qui capture chaque leçon issue du feedback humain :
# Règles de contenu — Apprises du feedback
## Ton & Voix
- [2026-02-10] Les scripts doivent paraître "bruts" et naturels — pas corporate poli.
## Structure & Format
- [2026-02-03] TOUTES les versions linguistiques doivent avoir le MÊME nombre de sections.
- [2026-02-04] Rédiger des brouillons complets pour les 4 langues avant de créer des posts.
## Images & Visuel
- [2026-02-09] Les images hero DOIVENT être spécifiques au sujet de l'article. Pas de formes abstraites génériques.
- [2026-02-06] TOUS les posts sociaux DOIVENT inclure une image hero.
## Réseaux sociaux
- [2026-02-05] X/Twitter : Limite STRICTE de 280 caractères — le serveur rejette si dépassé.
- [2026-02-13] Répondre UNIQUEMENT aux tweets de < 1 heure.
Chaque fois que l'humain corrige l'agent, la correction est ajoutée à ce fichier avec un horodatage. L'agent lit ce fichier avant chaque exécution du pipeline de contenu. Les règles s'accumulent au fil du temps. Le système ne peut littéralement pas faire la même erreur deux fois.
Mémoire à long terme
Un fichier MEMORY.md curé sert de mémoire à long terme de l'agent — des insights distillés, des décisions et du contexte qui comptent sur des semaines et des mois. L'agent examine périodiquement les notes quotidiennes et promeut les apprentissages importants vers la mémoire à long terme.
# Mémoire à long terme
## Décisions clés
- LinkedIn est le canal d'engagement principal — meilleur ROI par commentaire
- Les images hero template surpassent celles générées par IA pour le contenu technique
- Le post de blog allemand est le "hub" pour les traductions (système legacy)
## Leçons
- Ne jamais faire confiance au "succès" MCP sans requête de vérification
- L'[automatisation](https://www.contextstudios.ai/fr/blog/le-guide-complet-[openclaw](/blog/the-complete-openclaw-guide-how-we-run-an-ai-agent-in-production-2026)-comment-nous-utilisons-un-agent-ia-en-production-2026 "Le guide complet OpenClaw : Comment nous utilisons un agent IA en production (2026)") navigateur casse après ~5 écritures consécutives
Couche 2 : Le moteur de boucles de feedback
L'aspect auto-apprenant provient de trois boucles de feedback qui fonctionnent en continu :
Boucle 1 : Métriques d'engagement → Mises à jour stratégiques
Chaque tour d'engagement suit un cycle strict : Mesurer → Apprendre → Ajuster → Exécuter → Journaliser.
# Pseudocode pour la boucle de feedback d'engagement
def tour_engagement():
# Étape 1 : Mesurer le tour précédent
resultats_precedents = read_file("engagement-metrics.md")
patterns = analyser_patterns(resultats_precedents)
# Étape 2 : Mettre à jour les patterns appris
if patterns.confiance > 0.7:
update_file("engagement-system.md", patterns)
# Étape 3 : Ajuster la stratégie de ce tour
cibles = selectionner_cibles(
exclure=recemment_engages(),
preferer=categories_performantes(),
fraicheur="< 1 heure"
)
# Étape 4 : Exécuter
for cible in cibles:
engager(cible)
journaliser("engagement-metrics.md", cible, horodatage)
# Étape 5 : Résumé quotidien
if est_dernier_tour_du_jour():
generer_resume_quotidien()
L'agent suit quels types de commentaires génèrent de l'engagement, quels comptes cibles répondent bien, quels créneaux horaires performent le mieux, et quels sujets résonnent. Après 3+ points de données confirmant un pattern, il met à jour ses propres fichiers de stratégie.
Boucle 2 : Corrections humaines → Mises à jour des règles
Quand l'humain dit « ne fais pas X » ou « fais toujours Y », l'agent ne se contente pas d'obéir — il note la règle :
Humain : "Pas de hashtags sur LinkedIn — c'est mort depuis 2024"
Action de l'agent :
1. Arrête immédiatement d'utiliser les hashtags
2. Ajoute à content-rules-learned.md :
- [2026-02-01] PAS de hashtags sur LinkedIn — mort depuis 2024.
3. Chaque futur pipeline lit cette règle
C'est radicalement simple mais incroyablement efficace. La plupart des systèmes d'agents s'appuient sur l'ingénierie de prompts pour encoder les règles. Nous les encodons comme des documents vivants qui grandissent avec le temps.
Boucle 3 : Détection d'échecs → Récupération automatique
Chaque étape du pipeline écrit ses résultats sur le disque avant de continuer. Si une étape échoue, la prochaine exécution peut détecter l'achèvement partiel et reprendre :
# Vérifier si le contenu a déjà été posté avant de réessayer
grep -i "mot-cle-sujet" memory/posting-log.md | tail -5
grep "$(date +%Y-%m-%d)" memory/engagement-log.md | tail -10
L'agent maintient un engagement-state.json qui suit les compteurs d'actions quotidiens, les échecs et les cooldowns :
{
"2026-02-15": {
"reponses_entreprise": 5,
"reponses_personnel": 3,
"commentaires_linkedin": 4,
"echecs": [
{
"job": "engagement",
"etape": "commentaire-linkedin",
"erreur": "timeout",
"heure": "10:15"
}
]
}
}
Couche 3 : Le système d'orchestration Cron
L'auto-apprentissage ne fonctionne que si l'agent tourne effectivement régulièrement. Nous utilisons un système cron qui déclenche des sessions d'agent isolées à des heures précises :
06:00 Propositions de sujets de blog + collecte de renseignements
08:30 Briefing matinal + vérification de santé
10:00 Tour d'engagement EU (LinkedIn + X)
12:00 Création de contenu visuel (infographies, carrousels)
13:00 Pipeline d'outreach LinkedIn
13:30 Scan d'actualités de midi
16:00 Engagement pic matinal US
20:00 Engagement pic après-midi US + résumé quotidien
23:00 Scanner système nocturne
Chaque job cron s'exécute dans une session isolée — pas dans le fil de conversation principal. Cela empêche les échecs d'un job de corrompre le contexte principal de l'agent.
Le pattern Heartbeat
Entre les jobs cron, l'agent reçoit des sondages heartbeat périodiques. Au lieu de simplement répondre « tout va bien », il utilise les heartbeats de manière productive :
- Vérification des e-mails urgents
- Vérification de la santé des jobs cron (jobs en retard > 26 heures ?)
- Vérification du calendrier pour les événements à venir
- Maintenance de la mémoire en arrière-plan
Un fichier HEARTBEAT.md sert de checklist légère que l'agent lit à chaque sondage. L'agent peut éditer ce fichier lui-même pour ajouter des rappels ou des vérifications.
Couche 4 : Le système de Playbooks
Les prompts statiques échouent. Les playbooks évoluent.
Au lieu de tout mettre dans un prompt système, nous maintenons des fichiers playbook structurés que l'agent lit au début des tâches pertinentes :
skills/
├── SKILL.md # Playbook de création de contenu (3000+ lignes)
memory/
├── cron-playbook.md # Règles partagées pour tous les jobs cron
├── engagement-system.md # Règles d'engagement auto-apprenantes
├── content-strategy.md # Calendrier et stratégie de contenu
├── anti-automation.md # Règles de limitation et de sécurité
Pourquoi les Playbooks battent les Prompts
| Aspect | Prompts système | Fichiers Playbook |
|---|---|---|
| Limite de taille | ~8K tokens en pratique | Illimité |
| Versionné | Non (embarqué dans la config) | Oui (suivi git) |
| Modifiable à l'exécution | Non | Oui — l'agent peut les mettre à jour |
| Partagé entre sessions | Seulement si copié | Oui — les fichiers persistent |
| Auto-mise à jour | Jamais | L'agent écrit les règles apprises |
L'approche playbook signifie que l'« intelligence » de notre agent vit dans des fichiers, pas dans des configurations figées. Quand l'agent apprend quelque chose, il met à jour le playbook pertinent. Quand nous déployons une nouvelle stratégie, nous éditons un fichier — aucun changement de code nécessaire.
Implémentation pratique : Le pipeline de contenu
Suivons une vraie exécution de pipeline pour voir les quatre couches en action :
Étape 1 : Collecte de renseignements (06:00)
Un job cron se déclenche et crée daily-intel.md :
# Intel quotidien — 2026-02-15
## Breaking / Hot (dernières 24-72h)
- [Anthropic](https://www.contextstudios.ai/fr/blog/claude-opus-46-le-nouveau-modle-phare-danthropic-avec-1m-de-contexte-et-agent-teams "[Claude Opus 4.6](/blog/claude-opus-46-anthropics-new-flagship-with-1m-context-and-agent-teams) — Le nouveau modèle phare d'Anthropic avec 1M de contexte et [Agent Teams](/blog/claude-code-agent-teams-a-builders-guide-to-parallel-ai-coding)") conclut une Series G de 30B$ à une valorisation de 380B$ 🔥🔥🔥🔥🔥
- Des chercheurs en sécurité IA quittent OpenAI + Anthropic 🔥🔥🔥🔥
## Déjà couvert par le blog CS
- Agent IA de codage Spotify — publié récemment
- Retrait d'OpenAI GPT-4o — publié
La section « Déjà couvert » empêche le contenu dupliqué — l'agent vérifie son propre historique de publication.
Étape 2 : Sélection du sujet
L'agent lit daily-intel.md, croise avec blog-ideas.json et content-calendar.md, vérifie posting-log.md pour les sujets récents, et sélectionne le meilleur sujet.
Étape 3 : Recherche + Rédaction
Avant d'écrire, l'agent :
- Cherche dans la base de connaissances du contenu existant sur ce sujet
- Exécute
generate_keywordspour l'optimisation SEO - Lit
content-rules-learned.mdpour toutes les règles d'écriture accumulées - Rédige l'article en respectant chaque règle apprise
Étape 4 : Publication multilingue
L'agent crée des versions en 4 langues (EN, DE, FR, IT), vérifie la parité des sections avec wc -l, génère une image hero, crée tous les articles de blog, synchronise les traductions, et vérifie que chaque URL renvoie HTTP 200 avant de passer aux réseaux sociaux.
Étape 5 : Distribution sociale
Chaque plateforme reçoit un post adapté — 280 caractères pour X, 1500-2500 caractères pour LinkedIn, image obligatoire pour Instagram. L'agent lit les règles spécifiques à chaque plateforme depuis le playbook et journalise chaque post dans posting-log.md.
Étape 6 : Collecte de feedback
Au cours des 24 heures suivantes, les métriques d'engagement sont collectées. L'agent mesure quels posts sociaux ont bien performé, met à jour ses fichiers de stratégie, et applique les apprentissages au prochain cycle.
Le pattern d'anti-fragilité
La propriété la plus intéressante de cette architecture est qu'elle devient meilleure sous le stress. Quand quelque chose échoue :
- L'échec est journalisé
- Une correction humaine (le cas échéant) est capturée comme règle
- La logique de retry vérifie l'achèvement partiel
- La prochaine exécution intègre le pattern appris
Après 3 semaines d'opération, notre pipeline de contenu avait accumulé plus de 30 règles apprises, identifié les horaires de publication optimaux, découvert quels styles d'engagement fonctionnent pour quelles plateformes, et automatisé la récupération des modes d'échec les plus courants.
L'agent ne se contentait pas de tourner — il évoluait.
Décisions de conception clés
Fichiers plutôt que bases de données
Nous avons choisi des fichiers markdown plutôt que des bases de données pour la mémoire de l'agent. Pourquoi ?
- Lisibles par les humains ET les agents — pas de langage de requête nécessaire
- Traçables par git — chaque changement est versionné
- Éditables par l'agent — ajouter une ligne, pas d'appels API
- Portables — fonctionnent avec n'importe quel fournisseur LLM
- Débuggables — ouvrir un fichier, voir ce que l'agent sait
Sessions isolées plutôt que contexte partagé
Chaque job cron s'exécute dans sa propre session. Un échec dans le tour d'engagement ne corrompt pas le pipeline de contenu. Cela ajoute un peu d'overhead (chaque session lit les fichiers pertinents depuis le début) mais empêche les échecs en cascade.
Playbooks plutôt que fine-tuning
Nous n'avons jamais fine-tuné un modèle. Au lieu de cela, l'agent lit des fichiers de stratégie à l'exécution. Cela signifie :
- Les changements prennent effet immédiatement (éditer un fichier, la prochaine exécution l'utilise)
- Pas de collecte de données d'entraînement ni de ré-entraînement de modèle
- Le même modèle de base (Claude Opus 4.6) alimente tout
- Les changements de stratégie sont réversibles (reverter le fichier)
Rotation et dédoublonnage comme concepts de première classe
L'agent suit tout ce qu'il a fait dans des fichiers de log et impose des cooldowns. Cela empêche l'anti-pattern d'agent le plus courant : faire la même chose de façon répétée sans s'en rendre compte.
Construire le vôtre : Un template de démarrage
Voici le setup minimal viable d'agent auto-apprenant :
projet/
├── [AGENTS.md](https://www.contextstudios.ai/fr/blog/agentsmd-le-guide-bas-sur-la-recherche-pour-rendre-les-agents-ia-29-plus-rapides "[AGENTS.md](/blog/agentsmd-the-research-backed-guide-to-making-ai-agents-29-faster) : Le guide basé sur la recherche pour rendre les agents IA 29 % plus rapides") # Identité de l'agent + règles de session
├── HEARTBEAT.md # Rappels de vérifications périodiques
├── memory/
│ ├── YYYY-MM-DD.md # Notes de session quotidiennes
│ ├── learned-rules.md # Corrections accumulées
│ └── engagement-state.json # Compteurs d'actions + cooldowns
├── playbooks/
│ ├── content-pipeline.md # Instructions spécifiques aux tâches
│ └── engagement-rules.md # Règles spécifiques aux plateformes
└── logs/
├── posting-log.md # Ce qui a été publié où
└── error-log.md # Échecs et récupérations
Les trois patterns essentiels
1. Lire avant d'agir
Chaque tâche commence par la lecture des fichiers de contexte pertinents. L'agent n'opère jamais uniquement sur la base du prompt.
# Pseudocode
def executer_tache(type_tache):
contexte = read_file("playbooks/" + type_tache + ".md")
regles = read_file("memory/learned-rules.md")
recent = read_file(f"memory/{aujourdhui()}.md")
executer_avec_contexte(contexte, regles, recent)
2. Écrire après chaque action
Le résultat de chaque action est écrit sur le disque immédiatement. Cela empêche la perte de données lors de la compaction des conversations.
def publier_post(contenu, plateforme):
resultat = appel_api(contenu, plateforme)
# Écrire IMMÉDIATEMENT — ne pas attendre
append_to_file("logs/posting-log.md", f"""
- {maintenant()} | {plateforme} | {resultat.id} | {resultat.url}
""")
return resultat
3. Apprendre des corrections
Quand un humain corrige quelque chose, cela est capturé comme une règle permanente.
def traiter_correction(correction):
regle = f"- [{aujourdhui()}] {correction}"
append_to_file("memory/learned-rules.md", regle)
# Aussi journaliser dans les notes quotidiennes pour le contexte
append_to_file(f"memory/{aujourdhui()}.md",
f"Règle ajoutée : {correction}")
Résultats après 3 semaines
Depuis l'implémentation de cette architecture :
- Qualité du contenu : Les corrections humaines ont sensiblement diminué
- Engagement : Le taux d'engagement des réponses s'est amélioré à mesure que l'agent apprenait quels styles fonctionnent
- Fiabilité : Les exécutions de pipeline échouées nécessitant une intervention manuelle ont diminué significativement
- Couverture : L'agent gère maintenant un pipeline de contenu complet sur 4 langues et 4 plateformes sociales (X, LinkedIn, Facebook, Instagram) avec une supervision minimale
Le système n'est pas parfait. Il fait encore occasionnellement de nouvelles erreurs (qui deviennent ensuite de nouvelles règles). Il surcorrige parfois sur la base de données limitées. Et il nécessite qu'un humain examine périodiquement les règles accumulées pour élaguer celles qui sont obsolètes.
Mais il est fondamentalement différent d'un agent statique. Il accumule des connaissances au fil du temps. Et ça change tout.
Questions fréquemment posées (FAQ)
En quoi cela diffère-t-il du RAG (Retrieval-Augmented Generation) ?
Le RAG récupère des documents existants pour augmenter les prompts. Notre système va plus loin — l'agent écrit et met activement à jour ses propres fichiers de connaissances basés sur les résultats et le feedback. Le RAG est une mémoire en lecture seule ; ici c'est une mémoire en lecture-écriture avec des boucles de feedback. L'agent ne se contente pas de récupérer du contexte — il le crée, le cure et le fait évoluer.
Ai-je besoin d'un LLM spécifique pour construire cela ?
Non. Cette architecture est agnostique au modèle. Nous utilisons Claude Opus 4.6 en production, mais les patterns (mémoire basée sur fichiers, playbooks, boucles de feedback) fonctionnent avec n'importe quel LLM capable de lire des fichiers et de faire des appels d'outils. L'intelligence réside dans l'architecture, pas dans le modèle.
Comment empêchez-vous l'agent d'apprendre de mauvais patterns ?
Trois garde-fous : Premièrement, les corrections humaines écrasent les patterns appris par l'agent. Deuxièmement, nous exigeons 3+ points de données avant qu'un pattern soit promu en mise à jour stratégique. Troisièmement, un humain examine périodiquement le fichier des règles apprises et élague les entrées obsolètes ou incorrectes. Le système est conçu pour la supervision humaine, pas l'autonomie totale.
Que se passe-t-il quand les fichiers mémoire deviennent trop volumineux ?
Les notes quotidiennes sont éphémères — l'agent ne lit que les 2 derniers jours. La mémoire à long terme (MEMORY.md) est curée et reste concise. Les fichiers de règles apprises grandissent lentement (une ligne par correction) et dépassent rarement quelques centaines de lignes même après des mois. Les fichiers de log peuvent être rotés chaque semaine. En pratique, la taille des fichiers n'a jamais été un goulot d'étranglement.
Cette architecture peut-elle évoluer vers plusieurs agents travaillant ensemble ?
Oui. Chaque agent lit depuis des fichiers playbook partagés mais écrit dans ses propres fichiers mémoire. Les fichiers de stratégie partagés servent de mécanismes de coordination — quand un agent apprend quelque chose, les autres le récupèrent à leur prochaine lecture. Nous utilisons ce pattern avec des sessions cron isolées qui partagent les mêmes fichiers playbook mais opèrent indépendamment.
Construire des agents IA qui s'améliorent vraiment nécessite de les traiter moins comme du logiciel et plus comme des membres d'équipe — ils ont besoin de notes, de feedback, de connaissances institutionnelles et de la capacité d'apprendre de leurs erreurs. L'architecture décrite ici est notre implémentation fonctionnelle de cette idée.