SEINENTAI RAG - Agent conversationnel documentaire
Système RAG agentique pour Sukyo Mahikari : orchestration d'intentions, choix dynamique entre 3 stratégies de recherche, boucle d'auto-évaluation et streaming SSE token par token.
Stack Technique
IA agentique & NLP
Backend
Recherche & Données
Frontend
Infrastructure
plus rapide sur les interactions sociales (vs RAG classique)
stratégies de retrieval auto-sélectionnées (dense / hybrid / HyDE)
local & souverain, LLM, vector DB, stockage et conversations on-premise
Contexte & Objectifs
Sukyo Mahikari, organisation spirituelle internationale, dispose d'un corpus documentaire dense (textes doctrinaux, archives, supports de formation pour son service jeunesse) qui doit pouvoir être interrogé en langage naturel par ses membres. SEINENTAI RAG est l'agent conversationnel conçu pour cette base, avec un parti pris d'efficacité et de souveraineté : tout tourne en local (LLM Mistral via Ollama, vector DB Qdrant, stockage MinIO, conversations MongoDB), aucune donnée ne quitte l'infrastructure du commanditaire.
La Problématique
Les pipelines RAG standards souffrent de deux limites observables : (1) ils mobilisent la recherche vectorielle pour toute interaction, y compris les simples salutations, ce qui gaspille du compute et alourdit la latence ressentie ; (2) ils appliquent une stratégie de retrieval unique quel que soit le type de question, alors qu'une recherche dense, une recherche hybride dense+BM25 et une approche HyDE n'ont pas la même efficacité selon qu'on cherche un fait précis, un concept abstrait ou une question multi-hop.
La Solution
Architecture agentique en deux étages. Un IntentRouter classifie d'abord chaque message (small_talk / out_of_domain / knowledge_query) via une cascade regex puis LLM compact. Les interactions sociales sont court-circuitées en ~50 ms sans solliciter Qdrant. Pour les vraies questions, un StateGraph LangGraph à 7 nœuds orchestre : analyse de la requête, décomposition si multi-hop, choix dynamique de stratégie (dense / hybrid / HyDE), exécution, reranking via cross-encoder, auto-évaluation de la qualité (score 0 à 1), avec boucle de retry bornée qui change de stratégie sous le seuil de 0.6. La synthèse finale est streamée token par token via SSE, accompagnée des sources et d'un agent_trace complet (pensées, outils invoqués, scores, stratégies essayées) exploitable côté UI pour montrer le raisonnement en temps réel.
Résultats & Impact
Trois cas d'usage cibles atteints en local : (1) interactions sociales en <500 ms sans solliciter Qdrant, (2) questions factuelles avec sources en ~3 s (dense + rerank), (3) questions complexes multi-hop avec décomposition automatique et fallback de stratégie. Le pipeline RAG statique reste accessible via use_agent=false pour benchmarks comparatifs entre orchestration agentique et pipeline linéaire. Le triple chemin (agent / statique / direct) est exposé par un seul endpoint /chat/new. Ingestion documentaire asynchrone déclenchée par événements MinIO sur Kafka : tout fichier déposé est ré-indexé sans action manuelle.







Connexion
Page d'authentification pour accéder à l'agent
Pipeline & Étapes
- 1
Routage d'intention
IntentRouter.classify() filtre les messages sociaux par regex (~30 patterns figés), puis bascule sur un LLM compact si nécessaire. Les small_talk et out_of_domain reçoivent une réponse directe en ~50 ms sans toucher à Qdrant.
- 2
Analyse de requête
analyze_query détermine type (simple/complex), stratégie (dense/hybrid/hyde) et nécessité de décomposer en sous-requêtes. decompose_query éclate les questions multi-hop.
- 3
Recherche multi-stratégie
execute_search invoque l'outil correspondant via RetrievalTools.execute() : dense pur, hybrid (dense + BM25 sparse), ou HyDE (génération d'un document hypothétique avant retrieval). Déduplication sur les 200 premiers caractères avant rerank.
- 4
Reranking cross-encoder
rerank_results applique un cross-encoder (sentence-transformers) sur jusqu'à 10 candidats pour reclasser finement les documents avant synthèse.
- 5
Auto-évaluation + fallback
evaluate_quality note la pertinence sur 0–1. Sous 0.6, handle_fallback change de stratégie ou reformule. Boucle bornée à 4 itérations (DEFAULT_MAX_ITERATIONS) ; au-delà, synthèse forcée avec le contexte disponible plutôt qu'une erreur.
- 6
Synthèse en streaming SSE
synthesize_response produit la réponse finale token par token via Server-Sent Events, avec sources et agent_trace (pensées, outils invoqués, scores, stratégies). Événements émis : start, thought, tool_call, observation, synthesis_start, token, done, error.
Adaptations possibles
Cet agent fonctionne avec n'importe quel corpus documentaire. Le principe (savoir quand chercher et quand juste converser, ajuster sa stratégie au type de question) s'applique à toute organisation qui veut rendre ses documents internes interrogeables en langage naturel.
Quelques exemples
- Support client : répondre aux clients à partir de la base produit.
- Cabinet juridique : retrouver une clause ou une jurisprudence en posant la question en français.
- Établissement de santé : interroger un protocole clinique sans feuilleter 200 pages.
- Documentation RH ou IT : un salarié demande, l'agent répond avec la source officielle.