المعمارية
Documents → Chunker → Embedder → Pinecone
↓
User Query → Embedder → Pinecone Search → Reranker → LLM → Answer
استراتيجية التقطيع
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=64,
separators=['\n\n', '\n', '. ', ' '],
)
البحث الهجين (BM25 + كثيف)
BM25 لمطابقة الكلمات المفتاحية + تشابه جيب التمام للدلالة — يُدمجان عبر RRF:
rrf_score = sum(1/(k + rank_i) for rank_i in [bm25_rank, dense_rank])
التخفيف من الهلوسة
- استشهد بالمقاطع المصدرية في الإجابة
- اضبط temperature=0 للاستعلامات الواقعية
- تحقق من تداخل رموز الإجابة مع السياق (مقياس الأمانة RAGAS)