🧠 Architecture du Chatbot RAG - Stop Surendettement

πŸ“Š Flux complet quand tu poses une question

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        TU POSES UNE QUESTION                                β”‚
β”‚                    "Comment faire un budget ?"                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
│  ÉTAPE 1: GÉNÉRATION DE L'EMBEDDING DE TA QUESTION                          │
β”‚                                                                             β”‚
β”‚  Ta question β†’ API Infomaniak (bge_multilingual_gemma2)                     β”‚
β”‚                     β”‚                                                       β”‚
β”‚                     β–Ό                                                       β”‚
β”‚  "Comment faire un budget ?" β†’ [0.012, -0.045, 0.089, ... 3584 nombres]    β”‚
β”‚                                                                             β”‚
β”‚  Ce vecteur reprΓ©sente le SENS de ta question dans un espace mathΓ©matique   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Γ‰TAPE 2: RECHERCHE DANS LA BASE VECTORIELLE (SQLite)                       β”‚
β”‚                                                                             β”‚
β”‚  On compare ton vecteur avec TOUS les vecteurs stockΓ©s :                    β”‚
β”‚                                                                             β”‚
β”‚  Ta question:  [0.012, -0.045, 0.089, ...]                                  β”‚
β”‚       vs                                                                    β”‚
β”‚  Chunk 1 "Budget":     [0.011, -0.043, 0.091, ...] β†’ SimilaritΓ©: 0.81 βœ…   β”‚
β”‚  Chunk 2 "ImpΓ΄ts":     [0.089, 0.012, -0.034, ...] β†’ SimilaritΓ©: 0.45      β”‚
β”‚  Chunk 3 "Poursuites": [0.067, -0.023, 0.056, ...] β†’ SimilaritΓ©: 0.52      β”‚
β”‚  ...                                                                        β”‚
β”‚                                                                             β”‚
β”‚  Formule: SimilaritΓ© Cosinus = (AΒ·B) / (||A|| Γ— ||B||)                     β”‚
β”‚  Plus proche de 1 = plus similaire sΓ©mantiquement                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
│  ÉTAPE 3: SÉLECTION DES 5 MEILLEURS CHUNKS                                  │
β”‚                                                                             β”‚
β”‚  Les chunks les plus pertinents sont retournΓ©s :                            β”‚
β”‚                                                                             β”‚
β”‚  1. "Budget (part 2)" - score 0.81                                          β”‚
β”‚  2. "Adresses utiles" - score 0.65                                          β”‚
β”‚  3. "Changements de situation" - score 0.58                                 β”‚
β”‚  4. ...                                                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Γ‰TAPE 4: CONSTRUCTION DU PROMPT POUR L'IA                                  β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
│  │ Tu es un assistant du site "Stop Surendettement Genève".            │   │
│  │ Tu réponds en français, de manière empathique.                      │   │
β”‚  β”‚ Base-toi UNIQUEMENT sur le contexte fourni.                         β”‚   β”‚
β”‚  β”‚                                                                     β”‚   β”‚
β”‚  β”‚ CONTEXTE DU SITE:                                                   β”‚   β”‚
β”‚  β”‚ [Budget]                                                            β”‚   β”‚
β”‚  β”‚ Pour bien gΓ©rer l'argent, on doit faire un budget en notant        β”‚   β”‚
β”‚  β”‚ ce qu'on gagne et ce qu'on dΓ©pense...                              β”‚   β”‚
β”‚  β”‚ Source: https://surendettement.test/eviter-les-dettes/budget/      β”‚   β”‚
β”‚  β”‚                                                                     β”‚   β”‚
β”‚  β”‚ [Adresses utiles]                                                   β”‚   β”‚
β”‚  β”‚ Adresses oΓΉ trouver de l'aide...                                   β”‚   β”‚
β”‚  β”‚                                                                     β”‚   β”‚
β”‚  β”‚ QUESTION: Comment faire un budget ?                                 β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Γ‰TAPE 5: APPEL Γ€ L'IA (Mistral 24B)                                        β”‚
β”‚                                                                             β”‚
β”‚  Le prompt complet est envoyΓ© Γ  l'API Infomaniak                            β”‚
│  Modèle: mistral24b (Mistral-Small-3.2-24B-Instruct)                       │
β”‚                                                                             β”‚
│  L'IA lit le contexte et génère une réponse basée sur TON contenu           │
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
│  ÉTAPE 6: RÉPONSE AFFICHÉE                                                  │
β”‚                                                                             β”‚
β”‚  "Pour faire un budget, vous devez noter vos revenus et vos dΓ©penses.      β”‚
β”‚   Commencez par lister ce que vous gagnez chaque mois, puis ce que         β”‚
β”‚   vous dΓ©pensez. Cela permet de voir si vous pouvez tout payer..."         β”‚
β”‚                                                                             β”‚
β”‚  + Sources affichΓ©es : [Budget] [Adresses utiles]                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”‘ Concepts clΓ©s

1. Embedding (Vecteur)

C'est une reprΓ©sentation mathΓ©matique du SENS d'un texte.

"chat"    β†’ [0.1, 0.8, 0.2, ...]
"chien"   β†’ [0.15, 0.75, 0.25, ...] ← Proche de "chat" (animaux)
"voiture" β†’ [0.9, 0.1, 0.7, ...]   ← Loin de "chat"

Les mots/phrases avec un sens similaire ont des vecteurs proches !

2. SimilaritΓ© Cosinus

Mesure l'angle entre deux vecteurs (pas la distance) :

ScoreSignification
1.0Identique
0.8+Très similaire
0.5Moyennement liΓ©
0.0Aucun rapport

Formule :

similaritΓ© = (A Β· B) / (||A|| Γ— ||B||)

3. RAG (Retrieval Augmented Generation)

RAG = Recherche + GΓ©nΓ©ration

1. RECHERCHE : Trouver les infos pertinentes dans TA base
2. GÉNÉRATION : L'IA génère une réponse basée sur ces infos

Avantage : L'IA ne peut pas "halluciner" car elle se base sur ton contenu !


πŸ“ Fichiers du systΓ¨me

FichierRΓ΄le
chatbot-vector-store.phpBase vectorielle SQLite + embeddings
chatbot-context-generator.phpProxy API + gΓ©nΓ©ration contexte JSON
index.jsFrontend chatbot + logique RAG
chatbot.blade.phpTemplate UI du chatbot
Chatbot.phpBloc Gutenberg ACF

πŸ”Œ APIs utilisΓ©es

Infomaniak AI Tools

EndpointUsage
/1/ai/{product_id}/openai/chat/completionsGΓ©nΓ©ration de texte
/1/ai/{product_id}/openai/v1/embeddingsGΓ©nΓ©ration d'embeddings

Modèles

ModèleTypeUsage
mistral24bLLMRΓ©ponses du chatbot
bge_multilingual_gemma2EmbeddingVectorisation (3584 dim)

πŸ“Š Base de donnΓ©es SQLite

Fichier : wp-content/uploads/chatbot-vectors.db

Table chunks

ColonneTypeDescription
idINTEGERClΓ© primaire
source_typeTEXT"post" ou "pdf"
source_idTEXTID du post ou hash du PDF
titleTEXTTitre du chunk
contentTEXTContenu texte
urlTEXTLien vers la source
metadataTEXTJSON (post_type, chunk_index, etc.)
embeddingBLOBVecteur sΓ©rialisΓ© (3584 dimensions)

⏱️ Performance

Γ‰tapeTemps
Embedding de la question~200ms
Recherche dans les chunks~50ms
Appel Γ  Mistral 24B~3-8s
Total~4-9s

πŸ”§ Endpoints REST

EndpointMΓ©thodeDescription
/wp-json/chatbot/v1/contextGETContexte JSON (fallback)
/wp-json/chatbot/v1/chatPOSTProxy vers l'IA
/wp-json/chatbot/v1/searchPOSTRecherche sΓ©mantique
/wp-json/chatbot/v1/statsGETStatistiques du store

πŸš€ Γ‰volutions possibles

  1. Ajouter des PDFs - Via l'interface admin
  2. AmΓ©liorer le chunking - DΓ©coupage plus intelligent
  3. Cache des embeddings - Pour les questions frΓ©quentes
  4. Historique des conversations - Stocker en base
  5. Analytics - Suivre les questions posΓ©es
  6. Migration vers Qdrant - Si >10K documents

Documentation gΓ©nΓ©rΓ©e le 12 dΓ©cembre 2024