📋 Table des matières
1. Introduction — Pourquoi un système multi-agents ?
Un LLM unique vs un système multi-agents
Lorsqu'on interroge un LLM seul (via une interface comme Open WebUI), on obtient une réponse généraliste fondée sur sa connaissance pré-entraînée. Il n'a pas de mémoire entre sessions, ne peut pas coordonner plusieurs domaines d'expertise, et ne prend pas d'initiative.
Un système multi-agents change fondamentalement la donne : plusieurs modèles spécialisés travaillent en équipe sous la coordination d'un orchestrateur. Chaque agent a un rôle, une instruction système propre, et accède à une mémoire long-terme partagée. Le système retient le contexte client, les décisions passées, les préférences — et s'améliore session après session.
Spécialisation réelle
Chaque agent dispose d'un prompt système orienté métier : IT, rédaction, sécurité, commercial. Il n'est pas "généraliste diluté".
Mémoire persistante
mem0 extrait automatiquement les faits importants et les indexe dans Qdrant. Ils sont rappelés aux agents pertinents à chaque session.
Confidentialité totale
En mode Ollama, tout tourne sur votre machine. Zéro donnée client envoyée vers un cloud tiers.
Orchestration intelligente
L'orchestrateur analyse votre demande, choisit les agents à mobiliser, consolide les réponses en un résultat cohérent.
2. Architecture de la stack
Schéma général
┌───────────────────────────────────────────────────────────┐
│ INTERFACE UTILISATEUR (terminal) │
└─────────────────────────┬────────────────────────────────┘
│
⯅ ⯅ ⯅
┌───────────────────────────────────────────────────────────┐
│ ORCHESTRATEUR (Agno Team) │
│ Mode A : qwen2.5:14b (Ollama local) │
│ Mode B : claude-3-5-sonnet via API Anthropic │
└─────┬───────┬───────┬───────┬───────┬───────┬────────────┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│Anal.│ │Tech.│ │Réd. │ │Secu.│ │Com. │
│ IT │ │ IT │ │ │ │ │ │ │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘
│ │ │ │ │
└──────────────┬────────────┘
│
┌──────────────┐
│ mem0 + Qdrant │ <-- Mémoire long-terme
│ (port 6333) │
└──────────────┘
│
┌──────────────┐
│ Ollama (LLM) │ <-- Inference locale
│ port 11434 │
└──────────────┘
Briques composantes
Ollama — Inference LLM locale
Sert les modèles LLM en local via une API REST (port 11434). Supporte qwen2.5:14b pour l'orchestration et les agents, ainsi que nomic-embed-text pour les embeddings sémantiques. Aucune donnée ne quitte la machine.
Agno — Framework agents Python
Bibliothèque Python qui définit les agents (Agent) et les équipes (Team). Chaque agent a un nom, un rôle, un prompt système, et optionnellement des outils. La Team gère la coordination et la sélection d'agents selon le contexte.
mem0 — Mémoire long-terme
Bibliothèque qui extrait automatiquement des faits pertinents depuis les échanges (client, contexte technique, préférences). Ces faits sont stockés dans Qdrant et injectés dans le contexte de chaque agent en début de session.
Qdrant — Vector store
Base de données vectorielle (port 6333) qui stocke les embeddings des mémoires. Utilise nomic-embed-text via Ollama pour vectoriser les faits. Fourni via Docker ou binaire Windows. Données persistées dans ./qdrant_storage.
Orchestrateur Ollama (Mode A)
qwen2.5:14b joue le rôle de coordinateur. Entièrement local, privé, fonctionne sans internet. Idéal pour les données sensibles clients. Un peu plus lent sur CPU seul.
Orchestrateur Claude API (Mode B)
claude-3-5-sonnet ou claude-3-opus via l'API Anthropic. Orchestration plus fine, meilleure compréhension des intentions complexes, tool_use natif. Nécessite une clé API et une connexion internet.
3. Les 5 agents spécialisés
config.json), mais se distinguent par leur prompt système, leur domaine d'expertise et les catégories de mémoires qu'ils consultent.Spécialiste du diagnostic initial. Quand un incident est décrit, il analyse les symptômes, évalue la criticité (P1 à P4), identifie les causes racines probables et produit une synthèse structurée avant de passer la main au Technicien. Il connaît les architectures serveur, réseau et cloud courantes.
- Analyser un extrait de logs Apache / Nginx
- Évaluer si un incident mérite une escalade
- Diagnostiquer une saturation disque ou CPU
- Identifier un pattern d'attaque dans des logs auth
Traduit le diagnostic en actions concrètes. Génère des commandes shell prêtes à l'emploi (Debian/Ubuntu, Windows Server), des procédures de résolution pas-à-pas, et des scripts de correction. Il s'adapte au contexte technique mémorisé (version OS, config réseau, logiciels installés).
- Générer les commandes de correction d'un service en échec
- Produire un script de nettoyage espace disque
- Rédiger une procédure de reprise après sinistre
- Configurer un pare-feu UFW ou iptables
Transforme une information technique brute en communication professionnelle. Capable de rédiger des mails clients (incident, devis, suivi), des rapports d'intervention, des procédures documentaires, des comptes-rendus de réunion. Adapte le niveau de langue au destinataire (technique vs DSI vs utilisateur final).
- Rédiger un mail d'excuses suite à un incident
- Produire un rapport mensuel infogérance
- Formaliser une procédure d'escalade
- Transformer un ticket en documentation wikis
Spécialiste sécurité système et réseau. Analyse les configurations, identifie les vulnérabilités connues (CVE), vérifie la conformité RGPD sur les aspects techniques, suggère des remontées de durcissement. Intervient aussi en post-incident pour l'analyse forensique de premier niveau.
- Auditer la config SSH d'un serveur (ports, auth, ciphers)
- Vérifier si une version logicielle a des CVE actives
- Analyser des logs de connexion suspecte
- Suggérer une politique de sauvegarde conforme
Connaît la grille tarifaire GiGaRuN, les forfaits infogérance, la TVA applicable à La Réunion (8.5%). Génère des estimations de devis structurées, des synthèses de proposition commerciale. N'envoit jamais de nom de fournisseur cloud dans les livrables clients — tout est "hébergeur partenaire" ou "infrastructure dédiée".
- Chiffrer un contrat infogérance mensuel PME (5 postes + 1 serveur)
- Générer une ligne de devis pour migration serveur
- Calculer l'impact TVA 8.5% sur une proposition
- Rédiger la section tarifaire d'une propale
4. Les deux orchestrateurs
Le choix de l'orchestrateur se fait au lancement via le menu. Les agents sont identiques dans les deux modes — seul le coordinateur change.
| Critère | Mode Ollama (A) | Mode Claude API (B) |
|---|---|---|
| Modèle coordinateur | qwen2.5:14b (local) | claude-3-5-sonnet (cloud) |
| Confidentialité | ✅ 100% local, zéro cloud | ⚠️ Données envoyées à Anthropic |
| Coût | Gratuit (matériel propre) | Facturation API par token |
| Qualité orchestration | Bonne | Excellente (tool_use natif) |
| Vitesse | Dépend du matériel | Rapide (datacenter) |
| Fonctionnement hors ligne | Oui | Non (nécessite internet) |
| Compréhension intentions complexes | Correcte | Très fine |
| Prérequis | Ollama + qwen2.5:14b pullé | Clé API Anthropic dans .env |
Quand utiliser lequel ?
5. La mémoire persistante
Comment fonctionne mem0 ?
À chaque échange avec le système, mem0 analyse le dialogue et en extrait des faits sous forme de phrases courtes (« Le client utilise Debian 12 », « Contrat infogérance 3 serveurs », « Préfère les rapports en PDF »). Ces faits sont vectorisés via nomic-embed-text (Ollama) puis persistés dans Qdrant.
Au début de chaque nouvelle session, les agents font une recherche sémantique dans Qdrant pour récupérer les mémoires pertinentes au contexte de la conversation. Elles sont injectées silencieusement dans le prompt système.
Ce qui est mémorisé
Faits clients
Nom du client, secteur d'activité, nombre de postes, type de contrat, contacts principaux. Exemples : "Client PME secteur BTP, VPS Debian 12, 3 sites web actifs"
Contexte technique
Versions logicielles, configurations particulières, incidents passés, scripts déjà deployés. Exemples : "Serveur mail sur Postfix 3.7, dernier incident : queue bloquée le 2025-11-04"
Préférences opérationnelles
Préférences de livrables, horaires d'intervention, procédures spécifiques. Exemples : "Toujours livrer dans OneDrive, pas en Documents local"
Durée de vie et gestion
Les mémoires sont persistantes tant que le répertoire qdrant_storage/ est conservé. Il n'y a pas d'expiration automatique.
API Qdrant directe
6. Lancer le système
Prérequis
Ollama installé et fonctionnel
Ollama doit être en cours d'exécution (service système ou manuellement). Vérifier : curl http://localhost:11434/api/tags
Modèles requis pullés :
Qdrant démarré
Via Docker (recommandé) :
Ou via le script start_qdrant.bat sur le bureau.
Environnement Python
Fichier .env (Mode Claude API uniquement)
Non nécessaire en Mode Ollama pur.
Fichier .bat sur le bureau
Options du menu interactif
| Option | Action |
|---|---|
1 | Lancer en Mode Ollama (100% local) |
2 | Lancer en Mode Claude API |
3 | Afficher les mémoires stockées |
4 | Injecter un contexte client (seed) |
5 | Réinitialiser la mémoire |
6 | Vérifier l'état des services (Ollama, Qdrant) |
q | Quitter |
7. Cas d'usage concrets
🚨 Cas 1 — Ticket support IT : serveur mail hors service
Un client signale que ses emails ne partent plus depuis ce matin. L'Analyste IT évalue la criticité, le Technicien IT génère les commandes de diagnostic et de correction, le Rédacteur prépare la communication client.
Résultat attendu : Classification P2, analyse du blocage réseau (pare-feu sortant port 587), commandes telnet + netstat + correction ufw allow out 587, et projet de mail client annonçant la résolution.
📧 Cas 2 — Rédaction mail client suite à un incident
Après un incident résolu, le Rédacteur produit un mail professionnel sans jargon technique excessif, adapté au niveau du destinataire (dirigeant PME).
Résultat attendu : Mail avec objet, corps structuré (constat, cause, correction, suivi), ton direct et professionnel, sans mention du nom de l'hébergeur.
🛡️ Cas 3 — Audit sécurité rapide d'un VPS
L'Expert Sécurité produit une checklist d'audit SSH/réseau et identifie les points à durcir sur un nouveau VPS livré client.
Résultat attendu : Liste ordonnée : changer port SSH, désactiver root login, activer fail2ban, install CrowdSec + bouncer, UFW, clé SSH only, unattended-upgrades, etc. Avec commandes copier-coller.
💶 Cas 4 — Devis infogérance mensuelle PME (TVA 8.5%)
Le Commercial / Chiffrage génère une estimation structurée avec calcul TVA La Réunion. Le livrable ne mentionne aucun nom de fournisseur.
Résultat attendu : Tableau détaillé par ligne (supervision postes, supervision serveur, supervision VPS, main-d'oeuvre forfait), total HT, TVA 8.5%, TTC. Sans mention d'hébergeur spécifique.
🧠 Cas 5 — Seed mémoire contexte client
Avant une première session de travail sur un client, on injecte le contexte dans la mémoire pour que tous les agents disposent du contexte dès la première question.
Résultat attendu : Confirmation de l'extraction et du stockage de 6 faits dans Qdrant. Lors des sessions suivantes, les agents savent automatiquement que le client utilise Debian 12, l'adresse IP, la stack et le jalon de migration.
8. Paramétrage avancé
Structure de config.json
Changer le modèle des agents
Pour utiliser un modèle plus léger (e.g. qwen2.5:7b) sur une machine avec peu de RAM :
Désactiver un agent
Pour désactiver l'agent Commercial sur un profil orienté support pur :
L'orchestrateur ne mobilisera plus cet agent, même si la demande y fait référence.
9. Dépannage
🔴 Qdrant non accessible (Connection refused sur port 6333)
Symptôme : ConnectionRefusedError: [Errno 111] Connection refused au démarrage.
Vérifications :
Vérifier aussi qu'aucun pare-feu Windows ne bloque le port 6333 en loopback.
🟡 Ollama très lent (réponses en 3-5 min)
Cause probable : Le modèle tourne sur CPU uniquement (pas de GPU CUDA/ROCm disponible ou détecté).
Actions :
- Vérifier que les drivers NVIDIA/AMD sont à jour
- Passer à un modèle plus léger :
"agent_model": "qwen2.5:7b" - Fermer les applications gourmandes en RAM pendant l'utilisation
- Vérifier :
ollama pspour voir si le modèle est en mémoire
🔴 Erreur "dimension mismatch" dans Qdrant
Symptôme : VectorDimensionError: expected 768, got 1536
Cause : Le modèle d'embedding a été changé entre deux sessions. Les vecteurs existants ne sont plus compatibles.
Correction :
Les mémoires précédentes seront perdues. Utiliser --seed pour réinjecter les contextes critiques.
🔴 Clé API manquante (Mode Claude API)
Symptôme : AuthenticationError: No API key provided
Correction : Vérifier la présence du fichier .env dans le répertoire du projet :
Ne jamais committer le fichier .env dans git. Vérifier que .gitignore l'inclut.
🟡 L'orchestrateur mobilise toujours le même agent
Cause : Prompt trop vague ou ambigu, l'orchestrateur ne comprend pas quel domaine est visé.
Correction : Préciser le domaine dans la demande : "En tant qu'analyste IT", "Rédige un mail", "Chiffre ce contrat"... Activer "verbose": true dans config.json pour voir les décisions de routage.
10. Roadmap — Prochaines étapes
| Feature | Description | Priorité |
|---|---|---|
| Interface web locale | Remplacer le terminal par une interface Gradio ou Streamlit pour une utilisation plus accessible | Haute |
| Agent Comptabilité | Agent spécialisé Dolibarr / rapprochement bancaire / TVA, connecté à l'API Dolibarr | Haute |
| Outils (Tool Use) | Équiper les agents de vrais outils : lecture fichiers, appel API Dolibarr, exécution SSH via Paramiko | Moyenne |
| Mémoire par client | Segmentation Qdrant par client (collections séparées) pour éviter les contaminations mémoire inter-dossiers | Moyenne |
| Export automatique rapports | Génération automatique de PDF depuis les réponses Rédacteur, déposés dans OneDrive | Moyenne |
| Intégration n8n | Trigger multi-agents via webhooks n8n : création ticket → analyse automatique → notification Telegram | Basse |
| Déploiement VPS | Version serveur (API REST) accessible depuis mobile ou autres machines sur le réseau local | Basse |