GiGaRuN Solutions
Vos métiers, nos solutions Excellence IT - La Réunion
+262 692 31 11 91
← Retour à l'accueil des guides

🤖 Système Multi-Agents IA & Ollama

Architecture, Orchestration, Mémoire Persistante — Exocortex GiGaRuN

5 Agents spécialisés
2 Modes d'orchestration
100% Local possible
Mémoire persistante

1. Introduction — Pourquoi un système multi-agents ?

ℹ️
Ce document est un guide technique interne GiGaRuN. Il décrit l'architecture, l'utilisation et la maintenance du système multi-agents basé sur Ollama, Agno, mem0 et Qdrant.

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

ℹ️
Tous les agents utilisent le même modèle LLM de base (configurable dans config.json), mais se distinguent par leur prompt système, leur domaine d'expertise et les catégories de mémoires qu'ils consultent.
🔍
Analyste IT
Diagnostic & Analyse de criticité

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.

Diagnostic Criticité P1-P4 Causes racines Logs Monitoring RCA
Cas d'usage typiques :
  • 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
🔧
Technicien IT
Résolution & Commandes terrain

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).

Shell Debian Windows Server Scripts bash Nginx/Apache Docker Procédures
Cas d'usage typiques :
  • 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
✍️
Rédacteur
Documentation, Mails & Rapports

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).

Mails pro Rapports d'intervention Procédures CR réunion Guides utilisateur Adaptation registre
Cas d'usage typiques :
  • 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
🛡️
Expert Sécurité
Audit, CVE & Conformité

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.

CVE Audit SSH/HTTPS RGPD technique Durcissement CrowdSec Fail2ban
Cas d'usage typiques :
  • 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
💼
Commercial / Chiffrage
Devis, TVA 8.5% & Tarification

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".

Devis infogérance TVA 8.5% Forfaits mensuels Chiffrage projets Proposition commerciale
Cas d'usage typiques :
  • 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 ?

🔒
Règle de confidentialité : Pour tout échange impliquant des données client identifiables (noms, adresses IP de production, mots de passe, informations métier sensibles), utiliser exclusivement le Mode Ollama.
☁️
Mode Claude API recommandé pour : Rédaction complexe multi-agents, orchestration de tâches longues, analyses stratégiques, chiffrage détaillé, quand la qualité prime sur la confidentialité et avec données anonymisées.

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é

F

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"

T

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"

P

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.

# Consulter les mémoires stockées (via le menu interactif option 4) python multiagent.py --list-memories # Réinitialiser toutes les mémoires (ATTENTION irréversible) python multiagent.py --reset-memory # Seed manuel : injecter un contexte client d'emblée python multiagent.py --seed "Client Dupont, PME 10 postes, Debian 12, contrat Essentiel" # Backup du vector store avant reset xcopy /E /I qdrant_storage qdrant_storage_backup_%date%

API Qdrant directe

# Voir les collections existantes curl http://localhost:6333/collections # Compter les vecteurs dans la collection principale curl http://localhost:6333/collections/multiagent_memory # Dashboard Web Qdrant (si activé) http://localhost:6333/dashboard

6. Lancer le système

Prérequis

1

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 :

ollama pull qwen2.5:14b ollama pull nomic-embed-text
2

Qdrant démarré

Via Docker (recommandé) :

docker run -d --name qdrant -p 6333:6333 -v C:/multiagent/qdrant_storage:/qdrant/storage qdrant/qdrant

Ou via le script start_qdrant.bat sur le bureau.

3

Environnement Python

cd C:\Users\thoca\Exocortex\multiagent .venv\Scripts\activate # ou via le .bat
4

Fichier .env (Mode Claude API uniquement)

ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx

Non nécessaire en Mode Ollama pur.

Fichier .bat sur le bureau

@echo off title Exocortex Multi-Agents cd /d C:\Users\thoca\Exocortex\multiagent call .venv\Scripts\activate.bat python multiagent.py pause

Options du menu interactif

Option Action
1Lancer en Mode Ollama (100% local)
2Lancer en Mode Claude API
3Afficher les mémoires stockées
4Injecter un contexte client (seed)
5Réinitialiser la mémoire
6Vérifier l'état des services (Ollama, Qdrant)
qQuitter

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.

Le serveur mail de mon client n'envoie plus depuis ce matin 8h. Postfix installé sur Debian 12, les logs montrent : "connect to smtp.example.com[1.2.3.4]:587: Connection timed out" Criticité ? Diagnostic ? Commandes de correction à lancer en SSH ?

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édige un mail pour informer mon client (dirigeant, pas technicien) que son serveur mail a été hors service de 8h à 11h30 aujourd'hui. Cause : blocage du port 587 sur le pare-feu hôte. Résolu. Prévoir une surveillance renforcée cette semaine. Ton professionnel, rassurant, sans excuse excessive.

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.

Nouveau VPS livré : Debian 12, SSH sur port 22, root login actif, pas de fail2ban, pas de CrowdSec. Donne-moi les 10 actions de durcissement prioritaires, avec les commandes shell correspondantes.

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.

Chiffre un contrat infogérance mensuel pour une PME : - 8 postes Windows 11 Pro - 1 serveur fichiers (NAS Windows Server) - 1 VPS Linux (site web + messagerie) - Astreinte non incluse - Inclure la TVA à 8.5% Présenter en tableau HT / TVA / TTC.

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.

Mémorise ce contexte client pour les prochaines sessions : Nom : Client PME Réunion — Secteur commerce VPS Debian 12 sur un serveur dédié Stack : Nginx + PHP 8.2 + MariaDB Contrat : Surveillance + infogérance basique Prochain jalon : migration Debian 13 (planifiée Q3 2026) Contact tech : responsable-it@client.re

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

{ // Modèle utilisé par tous les agents (sauf l'orchestrateur en Mode B) "agent_model": "qwen2.5:14b", // Modèle utilisé pour les embeddings mem0 "embed_model": "nomic-embed-text", // URL du serveur Ollama "ollama_base_url": "http://localhost:11434", // URL du serveur Qdrant "qdrant_url": "http://localhost:6333", // Nom de la collection Qdrant pour les mémoires "memory_collection": "multiagent_memory", // Nombre de mémoires injectées par session "memory_top_k": 5, // Activer / désactiver des agents (true/false) "agents": { "analyste_it": true, "technicien_it": true, "redacteur": true, "expert_securite": true, "commercial": true }, // Mode par défaut au lancement (ollama / claude) "default_mode": "ollama", // Verbosité (true = affiche les échanges inter-agents) "verbose": false, // Sauvegarder les sessions dans un fichier log "log_sessions": true, "log_dir": "./logs" }

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 :

# Dans config.json "agent_model": "qwen2.5:7b" # Pull préalable ollama pull qwen2.5:7b
⚠️
Les modèles plus petits (7b) ont tendance à "oublier" les instructions système complexes sur de longues conversations. Privilégier 14b+ pour une qualité stable.

Désactiver un agent

Pour désactiver l'agent Commercial sur un profil orienté support pur :

"agents": { "commercial": false }

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 :

docker ps | grep qdrant # Si absent, redémarrer : docker start qdrant # Si le container n'existe pas : docker run -d --name qdrant -p 6333:6333 -v C:/multiagent/qdrant_storage:/qdrant/storage qdrant/qdrant

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 ps pour voir si le modèle est en mémoire
ollama ps # Si le modèle n'est pas chargé en GPU, voir : ollama run qwen2.5:14b "test" --verbose

🔴 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 :

# Backup puis suppression de la collection curl -X DELETE http://localhost:6333/collections/multiagent_memory # Relancer le système : la collection sera recréée avec les bonnes dimensions python multiagent.py

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 :

# Créer .env si absent echo ANTHROPIC_API_KEY=sk-ant-VOTRE_CLE > .env # Vérifier que python-dotenv est installé pip install python-dotenv

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

🛣️
Les évolutions ci-dessous sont envisagées mais non planifiées. Priorités à arbitrer selon la charge et les besoins terrain.
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
✔️
Principe directeur : Avant d'ajouter une feature, vérifier si une bibliothèque existante couvre le besoin (Agno tools, LangChain tools, etc.). Pas d'implémentation from scratch si une solution éprouvée existe.