Loading repository data…
Loading repository data…
Selma-mtch / repository
Chatbot spécialisé dans le domaine des transports en Île de France
NavigIA est une application full stack de chatbot specialisee dans les transports en commun en France, avec un focus sur les donnees SNCF, Transilien, RATP et Ile-de-France Mobilites.
Le projet combine une interface React, une API Flask, une base SQLite, un pipeline RAG avec LangChain et ChromaDB, et un LLM appele via OpenRouter.
React / Vite
|
API Flask
|
SQLAlchemy + SQLite
|
LangChain + ChromaDB + Hugging Face Embeddings
|
OpenRouter
Technologies principales :
| Partie | Technologie |
|---|---|
| Frontend | React, Vite, react-markdown, remark-gfm |
| Backend | Flask, Flask-CORS |
| Base applicative | SQLite, SQLAlchemy |
| RAG | LangChain, ChromaDB |
| Embeddings | Hugging Face, sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 |
| LLM | OpenRouter |
| Recherche web | Tavily, limitee aux sources fiables |
| Fonctionnalite | Description |
|---|---|
| Authentification | Inscription et connexion utilisateur |
| Sessions | Creation, liste, renommage et suppression de conversations |
| Historique | Sauvegarde des messages utilisateur et assistant |
| Chatbot RAG | Recherche dans une base documentaire locale avant generation |
| Sources | Affichage des sources RAG et web utilisees |
| Fallback web | Recherche web si le RAG ne trouve pas de contexte pertinent |
| Markdown | Affichage lisible des listes et tableaux dans les reponses |
Les donnees locales sont stockees dans :
data/json/
Elles contiennent notamment :
Le projet n'utilise pas de donnees GTFS.
Le pipeline RAG est implemente dans :
backend/core/rag.py
Il fait les etapes suivantes :
Document LangChain.Des aliases sont ajoutes pour ameliorer la recherche. Exemple :
Forfait Navigo Mois
→ forfait Navigo mensuel
→ abonnement Navigo mensuel
→ Navigo mensuel
Cela permet au chatbot de retrouver une information meme si l'utilisateur n'emploie pas exactement le meme vocabulaire que le fichier source.
Si le RAG ne trouve pas de contexte pertinent, le backend peut utiliser Tavily.
Les resultats web sont filtres pour ne garder que des domaines fiables :
sncf.com
transilien.com
iledefrance-mobilites.fr
ratp.fr
service-public.fr
Le filtrage est implemente dans :
backend/core/search.py
Depuis la racine du projet :
cd backend
python3 -m venv chatbot
source chatbot/bin/activate
pip install -r requirements.txt
Sur Windows PowerShell :
cd backend
python -m venv chatbot
.\chatbot\Scripts\python.exe -m pip install -r requirements.txt
Creer le fichier .env :
cp .env.example .env
Sur Windows PowerShell :
Copy-Item .env.example .env
Variables importantes :
SECRET_KEY=une-cle-longue
OPENROUTER_API_KEY=sk-or-v1-...
OPENROUTER_MODEL=google/gemma-4-31b-it:free
TAVILY_API_KEY=tvly-dev-...
DATABASE_URL=sqlite:///chatbot.db
CHROMA_PATH=./chroma_db
DATA_PATH=../data/json
HF_HOME=./hf_cache
HF_HUB_DISABLE_SYMLINKS_WARNING=1
PORT=5001
FLASK_DEBUG=false
HF_HOME permet de stocker le modele Hugging Face dans le dossier backend au lieu du dossier utilisateur.
Depuis backend/ :
source chatbot/bin/activate
PYTHONUTF8=1 python app.py
Sur Windows PowerShell :
$env:PYTHONUTF8="1"
.\chatbot\Scripts\python.exe app.py
Le backend demarre sur :
http://localhost:5001
Au premier lancement, l'indexation ChromaDB peut prendre plusieurs minutes.
Si les donnees ou les aliases changent, il faut supprimer l'ancien index :
rm -rf backend/chroma_db
Sur Windows PowerShell :
Remove-Item -Recurse -Force backend\chroma_db
Puis relancer le backend.
Dans un second terminal :
cd frontend
npm install
npm run dev
Le frontend demarre sur :
http://localhost:5173
TransportsChatbot/
├── backend/
│ ├── app.py
│ ├── config.py
│ ├── database.py
│ ├── models.py
│ ├── controllers/
│ ├── services/
│ ├── repositories/
│ └── core/
│ ├── rag.py
│ ├── llm.py
│ └── search.py
├── data/
│ └── json/
├── frontend/
│ ├── package.json
│ └── src/
│ ├── api/
│ ├── components/
│ ├── context/
│ └── pages/
└── README.md
backend/chroma_db/, backend/hf_cache/, backend/chatbot/ et les fichiers .env ne doivent pas etre commits.Le backend relance deux fois l'indexation
Mettre dans .env :
FLASK_DEBUG=false
Impossible de supprimer chroma_db
Un processus Python utilise probablement ChromaDB. Arreter le backend puis supprimer le dossier.
Le chatbot repond avec le web alors que la donnee existe
Supprimer backend/chroma_db/, relancer le backend et laisser l'indexation se terminer.
Les tableaux Markdown s'affichent mal
Le frontend utilise remark-gfm pour afficher les tableaux. Relancer :
cd frontend
npm install
npm run dev