Agents & SystèmesSailor
Chat documentaire
Interface de chat RAG avec citations de sources, historique de sessions et modes IA.
REF-SPEC/AG002-CHT v1.0 — 2026-04-09
1. Principe
Le chat documentaire est l'interface principale de Sailor. L'utilisateur pose une question en langage naturel, le système retrouve les chunks pertinents dans la base documentaire et génère une réponse avec les sources citées.
2. Pipeline de réponse
Question Recherche Construction LLM Réponse
utilisateur ──▶ vectorielle ──▶ contexte ──▶ Mistral / ──▶ + sources
(texte libre) (top 8 chunks) (sources + prompt Ollama citées
+ fallback BM25 + historique)Étapes détaillées
- Embedding de la question — La query est vectorisée avec
input_type: "query" - Recherche vectorielle — Similarité cosinus sur les chunks, top 8 résultats
- Fallback BM25 — Si pas d'embeddings disponibles, recherche lexicale avec pondération IDF
- Résolution des sources — Extraction des métadonnées document pour chaque chunk retenu
- Construction du contexte — Chunks formatés comme
[Source X: "Titre"] contenu... - Prompt système — Instructions : répondre uniquement depuis les sources, citer
[[source:DOC_ID|TITRE]], français - Appel LLM — Prompt système + contexte + historique (6 derniers messages) + question
- Extraction des citations — Parsing des marqueurs
[[source:...]]dans la réponse - Formatage — Réponse texte + tableau de sources avec métadonnées et pertinence
Format de réponse
{
"response": "Réponse formatée en markdown...",
"sources": [
{
"id": "doc-uuid",
"title": "Procédure RH v2",
"type": "pdf",
"categorie": "Procédures",
"auteur": "Direction RH",
"relevance": 0.89
}
],
"chunks_used": 8,
"ai_provider": "mistral"
}3. Recherche hybride
Recherche vectorielle (primaire)
- Embedding de la question via le même modèle que l'indexation
- Similarité cosinus entre le vecteur question et les vecteurs chunks
- Top 8 chunks retournés, triés par similarité décroissante
Recherche BM25 (fallback)
Activée automatiquement quand les chunks n'ont pas d'embeddings :
| Composant | Description |
|---|---|
| Tokenisation | Lowercase, suppression accents, filtrage stop-words |
| TF | Fréquence du terme dans le chunk |
| IDF | Fréquence inverse du terme dans le workspace (cache invalidé à chaque ajout) |
| Scoring | BM25 classique avec pondération TF-IDF |
4. Système de citations
Chaque réponse cite ses sources via des badges cliquables :
| Élément | Description |
|---|---|
| Dot coloré | Code couleur par type (PDF = orange, HTML = bleu, DOCX = vert, XLSX = doré) |
| Titre document | Tronqué si nécessaire |
| Lien | Clic ouvre le panel de prévisualisation du document |
| Fallback | Si le LLM ne cite pas explicitement, les chunks utilisés sont ajoutés automatiquement (max 5) |
5. Sessions de chat
Les conversations sont organisées en sessions persistantes :
| Attribut | Description |
|---|---|
| Titre | Premiers 60 caractères du premier message |
| Messages | Tableau JSON user/assistant |
| Historique injecté | 6 derniers messages dans le contexte LLM |
| Tri | Plus récentes en premier |
Gestion
| Action | Comportement |
|---|---|
| Nouvelle conversation | Session vierge, suggestions affichées |
| Historique | Slide-in depuis la gauche, liste complète |
| Supprimer | Suppression définitive de la session |
6. Modes IA
| Mode | LLM | Embedding | Basculement |
|---|---|---|---|
| Online | Mistral Large (fallback : Small) | Mistral Embed | Toggle sidebar |
| Offline | Ollama Ministral 3B | Ollama nomic-embed-text | Toggle sidebar |
La connectivité est vérifiée automatiquement toutes les 60 secondes avec fallback transparent vers le mode offline.