רגע! לפני שהולכים... 👋
אל תפספסו! מסלולי לימוד נפתחים בקרוב - מקומות מוגבלים
| מסלול Machine Learning | 06/10 |
| מסלול Cyber | 08/10 |
| מסלול Computer Vision | 08/10 |
| מסלול RT Embedded Linux | 04/11 |
✓ ייעוץ אישי ללא התחייבות | תשובה תוך 24 שעות

עודכן לאחרונה: 7 ספטמבר, 2026
אם יש לכם LLM — בין אם GPT-4, Claude, Llama או Mistral — הוא כבר יודע המון. אבל הוא לא יודע מה כתוב בנהלי העבודה שלכם, במסמכי הפרויקט, בפרוטוקולים, במיילים הפנימיים או בבסיס הידע של ה-IT. ארכיטקטורת RAG (Retrieval-Augmented Generation) פותרת את זה בצורה אלגנטית: במקום לאמן מודל מאפס על הדאטה שלכם, אתם פשוט מלמדים אותו לשלוף את המסמך הנכון, לקרוא אותו, ולענות על בסיסו. זה כמו ההבדל בין בן אדם שלמד בעל-פה ספר טלפונים שלם, לבין בן אדם חכם שיודע איפה לחפש. RAG הוא הגישה השנייה — והיא עובדת טוב יותר.
RAG הוא דפוס ארכיטקטוני שבו כל שאילתה למודל השפה עוברת קודם דרך שלב אחזור — retrieval. המערכת מחפשת במאגר המסמכים שלכם את הקטעים הרלוונטיים ביותר, מזריקה אותם לתוך ה-prompt, והמודל מייצר תשובה שמבוססת על ידע אמיתי ומעודכן.
שלוש גישות עיקריות קיימות להתאמת LLM לצורכי הארגון:
prompt engineering הוא הפשוט ביותר, כותבים הוראות מדויקות ודוגמאות ב-prompt עצמו.
Fine-tuning הוא אימון מחדש של המודל על דאטה מותאם — עובד מעולה לסגנון ופורמט, אבל דורש משאבי GPU, זמן, ומומחיות.
RAG הוא מעין "חכמת רחוב" — המודל נשאר כמו שהוא, אבל מקבל ספר פתוח בזמן המבחן.
היתרון הכי גדול של RAG: הידע מתעדכן ברגע שאתם מוסיפים מסמך חדש למאגר. ב-fine-tuning, כל עדכון ידע דורש אימון מחדש שעולה כסף וזמן. בארגון שמייצר עשרות מסמכים בשבוע — RAG הוא הגישה הסבירה היחידה.
נקודת מפתח: RAG לא מחליף fine-tuning — הוא משלים אותו. אם אתם צריכים שהמודל ידבר בסגנון מסוים (למשל, טון של חברת ביטוח ישראלית), fine-tuning נכון. אם אתם צריכים שהוא יענה על סמך מסמכים ספציפיים — RAG הוא הכלי.
הזרימה המלאה נראית כך: המשתמש שואל שאלה → השאלה עוברת embedding (המרה לווקטור מספרי) → חיפוש בבסיס וקטורי (vector database) → אחזור של ה-chunks הרלוונטיים → הזרקה ל-prompt → המודל מייצר תשובה מבוססת-מקורות → (אופציונלי) ציון מקורות למשתמש.
רכיבי המערכת הבסיסיים הם חמישה: Document Loader (טוען מסמכים), Text Splitter (פורק לקטעים), Embedding Model (ממיר טקסט לווקטורים), Vector Store (מאחסן ומחפש), ו-LLM שמייצר את התשובה הסופית. כל אחד מהם ניתן להחלפה בלי לשנות את השאר — וזו אחת היופיים של הארכיטקטורה.
הצעד הראשון הוא להביא את המסמכים הארגוניים שלכם לפורמט שהמערכת יכולה לעבד. PDF, DOCX, דפי Confluence, Google Docs, מיילים — הכול צריך להפוך לטקסט נקי. ספריות כמו unstructured או PyPDF2 עושות את העבודה.
אחרי הטעינה, מפרקים כל מסמך ל-chunks — קטעי טקסט בגודל קבוע, בדרך כלל בין 500 ל-1,000 תווים, עם חפיפה (overlap) של 100-200 תווים. החפיפה מבטיחה שאף משפט חשוב לא ייחתך באמצע. אין מספר קסם — הגודל האופטימלי תלוי בסוג המסמכים שלכם.
הנה כלל אצבע: מסמכים טכניים עם טבלאות ונהלים — chunks קטנים יותר (300-500 תווים). מסמכים נרטיביים כמו סיכומי ישיבות — chunks גדולים יותר (800-1,200 תווים). תמיד בדקו מה עובד טוב יותר על הדאטה שלכם.
כל chunk עובר דרך מודל embedding שממיר אותו לווקטור — רצף מספרים שמייצג את "המשמעות" של הטקסט. כשמשתמש שואל שאלה, גם השאלה עוברת embedding, ואז המערכת מחפשת את ה-chunks שה-ווקטורים שלהם הכי קרובים (cosine similarity).
מודלי embedding פופולריים כוללים את text-embedding-3-small של OpenAI (מהיר וזול), all-MiniLM-L6-v2 של Sentence Transformers (חינמי, רץ לוקאלית), ו-BGE-M3 של BAAI שתומך בעברית בצורה סבירה. לעברית ספציפית, כדאי לבדוק ביצועים — אנגלית עדיין מקבלת תוצאות טובות יותר ברוב המודלים.
ה-vector database הוא המקום שבו ה-ווקטורים יושבים ומחכים לחיפוש. האפשרויות נעות מפתרון קל כמו ChromaDB או FAISS (עובדים לוקאלית, מעולים לפיתוח) ועד מערכות production כמו Pinecone, Weaviate, או Qdrant.
טעות נפוצה: הרבה מפתחים שמים את כל המסמכים באותו index בלי metadata. זו טעות. תייגו כל chunk עם מקור, תאריך, מחלקה, ורמת סיווג. ה-metadata הזה מאפשר סינון חכם בזמן חיפוש — למשל, "חפש רק במסמכי HR מהשנה האחרונה".
עכשיו מגיע החלק המהנה. כשמשתמש שואל שאלה, המערכת מבצעת: (1) embedding לשאלה, (2) חיפוש ב-vector store ומשיכת top-k chunks (בדרך כלל 3-5), (3) הכנת prompt שכולל הוראות מערכת + ה-chunks + השאלה, (4) שליחה ל-LLM וקבלת תשובה.
הנה קוד Python מלא שבונה מערכת RAG עובדת עם LangChain:
from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
import os
os.environ["OPENAI_API_KEY"] = "sk-your-key-here"
# שלב 1: טעינת מסמכים מתיקייה
loader = DirectoryLoader(
"./company_docs/",
glob="**/*.txt",
loader_cls=TextLoader,
loader_kwargs={"encoding": "utf-8"}
)
documents = loader.load()
print(f"Loaded {len(documents)} documents")
# שלב 2: פירוק ל-chunks
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=150,
separators=["\n\n", "\n", ".", " "]
)
chunks = text_splitter.split_documents(documents)
print(f"Created {len(chunks)} chunks")
# שלב 3: יצירת embeddings ואחסון ב-ChromaDB
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db",
collection_name="company_knowledge"
)
# שלב 4: הגדרת prompt מותאם לעברית
prompt_template = PromptTemplate(
input_variables=["context", "question"],
template="""אתה עוזר ידע ארגוני מקצועי. ענה על השאלה אך ורק על סמך ההקשר הבא.
אם אין מספיק מידע בהקשר — אמור בכנות שאינך יודע.
ציין את שם המסמך שממנו לקחת את המידע.
הקשר:
{context}
שאלה: {question}
תשובה מבוססת-מקורות:"""
)
# שלב 5: בניית שרשרת RAG
llm = ChatOpenAI(model="gpt-4o", temperature=0.1)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(
search_type="mmr", # Maximal Marginal Relevance - גיוון תוצאות
search_kwargs={"k": 4}
),
chain_type_kwargs={"prompt": prompt_template},
return_source_documents=True
)
# שלב 6: שאילתה
result = qa_chain.invoke({"query": "מה מדיניות החופשה השנתית בחברה?"})
print(result["result"])
print("---")
for doc in result["source_documents"]:
print(f"מקור: {doc.metadata.get('source', 'לא ידוע')}")
שימו לב לכמה דברים חשובים בקוד: השימוש ב-MMR (Maximal Marginal Relevance) במקום similarity רגיל — זה מבטיח שה-chunks שנשלפים לא חוזרים על אותו תוכן. ה-temperature נמוך (0.1) כי אנחנו רוצים תשובות מדויקות, לא יצירתיות. וה-prompt מבקש מהמודל להודות כשהוא לא יודע — זה קריטי.
להתקנת כל החבילות הדרושות:
pip install langchain langchain-community langchain-openai \
chromadb sentence-transformers unstructured \
pypdf python-docx tiktoken
הבחירה ב-vector database משפיעה על ביצועים, עלויות, ופשטות התחזוקה. הנה השוואה מעשית של הפתרונות הנפוצים:
| קריטריון | ChromaDB | Pinecone | Weaviate | Qdrant |
|---|---|---|---|---|
| סוג | קוד פתוח, לוקאלי | שירות ענן מנוהל | קוד פתוח + ענן | קוד פתוח + ענן |
| מתאים ל- | פיתוח, POC, צוותים קטנים | production בסקייל | production עם גמישות | production עם ביצועים גבוהים |
| סינון metadata | בסיסי | מתקדם מאוד | מתקדם + GraphQL | מתקדם |
| תמיכה ב-hybrid search | לא | כן (sparse + dense) | כן (BM25 + vector) | כן |
| הרצה on-premise | כן | לא (ענן בלבד) | כן (Docker / K8s) | כן (Docker / K8s) |
| עלות התחלתית | חינם | חינם עד 100K ווקטורים | חינם (self-hosted) | חינם (self-hosted) |
| עקומת למידה | קלה מאוד | קלה | בינונית | בינונית |
| מתאים לארגונים ישראליים עם דרישות פרטיות | כן (הכול לוקאלי) | חלקי (שרתים בחו"ל) | כן (self-hosted) | כן (self-hosted) |
לארגונים ישראליים שעובדים עם מידע רגיש — בריאות, ביטחון, פיננסים — Qdrant או Weaviate ב-self-hosted הם הבחירה הסבירה. הכול רץ על השרתים שלכם, שום מידע לא יוצא החוצה. לסטארטאפ שרוצה POC מהר — ChromaDB מספיק בהחלט.
חיפוש וקטורי מעולה בהבנת משמעות — "מדיניות חופשה" ימצא גם "ימי פנאי" ו"vacation policy". אבל הוא עלול לפספס כשהשאילתה מכילה מספר מזהה ספציפי, שם מוצר, או מונח טכני ייחודי. כאן hybrid search נכנס לפעולה — הוא משלב חיפוש וקטורי (semantic) עם חיפוש מילים מדויק (BM25/sparse).
כלל אצבע: אם המסמכים שלכם מכילים מספרי טופס, קודי מוצר, או מזהים ייחודיים — hybrid search חובה. אם המסמכים בעיקר נרטיביים — חיפוש וקטורי בלבד עובד מעולה.
הבעיה הנפוצה ביותר במערכות RAG ארגוניות היא שלב האחזור — המערכת שולפת chunks לא רלוונטיים. זה קורה מכמה סיבות ויש לכל אחת פתרון.
בעיה: chunks גדולים מדי או קטנים מדי. פתרון: נסו כמה גדלים. רוב הצוותים מתחילים עם 800 תווים וchunk_overlap של 150. אם התשובות חלקיות — הגדילו. אם התשובות "מרוחבות" ולא ממוקדות — הקטינו.
בעיה: חיפוש שמחזיר chunks דומים מאוד אחד לשני. פתרון: השתמשו ב-MMR (כמו בדוגמת הקוד למעלה) שמענישה כפילויות ומבטיחה גיוון בתוצאות.
בעיה: מסמכים בעברית מקבלים embedding פחות מדויק. פתרון: שקלו להוסיף שלב תרגום — תרגמו את ה-query לאנגלית, חפשו, ותרגמו את התשובה חזרה. זה מוסיף latency אבל משפר דיוק בצורה משמעותית.
בלי מדידה, אתם עיוורים. הנה שלושה מדדים שכל מערכת RAG חייבת לעקוב אחריהם:
Retrieval Precision: מתוך ה-chunks שנשלפו, כמה באמת רלוונטיים? כדאי לשאוף ל-80% ומעלה. פריימוורק כמו RAGAS מאפשר למדוד את זה אוטומטית.
Answer Faithfulness: האם התשובה שהמודל ייצר נאמנה למה שכתוב ב-chunks? או שהוא "המציא" פרטים? גם את זה RAGAS מודד.
Answer Relevancy: האם התשובה עונה על מה שנשאל? לפעמים התשובה נאמנה למסמכים אבל לא עונה על השאלה.
הנה סקריפט בסיסי להערכה עם RAGAS:
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
context_recall
)
from datasets import Dataset
# הכנת סט בדיקה — 20-50 שאלות ידועות עם תשובות צפויות
eval_data = {
"question": [
"מה מדיניות החופשה השנתית?",
"איך מגישים בקשה לרכש?",
"מי אחראי על אבטחת מידע?"
],
"answer": [results_from_rag], # תשובות שה-RAG ייצר
"contexts": [retrieved_chunks], # ה-chunks שנשלפו
"ground_truth": [
"כל עובד זכאי ל-12 ימי חופשה בשנה...",
"בקשת רכש מוגשת דרך מערכת SAP...",
"ה-CISO של החברה הוא..."
]
}
dataset = Dataset.from_dict(eval_data)
results = evaluate(
dataset,
metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)
print(results)
שורה תחתונה לפועלים: בנו סט בדיקה של 30-50 שאלות שאנשי הארגון שואלים באמת, עם תשובות ידועות. הריצו את ה-RAG עליהן פעם בשבוע. אם הציון יורד — משהו השתנה במסמכים או ב-pipeline, וצריך לטפל.
ברגע שהמערכת מחוברת למסמכים ארגוניים, אבטחה הופכת לנושא מרכזי. שלושה עקרונות חובה:
הרשאות ברמת מסמך: לא כל עובד צריך לגשת לכל מסמך. ה-metadata של כל chunk חייב לכלול הרשאות, והמערכת צריכה לסנן תוצאות לפי הרשאות המשתמש. אחרת, שאלה תמימה של עובד זוטר יכולה לחשוף מסמכי שכר של הנהלה.
הרצה לוקאלית: אם המידע רגיש, שקלו להריץ גם את ה-LLM לוקאלית. מודלים כמו Llama 3, Mistral, או Phi-3 רצים על שרת עם GPU אחד ומספקים תוצאות מצוינות. Ollama מפשט את ההרצה המקומית:
# התקנת Ollama והורדת מודל
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3:8b
# בדיקה מהירה
ollama run llama3:8b "מה ההבדל בין RAG ל-fine-tuning?"
# שרת API לוקאלי — תואם OpenAI API
# מאפשר להחליף OpenAI ב-LangChain בשורה אחת
OLLAMA_HOST=0.0.0.0 ollama serve
לוגים ו-audit: תעדו כל שאילתה, כל chunk שנשלף, וכל תשובה. זה קריטי גם ל-debugging וגם לציות רגולטורי. בארגונים ישראליים שכפופים לתקנות הגנת הפרטיות — זה לא אופציונלי.
מערכת RAG היא לא "בנה ושכח". המסמכים הארגוניים משתנים, ומאגר הווקטורים צריך להתעדכן בהתאם. הנה תהליך מינימלי:
עדכון יומי אוטומטי: סקריפט שרץ כל לילה, בודק אילו מסמכים השתנו (לפי תאריך שינוי או hash), מוחק את ה-chunks הישנים ומכניס חדשים. אפשר לחבר לכל מערכת ניהול מסמכים — SharePoint, Confluence, Google Drive.
ניקוי מסמכים מיושנים: הגדירו מדיניות TTL (Time to Live) ל-chunks. מסמך מלפני שלוש שנים שלא עודכן — כנראה לא רלוונטי. סמנו אותו כ-deprecated במקום למחוק — ככה אפשר לשחזר אם צריך.
פידבק מהמשתמשים: הוסיפו כפתור "התשובה לא מדויקה" בממשק. כל דיווח כזה הוא זהב — הוא מלמד אתכם איפה המערכת נכשלת ומאיפה חסרים מסמכים.
לפי סקרים בתעשייה מהתקופה האחרונה, ארגונים שמטמיעים RAG עם תהליך תחזוקה שוטף רואים שיפור של 40-60% בשביעות רצון המשתמשים בהשוואה למערכות סטטיות. זה לא מפתיע — ידע מעודכן שווה תשובות מדויקות.
RAG הוא הדרך הפרקטית ביותר להפוך מודל שפה גנרי למומחה ידע ארגוני. הוא לא דורש אימון מחדש, מתעדכן בזמן אמת, ואפשר לבנות מערכת עובדת ביום עבודה אחד. אבל כדי שהמערכת תעבוד באמת בפרודקשן — צריך להשקיע בחלוקה חכמה של מסמכים, בחירת vector database נכונה, מדידה שיטתית, ותהליך תחזוקה שוטף.
עודכן: 2026-09-07
RAG שולף מידע ממסמכים בזמן אמת ומזריק אותו ל-prompt — מתאים לידע שמשתנה לעיתים קרובות וצריך להיות מעודכן. Fine-tuning משנה את המשקולות של המודל עצמו — מתאים כשרוצים לשנות סגנון, פורמט, או ללמד את המודל דומיין מאוד ספציפי. בפרקטיקה, רוב הארגונים מתחילים עם RAG כי הוא מהיר להטמעה, לא דורש GPU לאימון, והידע מתעדכן מיידית.
כן, אבל עם סייגים. מודלי embedding כמו text-embedding-3-small של OpenAI מטפלים בעברית בצורה סבירה. מודלים רב-לשוניים כמו BGE-M3 ו-multilingual-e5-large גם עובדים. הביצועים בעברית עדיין נמוכים מאנגלית — בפרט עם כתיב חסר ניקוד. טיפ: אם הדיוק לא מספק, הוסיפו שלב query translation — תרגמו את השאלה לאנגלית, חפשו, ותחזירו תשובה בעברית.
תיאורטית — אין גבול. מעשית, ChromaDB מתאים עד מאות אלפי chunks. Pinecone ו-Qdrant מטפלים במיליונים. ארגון ישראלי טיפוסי עם כמה אלפי מסמכים ייצר בין 50,000 ל-200,000 chunks — כל אחד מהפתרונות מטפל בזה בקלות. הצוואר בקבוק הוא לא גודל המאגר אלא איכות ה-chunking וה-metadata.
הפער גדול מאוד. פתרון מלא בענן עם OpenAI embedding + GPT-4o + Pinecone יכול לעלות 500-2,000 דולר לחודש עבור ארגון בינוני (תלוי בנפח שאילתות). פתרון לוקאלי עם Ollama + Llama 3 + ChromaDB על שרת עם GPU — עלות חד-פעמית של חומרה ואפס עלות שוטפת. רוב הארגונים מתחילים עם API של OpenAI ועוברים ל-self-hosted כשהנפח גדל.
RAG מפחית הזיות בצורה משמעותית אבל לא מבטל אותן לגמרי. חמישה צעדים שעוזרים: (1) prompt מפורש שמורה למודל לענות רק על סמך ה-context, (2) temperature נמוך (0.0-0.2), (3) הצגת מקורות למשתמש כדי שיוכל לאמת, (4) שימוש ב-guardrails — בדיקה אוטומטית שהתשובה נתמכת ב-chunks, (5) מדידה עם RAGAS faithfulness metric ושיפור מתמיד.
בהחלט. LangChain הוא נוח אבל לא חובה. LlamaIndex הוא אלטרנטיבה מצוינת שמתמחה ספציפית ב-RAG ופחות "כבדה". ואפשר לבנות הכול מאפס עם קריאות ישירות ל-OpenAI API ו-ChromaDB — מדובר בפחות מ-100 שורות קוד. היתרון של בנייה ידנית: שליטה מלאה, בלי "קסם שחור". החיסרון: יותר קוד תחזוקה.
אל תבנו מערכת שלמה. תתחילו ב-POC ממוקד: בחרו תיקיית מסמכים אחת (למשל, נהלי HR או תיעוד מוצר), הריצו את הקוד שבמאמר הזה, ותראו תוצאות תוך שעות. אם זה עובד על 50 מסמכים — זה יעבוד על 5,000. הציגו את ה-POC להנהלה עם דוגמאות של שאלות אמיתיות שהמערכת ענתה עליהן. שום PowerPoint לא שכנע כמו דמו חי.
הגעתם עד לכאן — מה שאומר שהנושא באמת מעניין אתכם. וזה המקום שבו אנחנו נכנסים לתמונה. בניית מערכת RAG שעובדת ב-POC זה כיף. בניית מערכת שעומדת בפרודקשן ארגוני, עם אבטחה, סקיילינג, תחזוקה וניטור — זו מלאכה אחרת לגמרי. אם אתם רוצים להעמיק, באתר rt-ed.co.il תמצאו מדריכים נוספים על LLM, ארכיטקטורת AI ופיתוח מערכות חכמות — כתובים על ידי אנשים שבונים את הדברים האלה ביום יום. הדלת פתוחה.
קורסים: מסלול קורס AI Engineer המעניק הבנה מעמיקה בבנייה ואימון של מודלים למידת מכונה ולמידה עמוקה (Deep Learning), עבודה עם ארכיטקטורות Transformer, פיתוח אפליקציות מבוססות LLM (כמו RAG ו-Agents), ופריסת מודלים בסביבות ייצור (MLOps).
בלוגים / פורומים: Hugging Face Blog, Distill.pub, OpenAI Research, Towards Data Science (Medium), Reddit (r/MachineLearning, r/LocalLLaMA).
ספרים: Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow (של Aurélien Géron), Designing Machine Learning Systems (של Chip Huyen).