5.5 KiB
| title | slug | type | source | domains | tags | aliases | answers | priority | linked | related | link | updated | visibility | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GrasBot — chatbot IA du portfolio | grasbot | projet | manual |
|
|
|
|
7 |
|
|
https://fernandgrascalvet.com | 2026-04-23 | public |
GrasBot — chatbot IA du portfolio
[!info] Rôle de cette note Fiche projet (réalisation IA exposée sur
/competences/ia). Pour l'algorithme de retrieval détaillé voir grasbot-retrieval ; pour l'architecture globale du site voir architecture-site.
Le défi
Permettre à un visiteur de poser des questions libres sur le parcours, les projets et les compétences de Fernand, sans qu'il doive naviguer dans dix pages, et sans que le chatbot invente des informations qui ne sont pas dans les notes.
Pipeline technique
GrasBot n'est pas un simple wrapper ChatGPT : c'est un vrai pipeline RAG (Retrieval-Augmented Generation) construit de bout en bout.
1. Vault Obsidian comme source de vérité
Un coffre Obsidian structuré (vault-grasbot/) contient les notes de
parcours, projets École 42, compétences et glossaires. Chaque note porte
un frontmatter YAML avec aliases, answers, priority, domains
— autant de signaux pour le scoring.
2. Retrieval déterministe par graphe + BM25
Contrairement à un RAG classique à embeddings vectoriels, GrasBot
exploite directement la structure du vault : score multi-signaux
(aliases / titre / answers / domaines / BM25 sur le body), puis
expansion par graphe via les wikilinks [[...]]. Résultat : retrieval
en ~50 ms, 100 % traçable, sans dépendance à ChromaDB ni à des
embeddings. Détail : grasbot-retrieval.
3. Génération locale avec Qwen3 + Ollama
Un modèle Qwen3 8B (quantization Q4_K_M) tourne en local sur le serveur, servi par Ollama. Paramètres tunés après audit des premières traces :
num_ctx = 8192pour éviter la troncature silencieuse du contexte (défaut Ollama trop bas quand plusieurs notes entières sont injectées).num_predict = 1024pour les réponses longues complètes.think = falsepour désactiver le mode raisonnement interne qui consommait du budget de sortie.
4. Observabilité Langfuse de bout en bout
Chaque conversation déclenche une trace Langfuse avec 3 spans :
retrieval(notes remontées, scores, reasons),prompt_build(system + user complets, sources tronquées, flag grounded),ollama-chat(tokens, latence, paramètres).
Scores automatiques grounded et retrieval_relevance pour suivre la
qualité dans le temps.
5. Règles anti-hallucination
System prompt strict : interdiction d'inventer un fait absent des
notes, priorité aux sources type=parcours pour les questions
biographiques, mention explicite « non précisé dans les notes » quand
l'info manque. La source canonique bio-fernand (priority 10) couvre
les « qui est Fernand ? ».
Stack complète
| Couche | Outils |
|---|---|
| Front | Next.js 15 + composant React ChatBot.js ; session / user IDs anonymes (UUID v4 en sessionStorage / localStorage). |
| Proxy | Route API Next qui valide une whitelist de paramètres (q, session_id, user_id) et forward vers l'API Python. |
| Backend | FastAPI + Ollama ; pipeline search.py (graph + BM25) + observability.py (Langfuse). |
| Infra | Windows Server 2025 + IIS reverse proxy + HTTPS Let's Encrypt + VPN pour l'admin. |
Ce que ce projet démontre
- Chaîne RAG complète maîtrisée (ingestion, retrieval, génération, observabilité).
- Choisir la bonne brique selon le contexte : un vault de quelques dizaines de notes ne justifie pas des embeddings vectoriels — BM25 + graphe suffit largement.
- Tuning des modèles plutôt que subir leurs défauts (audit via Langfuse → correctifs ciblés).
- Déploiement en production sur une infra maîtrisée bout en bout.
Différentiation avec les notes voisines
| Note | Angle | Quand elle remonte en premier |
|---|---|---|
grasbot (cette note) |
Fiche produit / vignette réalisation IA | « Qu'est-ce que GrasBot ? », « Pipeline technique ? » |
| grasbot-retrieval | Technique interne (scoring, BM25, graphe) | « Comment le chatbot trouve-t-il ses réponses ? » |
| architecture-site | Stack globale Next + Strapi + FastAPI | « Comment est fait le site ? » |
| ia | Compétence (parcours IA de Fernand) | « Quelles sont ses compétences en IA ? » |
Liens
- MOC-Projets — hub projets
- MOC-Ia — hub domaine ia
- ia — compétence IA (fiche) ; GrasBot y apparaît en réalisation
- fernandgrascalvet-com — le site qui héberge GrasBot
- newsletter-ia · transcription-video — autres réalisations IA