← Retour au coin des experts
🏗️ Architecture 🖥️ Infra

Architecture Pipeline RAG Hybride — Avant / Après

Comment transformer un pipeline de connaissances fragmenté en un système unifié capable de router intelligemment chaque requête vers la bonne source ? Retour sur la consolidation du RAG hybride ExploDev — du silo à l'orchestration.

Fragmentation et goulots d'étranglement

Deux silos de données, une ingestion limitée, un graphe inutilisable et un LLM local à 0,7 tok/s.

2
Bases séparées
~830
Docs PG
~115
Docs SQLite
0,7
tok/s LLM

🔒 Problèmes identifiés

  • Silos : kimi_rag (PostgreSQL) et sg-rag (SQLite) sans pont.
  • Ingestion limitée : seuls les .md étaient indexés. Pas de .env, .yaml, .json, .sh, .py.
  • Graphe AGE mort : LOAD 'age' échouait pour l'utilisateur (privilèges insuffisants).
  • Pas de routing IA : chaque requête passait par les mêmes moteurs, quelle que soit son intention.
  • Cron basique : ingestion + embeddings toutes les 30 min, mais pas de peuplement graphe ni de classification.

Du silo à l'orchestration

ÉtapeActionRésultat
1Migration SQLite → PostgreSQLBase unique, déduplication SHA-256
2Qwen 2.5 3B sur serveur-iaClassifier à ~10 tok/s
3Reconfig Ollama (réseau + ctx 32k)Exposition LAN, contexte étendu
4Nouvel ingest ingest-hybrid.py7 formats, sanitization .env
5Orchestrateur rag-orchestrator.pyClassifier → Router → Résultats JSON
6Correction graphe AGE (droits fins)Pas de SUPERUSER, graphe activé
7Crons enrichis (4 tâches)Ingest, embed, graphe, classify auto
8CLI explodev-query1 commande = recherche hybride
9Extraction d'entités amélioréeStop-words FR + tri par longueur

🔄 Le pipeline en action

🧠 Classifier Qwen 2.5 3B
📊 PG Vectoriel 🔍 PG FTS 🕸️ AGE Graph 📁 Grep fichiers
✅ Résultats dédupliqués JSON

Un système unifié et intelligent

943
Documents indexés
~7 480
Chunks
28 463
Entités graphe
1
Base unique

🛡️ Sécurité : pas de SUPERUSER

Le graphe AGE fonctionne avec des droits minimaux : USAGE + SELECT sur les schémas kimi_graph et infrastructure. Aucun privilège élevé requis.

📂 Ingestion multi-formats

.md .env .yaml .json .sh .py

Les fichiers .env sont sanitizés : les valeurs sont masquées par *** avant indexation.

📈 Benchmark — Activation du graphe AGE

10 requêtes types. Avant : premier mot brut. Après : mots-clés filtrés (stop-words français + tri par longueur).

Avant
30%
Après
80%

📊 Résultats détaillés

RequêteAvant (résultats)Après (résultats)
Quel serveur héberge Neo4j ?02
Où sont stockés les credentials SSH ?02
Quel est le mot de passe PostgreSQL ?07
Quels ports ouverts sur serveur-sg ?03
Comment configurer le serveur-io ?34

⌨️ Utilisation

# Recherche simple
explodev-query "Quel serveur héberge Neo4j ?"

# Sortie JSON
explodev-query --json "Mot de passe PostgreSQL ?"

⏰ Automatisation

# Ingestion hybride (toutes les 30 min)
*/30 * * * *  ingest-hybrid.py

# Embeddings auto (toutes les 30 min)
*/30 * * * *  auto-embed.py

# Peuplement graphe AGE (toutes les 2h)
0 */2 * * *   populate-age-graph.py

# Classification auto (toutes les heures)
0 * * * *     rag-orchestrator.py --classify-new-docs

📁 Fichiers clés

ingest-hybrid.py rag-orchestrator.py populate-age-graph.py auto-embed.py graph_linker.py explodev-query

Document généré lors de la session de consolidation RAG hybride ExploDev — 4 juin 2026.