Architecture
Documents → Chunker → Embedder → Pinecone
↓
User Query → Embedder → Pinecone Search → Reranker → LLM → Answer
Stratégie de chunking
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=['\n\n', '\n', '. ', ' '],
)
Recherche hybride (BM25 + dense)
BM25 pour la correspondance de mots-clés + similarité cosinus pour le sémantique — combinées via RRF :
rrf_score = sum(1/(k + rank_i) for rank_i in [bm25_rank, dense_rank])
Atténuation des hallucinations
- Citez les chunks sources dans la réponse
- Mettez temperature=0 pour les requêtes factuelles
- Vérifiez le recouvrement des tokens de réponse avec le contexte (métrique de fidélité RAGAS)