Assistant RAG pour événements locaux : ingestion open data, recherche vectorielle et API démontrable
Fil directeur
Construire un assistant factuel, traçable et démontrable à partir de données ouvertes
Chaîne technique
Ingestion OpenDataSoft, embeddings Ollama, FAISS, FastAPI, Gradio et Docker
Qualité
Tests automatisés, jeu annoté et métriques RAGAS pour lire les limites du POC
Détail
Lecture du projet
La fiche présente le pipeline RAG, les choix techniques structurants, les garde-fous de génération et la logique d'évaluation du système.
Résumé
01
Le projet vise à construire un assistant capable de répondre de manière factuelle à des questions sur des événements locaux à partir de données ouvertes. Le coeur de la démarche consiste à relier un pipeline de données propre, une recherche vectorielle locale et une génération encadrée pour produire des réponses exploitables et justifiables.
Problème adressé
02
Pour un usage métier, un assistant d'information sur des événements doit rester fiable sur des éléments concrets comme la date, le lieu, le prix ou la réservation. Le projet se concentre donc sur un RAG contraint par le contexte, avec obligation de ne pas inventer ce qui n'est pas présent dans les données récupérées.
Ingestion et normalisation des données
03
Le pipeline récupère les événements depuis OpenDataSoft ou OpenAgenda sous forme d'export Parquet, applique un filtrage métier sur la zone et la période, puis normalise les enregistrements dans un format homogène. L'usage d'un modèle Pydantic permet d'absorber l'hétérogénéité des champs tout en gardant une chaîne robuste face aux données mal formées ou incomplètes.
Indexation vectorielle locale
04
Les événements normalisés sont transformés en documents puis découpés en chunks avant calcul des embeddings. Le choix d'un index FAISS local, associé à des embeddings Ollama et à une persistance maîtrisée, permet de garder un système démontrable en local, reproductible et lisible sur le plan technique.
Moteur RAG et garde-fous
05
Le moteur applicatif orchestre récupération des meilleurs contextes puis génération de réponse à partir d'un prompt explicitement contraint. La réponse doit rester concise, datée lorsque nécessaire, et déclarer qu'elle ne sait pas lorsque l'information n'est pas présente dans les contextes récupérés.
API FastAPI et démonstration locale
06
Le projet expose des endpoints cohérents avec les besoins du POC, notamment pour vérifier la santé du système, poser une question, relancer la récupération des données et reconstruire l'index. Une interface Gradio complète l'ensemble pour offrir une démonstration simple sans dépendre d'un frontend plus lourd.
Tests et évaluation RAG
07
Le travail ne s'arrête pas au prototype fonctionnel. Le dépôt comprend des tests automatisés couvrant récupération, indexation, moteur RAG, API et performances, ainsi qu'un jeu annoté et une évaluation RAGAS. Cette combinaison permet de distinguer la robustesse logicielle du système et la qualité réelle des réponses générées.
Lecture des résultats
08
Les métriques RAGAS montrent une bonne fidélité au contexte et un niveau correct de précision et de rappel sur les contextes récupérés, mais une pertinence de réponse encore perfectible. Le projet est donc intéressant parce qu'il expose clairement son axe principal d'amélioration au lieu de masquer ses limites derrière une simple démonstration.
Conteneurisation et CI
09
Le système est conçu pour être lancé localement en conteneur, avec API et interface pilotées dans une même image pour simplifier la démonstration. Une pipeline GitLab CI complète l'ensemble avec lint, tests, build et déploiement, ce qui donne au POC une base d'industrialisation minimale mais défendable.
Limites assumées
10
Le système reste sensible à la qualité du dataset public, aux choix de chunking, à la valeur de k et à la disponibilité d'Ollama local. Les performances relevées sur environnement mocké ne doivent pas être lues comme des garanties de production, et la pertinence de réponse reste le principal point à améliorer.