-
ChromaDB
-
OpenAI embeddings
-
Chunking simple
-
Embedding cache
-
Conversation memory
-
Query decomposition (multi-step RAG)
-
Dynamic context filtering
-
Conversation-aware prompting
-
Lecture automatique des fichiers dans data/docs_corpus
-
Chunking simple (chunk_size=500, overlap=100)
-
Embeddings générés par batch (OpenAI)
-
Insertion en batch dans ChromaDB (pour éviter les erreurs de taille)
- Les embeddings des questions sont mis en cache -> si une question revient : pas de nouvel appel OpenAI
-
Embedding de la requête
-
Similarité cosinus
-
Récupération des chunks les plus proches
-
Filtrage par distance
-
Déduplication par fichier
-
Réduction à k documents les plus pertinents
Inspiré des techniques utilisées par Anthropic.
Quand l’utilisateur pose une question complexe comme :
"Explique-moi geometry ET compare avec physics"
Le système :
-
Décompose la requête en sous-questions
-
Fait un retrieval indépendant pour chaque sous-question
-
Construit un prompt multi-contexte structuré
-
Demande au LLM de fusionner les informations
L’historique est incorporé dans le prompt -> permet de garder le fil d’une conversation longue Tous les 10 messages, l'historique de la conversation est envoyé à un autre LLM pour résumer et ne garder que les informations importantes afin d'alléger le prompt donné à l'assistant.
pip install -r requirements.txt
Créer .env :
cp .env.example .env
OPENAI_API_KEY="votre_cle"
Places ton corpus de docs ou garde ceux déjà en place dans data/docs_corpus
Lance :
python source/embed.py
Note : si vous souhaitez recréer une base vectorielle, il vous suffit de supprimer la base dans le fichier data/vector_db puis de relancer python source/embed.py
/!\ Attention à ne pas supprimer le .gitignore dans le dossier
Lance :
python source/chat.py