Chatbot RAG d'assistance interne
Chatbot RAG interne qui répond aux questions sur l'outil métier de l'entreprise, alimenté en continu par les conversations du channel Slack support.
- Période
- 2025
- Rôle
- AI Engineer
- Contexte
- Meet My Mama
- Stack
- 8 technos
Le problème
L’outil de gestion central de l’entreprise (CRM + ops) générait beaucoup de questions récurrentes sur le channel Slack support : “Comment annuler une presta ?”, “Où je modifie une facture ?”, etc. Les mêmes réponses, écrites par les mêmes personnes, dans des fils Slack qui se perdaient.
L’idée : transformer cette conversation collective en knowledge base interrogeable.
L’architecture RAG
Slack #support
│
▼ (ingestion cron — Railway)
Fetch → Clean → Chunk → Embed
│
▼
Supabase (pgvector)
knowledge_chunks + embeddings
│
▼ (query)
Embed query → cosine similarity → top-k chunks
│
▼
Claude Sonnet (via OpenRouter) + chunks → réponse
│
▼
Frontend React / Widget iframe (intégré dans l'outil métier)
Détails techniques
Pipeline d’ingestion
Cron quotidien qui :
- Récupère les nouveaux messages du channel via l’API Slack
- Filtre les bruits (réactions, joins, etc.)
- Reconstruit les fils complets (question + réponses validées)
- Chunke par fil avec overlap sémantique
- Génère les embeddings avec
text-embedding-3-small - Upsert dans Supabase avec déduplication par hash
Recherche hybride
Cosine similarity sur pgvector + filtres par tags (catégorie, date) pour éviter le bruit. Top-5 chunks injectés dans le prompt.
LLM choisi : Claude Sonnet
Meilleur sur le français et sur la rétention fidèle des chunks (peu d’hallucinations sur ce type de QA).
Déploiement
Backend FastAPI + frontend React + cron tous trois sur Railway. Variables d’environnement gérées via Railway. Logs structurés.
Mon rôle
Conception complète, du pipeline d’ingestion Slack au widget intégrable dans l’outil métier (qui tourne sur Bubble.io). Choix techniques (Supabase pgvector plutôt que Pinecone pour rester sur la même infra).