Un chatbot RAG (Retrieval-Augmented Generation) pour l'aide aux personnes en situation de précarité en France. L'objectif de HumanAI est de fournir un accès rapide, sûr et vérifiable à des informations cruciales contenues dans des guides de solidarité.
Ce projet utilise des modèles de langage locaux via Ollama pour garantir la confidentialité et la gratuité, et une interface web simple construite avec Streamlit.
- Interface de Chat Intuitive : Une application web simple et accessible grâce à Streamlit.
- Connaissance Extensible : Le chatbot répond en se basant sur le contenu de tous les documents PDF placés dans le dossier
/data
. - 100% Local et Privé : Utilise Ollama pour faire tourner les modèles de langage et d'embedding en local. Aucune donnée n'est envoyée à des serveurs externes.
- Accélération GPU : La création de la base de connaissance et les réponses du chatbot sont accélérées sur les GPU NVIDIA.
- Transparence et Vérifiabilité : Chaque réponse est accompagnée des extraits de texte et des noms des documents sources utilisés, permettant à l'utilisateur de vérifier la provenance de l'information.
- Architecture "Zero Trust" Anti-Hallucination : Le système utilise une logique de filtrage en amont dans le code Python pour garantir que le modèle de langage ne reçoive que des informations pertinentes. Cela éradique quasi entièrement l'invention d'informations ("hallucination").
- Langage : Python 3.10
- Frameworks IA : LangChain, Ollama
- Base de données vectorielle : FAISS (accéléré par GPU)
- Interface Web : Streamlit
- Gestion d'environnement : Conda
Suivez ces étapes pour lancer le projet sur votre machine.
- Un environnement Conda/Miniconda.
- Une carte graphique NVIDIA avec les pilotes et le CUDA Toolkit installés.
- Ollama installé et en cours d'exécution.
# 1. Cloner le dépôt (remplacez par votre nom d'utilisateur)
git clone https://github.com/VOTRE_NOM_UTILISATEUR/humanAI.git
cd humanAI
# 2. Créer et activer l'environnement Conda
conda create --name humanai_env python=3.10 -y
conda activate humanai_env
# 3. Installer les dépendances Python avec pip
pip install streamlit langchain-community langchain-ollama pypdf
# 4. Installer FAISS pour GPU avec Conda (depuis le bon canal)
conda install -c conda-forge faiss-gpu
# 5. Télécharger les modèles Ollama nécessaires
ollama pull mistral
ollama pull nomic-embed-text
Le projet fonctionne en deux temps : d'abord la construction de la base de connaissance, puis le lancement de l'application de chat.
Placez tous les guides et documents au format .pdf
que vous souhaitez que HumanAI connaisse dans le dossier /data
.
Ce script va lire tous les PDF, les nettoyer, les découper, et créer une base de données vectorielle optimisée (faiss_index
). Cette opération est à refaire à chaque fois que vous ajoutez, modifiez ou supprimez des PDF dans le dossier /data
.
streamlit run build_index.py
Attendez que l'interface web affiche le message de succès, puis vous pouvez fermer l'onglet et arrêter le script dans le terminal (Ctrl+C).
Une fois l'index construit, vous pouvez lancer l'interface de chat.
streamlit run app.py
Ouvrez votre navigateur à l'adresse indiquée (généralement http://localhost:8501
) et commencez à discuter avec HumanAI !
La fiabilité est l'objectif numéro un de HumanAI. Les modèles de langage peuvent "halluciner" et inventer des informations, ce qui est inacceptable et dangereux pour un cas d'usage social.
Pour contrer ce risque, ce projet implémente une architecture "Zero Trust" :
- Le système récupère une large sélection de documents potentiellement pertinents depuis la base de données vectorielle.
- Le lieu demandé par l'utilisateur (ex: "Pantin") est extrait de la question.
- Le code Python filtre lui-même les documents pour ne garder que ceux qui contiennent explicitement le nom du lieu.
- Si aucun document ne passe ce filtre, le chatbot n'est même pas sollicité. Une réponse de sécurité, honnête et utile, est directement envoyée à l'utilisateur, l'orientant vers le CCAS local.
- C'est seulement si des documents pertinents sont trouvés qu'ils sont envoyés au modèle de langage pour une simple synthèse.
Cette approche garantit que le chatbot ne peut pas mélanger des informations de contextes différents (ex: une adresse de Paris avec la ville de Pantin) et fournit la réponse la plus sûre possible en cas de manque d'information.