Un système de questions-réponses intelligent basé sur RAG (Retrieval-Augmented Generation) qui utilise des modèles locaux avec Ollama. Interrogez vos documents PDF, TXT et Markdown de manière conversationnelle, sans dépendre de services cloud externes.
- 🔍 RAG Local - Recherche intelligente dans vos documents
- 📚 Multi-formats - Support PDF, TXT, Markdown
- 🖥️ Interface CLI - Terminal interactif avec Rich UI
- 🌐 API REST - Endpoints FastAPI pour intégration
- 🧠 Ollama Integration - Modèles LLM locaux (Mistral, Llama, etc.)
- 💾 Base vectorielle - Stockage persistant avec Chroma
- 🎯 Recherche précise - Récupération de documents pertinents
- 🔧 Configurable - Variables d'environnement flexibles
qa_local/
├── 📁 data/ # Documents sources (PDF, TXT, MD)
├── 📁 index/ # Index vectoriel Chroma (généré)
├── 📄 api.py # API REST FastAPI
├── 📄 ingest.py # Script d'ingestion des documents
├── 📄 qa_cli.py # Interface en ligne de commande
├── 📄 utils.py # Utilitaires de traitement
└── 📄 README.md # Ce fichier
- Python 3.8+
- Ollama installé localement
# Linux/Mac
curl -fsSL https://ollama.ai/install.sh | sh
# Démarrer Ollama
ollama serve# Modèle d'embedding (requis)
ollama pull nomic-embed-text
# Modèle de génération (recommandé)
ollama pull mistral:7b-instruct# Cloner le projet
git clone <votre-repo>/qa_local.git
cd qa_local
# Créer l'environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Installer les dépendances
pip install -r requirements.txtCréez un fichier requirements.txt :
fastapi>=0.100.0
uvicorn[standard]>=0.20.0
langchain>=0.1.0
langchain-community>=0.0.10
langchain-ollama>=0.1.0
chromadb>=0.4.0
pypdf>=3.0.0
rich>=13.0.0
pydantic>=2.0.0
python-multipart>=0.0.6Créez un fichier .env (optionnel) :
# Répertoires
DATA_DIR=data
INDEX_DIR=index
# Modèles Ollama
EMBED_MODEL=nomic-embed-text
LLM_MODEL=mistral:7b-instruct
# Configuration RAG
COLLECTION=qa_local
TOP_K=4Placez vos documents dans le dossier data/ :
mkdir -p data
cp mes_documents.pdf data/
cp guide.txt data/
cp notes.md data/python ingest.pySortie attendue :
🚀 Début de l'ingestion des documents
✅ 15 documents chargés
✅ 127 chunks créés
🎉 Indexation terminée!
📊 127 documents dans la collection 'qa_local'
python qa_cli.pyFonctionnalités CLI :
- ❓ Posez vos questions naturellement
/stats- Statistiques de la base/help- Aide et commandes/clear- Effacer l'écranCtrl+C- Quitter
uvicorn api:app --reload --host 0.0.0.0 --port 8000Endpoints disponibles :
| Endpoint | Méthode | Description |
|---|---|---|
/qa |
POST | Question-Réponse principale |
/health |
GET | État de santé de l'API |
/collections |
GET | Statistiques de la collection |
/docs |
GET | Documentation Swagger |
Exemple d'usage :
curl -X POST "http://localhost:8000/qa" \
-H "Content-Type: application/json" \
-d '{"question": "Quel est le sujet principal du document?"}'Réponse JSON :
{
"answer": "Le document traite principalement de...",
"sources": ["document1.pdf", "guide.txt"]
}graph TD
A[Documents Sources] --> B[Ingestion]
B --> C[Découpage en Chunks]
C --> D[Génération Embeddings]
D --> E[Stockage Chroma]
E --> F[Interface Utilisateur]
F --> G{Type d'interface?}
G -->|CLI| H[Terminal Rich]
G -->|API| I[FastAPI REST]
H --> J[Question Utilisateur]
I --> J
J --> K[Recherche Vectorielle]
K --> L[Génération Réponse LLM]
L --> M[Réponse + Sources]
❓ Qu'est-ce que l'intelligence artificielle ?
❓ Résume le contenu du rapport financier
❓ Quelles sont les étapes du processus ?
❓ Compare les approches mentionnées dans les documents
❓ Quels sont les avantages et inconvénients listés ?
❓ Donne-moi les chiffres clés du dernier trimestre
# Installer un nouveau modèle
ollama pull llama3:8b
# Modifier la variable d'environnement
export LLM_MODEL=llama3:8b
# Ou dans le .env
LLM_MODEL=llama3:8b# Dans api.py ou qa_cli.py
TOP_K = 6 # Plus de documents récupérés
temperature = 0.1 # Réponses plus conservatrices
chunk_size = 1000 # Chunks plus grands| Format | Extension | Loader |
|---|---|---|
.pdf |
PyPDFLoader | |
| Texte | .txt |
TextLoader |
| Markdown | .md |
TextLoader |
# Vérifier qu'Ollama fonctionne
ollama list
curl http://localhost:11434/api/tagsollama pull nomic-embed-text
ollama pull mistral:7b-instruct# Supprimer et recréer l'index
rm -rf index/
python ingest.py# Réduire la taille des chunks dans utils.py
chunk_size = 400
chunk_overlap = 50python qa_cli.py
> /statscurl http://localhost:8000/health# Utilisation GPU/CPU
ollama ps- Fork le projet
- Créer une branche feature (
git checkout -b feature/amelioration) - Commit vos changements (
git commit -am 'Ajout fonctionnalité') - Push sur la branche (
git push origin feature/amelioration) - Créer une Pull Request
- 🌐 Interface Web avec Streamlit/Gradio
- 📄 Support Word/PowerPoint
- 🔍 Recherche hybride (vectorielle + full-text)
- 👥 Gestion multi-utilisateurs
- 📈 Analytics et métriques avancées
- 🎨 Thèmes et personnalisation UI
- 🔄 Synchronisation dossiers automatique
- ✨ Interface CLI enrichie avec Rich
- 🔧 API FastAPI complète
- 🛡️ Gestion d'erreurs robuste
- 📊 Commandes statistiques
- 🎯 Validation des paramètres
- 🏗️ Architecture RAG de base
- 📚 Ingestion PDF/TXT
- 🤖 Integration Ollama
- 💾 Stockage Chroma
Si ce projet vous aide, pensez à lui donner une ⭐ !
Créé avec ❤️ par TF-Jordan
QA Local - Votre assistant intelligent pour interroger vos documents en local, sans cloud, sans compromis sur la confidentialité.