מה זה RAG ולמה זה חשוב?
RAG הוא פרדיגמה שמשלבת שליפת מידע (Retrieval) עם יצירת טקסט (Generation). במקום לסמוך רק על הידע המובנה של המודל, אנחנו מביאים לו קונטקסט רלוונטי מתוך מאגר המסמכים שלנו. דיוק של 95% עם RAG לעומת 60% בלי, הפחתת 70% בהזיות, ללא צורך ב-Fine-Tuning, ועדכון מידע מיידי ללא אימון מחדש.
יתרונות RAG
- עדכניות: המידע מתעדכן ללא צורך באימון מחדש
- דיוק: תשובות מבוססות על מקורות ספציפיים
- שקיפות: אפשר להציג את המקורות למשתמש
- חסכון: לא צריך fine-tuning יקר
ארכיטקטורת המערכת
המערכת כוללת שלוש שכבות: Frontend ב-React עם Search Box, Results ו-Chat Interface. Backend ב-FastAPI עם Retriever, Re-Ranker ו-Generator. ושכבת אחסון עם Vector Store (pgvector) ו-Full-Text Search (BM25).
שלב 1: הכנת סביבת העבודה
התקנת dependencies כוללת fastapi, uvicorn, openai, sentence-transformers, pgvector, psycopg2-binary, rank_bm25, langchain ו-langchain-openai.
שלב 2: אינדוקס מסמכים
האינדוקס הוא השלב הקריטי ביותר. נבנה pipeline שמטפל בחלוקה חכמה עם RecursiveCharacterTextSplitter, embeddings עם multilingual-e5-large, ואחסון כפול (וקטורי + מילולי) ב-PostgreSQL עם pgvector.
שלב 3: חיפוש היברידי
חיפוש היברידי משלב את היתרונות של חיפוש וקטורי (סמנטי) עם חיפוש מילולי (BM25). שימוש ב-Reciprocal Rank Fusion (RRF) לשילוב התוצאות נותן תוצאות טובות יותר מכל שיטה בנפרד.
שלב 4: Re-Ranking עם Cross-Encoder
Re-ranking משפר משמעותית את הדיוק על ידי השוואה ישירה בין השאילתה לכל מסמך. Cross-Encoder יקר יותר חישובית, אז מריצים אותו רק על Top-K הראשוני.
שלב 5: יצירת תשובות עם LLM
ה-Generator בונה context מהמסמכים שנשלפו, שולח אותם כ-prompt ל-GPT-4o, ומקבל תשובה מבוססת מקורות. תמיכה ב-streaming לחוויית משתמש טובה.
שלב 6: Backend API
FastAPI מספק שני endpoints: /search לחיפוש בלבד, ו-/ask ל-pipeline RAG מלא עם streaming.
שלב 7: React Frontend
ממשק Chat אינטראקטיבי בעברית עם הצגת מקורות לכל תשובה, auto-scroll, ואנימציות טעינה.
שלב 8: הערכת איכות
מטריקות חשובות: Precision@K, Recall@K, MRR (Mean Reciprocal Rank) ו-NDCG@K. הערכה שיטתית על סט שאילתות מבחן.
סיכום
בנינו מערכת RAG מקצה לקצה שכוללת אינדוקס חכם, חיפוש היברידי, re-ranking עם Cross-Encoder, וממשק משתמש נוח. המערכת מאפשרת לקבל תשובות מדויקות ומבוססות על המסמכים שלכם, עם שקיפות מלאה לגבי המקורות. עבור שפה עברית, השתמשו במודל intfloat/multilingual-e5-large שמגיע עם תמיכה מעולה בעברית.
