הבנת הקשר היא חיונית לבניית יישומי AI שבאמת עובדים. פרק זה מכסה את כל מה שאתם צריכים לדעת על מתן המידע הנכון ל-AI בזמן הנכון.

<Callout type="info" title="למה הקשר חשוב">
מודלי AI הם חסרי מצב (stateless). הם לא זוכרים שיחות קודמות. בכל פעם שאתם שולחים הודעה, אתם צריכים לכלול את כל מה שה-AI צריך לדעת. זה נקרא "הנדסת הקשר" (context engineering).
</Callout>

## מהו הקשר?

הקשר הוא כל המידע שאתם מספקים ל-AI לצד השאלה שלכם. חשבו על זה כך:

<Compare 
  before={{ label: "ללא הקשר", content: "מה הסטטוס?" }}
  after={{ label: "עם הקשר", content: "אתה עוזר לניהול פרויקטים. המשתמש עובד על פרויקט אלפא, שמועד ההגשה שלו הוא יום שישי. העדכון האחרון היה: 'Backend הושלם, frontend 80% מוכן.'\n\nמשתמש: מה הסטטוס?" }}
/>

ללא הקשר, ל-AI אין מושג על איזה "סטטוס" אתם שואלים. עם הקשר, הוא יכול לתת תשובה שימושית.

### חלון ההקשר

זכרו מפרקים קודמים: ל-AI יש "חלון הקשר" מוגבל - כמות הטקסט המקסימלית שהוא יכול לראות בבת אחת. זה כולל:

<InfoGrid items={[
  { label: "System Prompt", description: "הוראות שמגדירות את התנהגות ה-AI", color: "purple" },
  { label: "היסטוריית שיחה", description: "הודעות קודמות בצ'אט זה", color: "blue" },
  { label: "מידע מאוחזר", description: "מסמכים, נתונים או ידע שנשלפו עבור שאילתה זו", color: "green" },
  { label: "שאילתה נוכחית", description: "השאלה בפועל של המשתמש", color: "amber" },
  { label: "תשובת AI", description: "התשובה (גם היא נספרת למגבלה!)", color: "rose" },
]} />

## AI הוא חסר מצב

<Callout type="warning" title="מושג חשוב">
AI לא זוכר שום דבר בין שיחות. כל קריאת API מתחילה מחדש. אם אתם רוצים שה-AI "יזכור" משהו, אתם חייבים לכלול את זה בהקשר בכל פעם.
</Callout>

זו הסיבה שצ'אטבוטים שולחים את כל היסטוריית השיחה שלכם עם כל הודעה. זה לא שה-AI זוכר - זה שהאפליקציה שולחת מחדש את הכל.

<TryIt compact prompt={`העמידו פנים שזו שיחה חדשה ללא היסטוריה.

על מה שאלתי אותך הרגע?`} />

ה-AI יגיד שהוא לא יודע כי באמת אין לו גישה לשום הקשר קודם.

## RAG: יצירה מועצמת באחזור

RAG היא טכניקה למתן גישה ל-AI לידע שהוא לא אומן עליו. במקום לנסות להכניס הכל לאימון של ה-AI, אתם:

1. **מאחסנים** את המסמכים שלכם במסד נתונים ניתן לחיפוש
2. **מחפשים** מסמכים רלוונטיים כשמשתמש שואל שאלה
3. **מאחזרים** את החלקים הרלוונטיים ביותר
4. **מעצימים** את הפרומפט שלכם עם החלקים האלה
5. **מייצרים** תשובה באמצעות ההקשר הזה

<div className="my-6 p-4 border rounded-lg bg-muted/30">
  <p className="font-semibold mb-3">איך RAG עובד:</p>
  <div className="flex flex-col gap-2 text-sm">
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">1</span>
      <span>משתמש שואל: "מהי מדיניות ההחזרות שלנו?"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">2</span>
      <span>המערכת מחפשת במסמכים שלכם "מדיניות החזרות"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">3</span>
      <span>מוצאת קטע רלוונטי ממסמך המדיניות שלכם</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-blue-100 dark:bg-blue-900 flex items-center justify-center text-blue-600 font-bold">4</span>
      <span>שולחת ל-AI: "בהתבסס על מדיניות זו: [טקסט], ענה: מהי מדיניות ההחזרות שלנו?"</span>
    </div>
    <div className="flex items-center gap-3">
      <span className="w-8 h-8 rounded-full bg-green-100 dark:bg-green-900 flex items-center justify-center text-green-600 font-bold">5</span>
      <span>AI מייצר תשובה מדויקת באמצעות המדיניות האמיתית שלכם</span>
    </div>
  </div>
</div>

### למה RAG?

<div className="my-6 grid md:grid-cols-2 gap-4">
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-green-600 dark:text-green-400 mb-2 flex items-center gap-2"><IconCheck className="text-green-600" /> יתרונות RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>משתמש בנתונים האמיתיים והעדכניים שלכם</li>
      <li>מפחית הזיות</li>
      <li>יכול לצטט מקורות</li>
      <li>קל לעדכון (פשוט עדכנו מסמכים)</li>
      <li>לא צריך fine-tuning יקר</li>
    </ul>
  </div>
  <div className="p-4 border rounded-lg">
    <p className="font-semibold text-amber-600 dark:text-amber-400 mb-2 flex items-center gap-2"><IconLightbulb className="text-amber-600" /> מתי להשתמש ב-RAG</p>
    <ul className="text-sm space-y-1 text-muted-foreground">
      <li>בוטים לתמיכת לקוחות</li>
      <li>חיפוש בתיעוד</li>
      <li>בסיסי ידע פנימיים</li>
      <li>כל שאלה ותשובה בתחום ספציפי</li>
      <li>כשדיוק חשוב</li>
    </ul>
  </div>
</div>

## Embeddings: איך החיפוש עובד

איך RAG יודע אילו מסמכים "רלוונטיים"? הוא משתמש ב-**embeddings** - דרך להפוך טקסט למספרים שלוכדים משמעות.

### מה הם Embeddings?

embedding הוא רשימת מספרים ("וקטור") שמייצגת את המשמעות של טקסט. משמעויות דומות = מספרים דומים.

<EmbeddingsDemo />

### חיפוש סמנטי

עם embeddings, אתם יכולים לחפש לפי משמעות, לא רק מילות מפתח:

<Compare 
  before={{ label: "חיפוש מילות מפתח", content: "שאילתה: 'מדיניות החזרות'\nמוצא: מסמכים שמכילים 'החזרות' ו'מדיניות'\nמפספס: 'איך לקבל החזר כספי'" }}
  after={{ label: "חיפוש סמנטי", content: "שאילתה: 'מדיניות החזרות'\nמוצא: כל המסמכים הקשורים כולל:\n- 'הנחיות להחזרים'\n- 'איך לשלוח פריטים בחזרה'\n- 'אחריות להחזר כספי'" }}
/>

זו הסיבה ש-RAG כל כך חזק - הוא מוצא מידע רלוונטי גם כשהמילים המדויקות לא תואמות.

## קריאת פונקציות / שימוש בכלים

קריאת פונקציות מאפשרת ל-AI להשתמש בכלים חיצוניים - כמו חיפוש באינטרנט, בדיקה במסד נתונים, או קריאה ל-API.

<Callout type="tip" title="נקרא גם">
ספקי AI שונים קוראים לזה בשמות שונים: "function calling" (OpenAI), "tool use" (Anthropic/Claude), או "tools" (מונח כללי). כולם אומרים את אותו הדבר.
</Callout>

### איך זה עובד

1. אתם אומרים ל-AI אילו כלים זמינים
2. AI מחליט אם הוא צריך כלי כדי לענות
3. AI מוציא בקשה מובנית עבור הכלי
4. הקוד שלכם מריץ את הכלי ומחזיר תוצאות
5. AI משתמש בתוצאות כדי לגבש את התשובה שלו

<TryIt 
  title="דוגמה לקריאת פונקציה"
  description="פרומפט זה מראה איך AI מחליט להשתמש בכלי:"
  prompt={`יש לך גישה לכלים הבאים:

1. get_weather(city: string) - קבל מזג אוויר נוכחי לעיר
2. search_web(query: string) - חפש באינטרנט
3. calculate(expression: string) - בצע חישובים מתמטיים

משתמש: מה מזג האוויר בטוקיו עכשיו?

חשוב צעד אחר צעד: האם אתה צריך כלי? איזה? אילו פרמטרים?`}
/>

## סיכום: ניהול שיחות ארוכות

ככל שהשיחות מתארכות, תגיעו למגבלת חלון ההקשר. מכיוון ש-AI הוא חסר מצב (הוא לא זוכר כלום), שיחות ארוכות יכולות לגלוש. הפתרון? **סיכום**.

### הבעיה

<Compare 
  before={{ label: "ללא סיכום", content: "הודעה 1 (500 tokens)\nהודעה 2 (800 tokens)\nהודעה 3 (600 tokens)\n... עוד 50 הודעות ...\n────────────────────\n= 40,000+ tokens\n= חריגה מהמגבלה!" }}
  after={{ label: "עם סיכום", content: "[סיכום]: 200 tokens\nהודעות אחרונות: 2,000 tokens\nשאילתה נוכחית: 100 tokens\n────────────────────\n= 2,300 tokens\n= מתאים בדיוק!" }}
/>

### אסטרטגיות סיכום

גישות שונות עובדות למקרי שימוש שונים. לחצו על כל אסטרטגיה כדי לראות איך היא מעבדת את אותה שיחה:

<SummarizationDemo />

### מה ללכוד בסיכומים

סיכום שיחה טוב משמר את מה שחשוב:

<Checklist 
  title="רשימת תיוג לסיכום"
  items={[
    { text: "החלטות מפתח שהתקבלו" },
    { text: "עובדות חשובות שהוזכרו" },
    { text: "העדפות משתמש שהתגלו" },
    { text: "המשימה או המטרה הנוכחית" },
    { text: "שאלות פתוחות" },
    { text: "רמת הטון והפורמליות" }
  ]}
/>

### נסו: צרו סיכום

<TryIt 
  title="מסכם שיחות"
  description="תרגלו יצירת סיכום שמשמר הקשר מהשיחה הזו:"
  prompt={`סכמו את השיחה הזו לצורך ניהול הקשר. הסיכום יחליף את השיחה המלאה בזיכרון של ה-AI.

שיחה:
משתמש: היי, אני לומד Python לניתוח נתונים
עוזר: ברוכים הבאים! Python מצוין לניתוח נתונים. מה רמת הניסיון הנוכחית שלך?
משתמש: אני מכיר Excel בסיסי. מתחיל לגמרי בתכנות.
עוזר: נקודת התחלה מושלמת! בואו נתחיל עם משתנים - הם כמו תאי Excel ששומרים נתונים.
משתמש: אתה יכול להסביר משתנים?
עוזר: משתנים הם מכולות לאחסון נתונים. ב-Python: name = "Alice" או age = 25
משתמש: מה עם רשימות? אני צריך לטפל במספר ערכים.
עוזר: רשימות הן כמו עמודות Excel! צרו אחת כך: prices = [10, 20, 30]. גשו לפריטים עם prices[0].
משתמש: אני יכול לעשות חישובים על רשימות?
עוזר: כן! השתמשו ב-sum(prices), len(prices), או max(prices). לניתוח מורכב, נשתמש ב-pandas מאוחר יותר.
משתמש: מה זה pandas?
עוזר: Pandas היא ספרייה לניתוח נתונים - חשבו על "Excel על סטרואידים". יש לה DataFrames (כמו גיליונות).

צרו סיכום שלוכד:
1. מטרת המשתמש והרקע שלו (משפט אחד)
2. נושאים שכוסו עד כה (משפט אחד)
3. סגנון/העדפות הלמידה של המשתמש (משפט אחד)
4. מה לכסות הלאה (משפט אחד)`}
/>

### מתי לסכם

<TryIt compact prompt={`אתה מנהל את חלון ההקשר של שיחה. בהינתן התנאים הבאים, החלט מתי להפעיל סיכום:

חלון הקשר: מקסימום 8,000 tokens
שימוש נוכחי:
- System prompt: 500 tokens
- היסטוריית שיחה: 6,200 tokens
- מאגר לתשובה: 1,500 tokens

כללים:
- סכם כשהיסטוריה חורגת מ-70% מהמקום הזמין
- שמור על 5 ההודעות האחרונות שלמות
- שמר את כל העדפות והחלטות המשתמש

האם צריך לסכם עכשיו? אם כן, אילו הודעות צריך לסכם לעומת לשמור שלמות?`} />

## MCP: פרוטוקול הקשר למודל

MCP (Model Context Protocol) הוא דרך סטנדרטית לחבר AI לנתונים וכלים חיצוניים. במקום לבנות אינטגרציות מותאמות לכל ספק AI, MCP מספק ממשק אוניברסלי.

### למה MCP?

<InfoGrid columns={2} items={[
  { label: "ללא MCP", description: "בנו אינטגרציות נפרדות ל-ChatGPT, Claude, Gemini... תחזקו מספר בסיסי קוד. יישבר כש-APIs משתנים.", color: "red" },
  { label: "עם MCP", description: "בנו פעם אחת, עובד בכל מקום. פרוטוקול סטנדרטי. AI יכול לגלות ולהשתמש בכלים שלכם אוטומטית.", color: "green" },
]} />

### MCP מספק

- **Resources**: נתונים שה-AI יכול לקרוא (קבצים, רשומות במסד נתונים, תגובות API)
- **Tools**: פעולות שה-AI יכול לבצע (חיפוש, יצירה, עדכון, מחיקה)
- **Prompts**: תבניות פרומפט מוכנות מראש

<Callout type="info" title="prompts.chat משתמש ב-MCP">
לפלטפורמה הזו יש שרת MCP! אתם יכולים לחבר אותו ל-Claude Desktop או לקליינטים תואמי MCP אחרים כדי לחפש ולהשתמש בפרומפטים ישירות מעוזר ה-AI שלכם.
</Callout>

## בניית הקשר: התמונה המלאה

<ContextPlayground />

## שיטות עבודה מומלצות

<Checklist 
  title="רשימת תיוג להנדסת הקשר"
  items={[
    { text: "שמרו על system prompts תמציתיים אך מלאים" },
    { text: "כללו רק הקשר רלוונטי (לא הכל)" },
    { text: "סכמו שיחות ארוכות" },
    { text: "השתמשו ב-RAG לידע ספציפי לתחום" },
    { text: "תנו ל-AI כלים לנתונים בזמן אמת" },
    { text: "עקבו אחר שימוש ב-tokens כדי להישאר במגבלות" },
    { text: "בדקו עם מקרי קצה (קלטים ארוכים מאוד, וכו')" }
  ]}
/>

## סיכום

הנדסת הקשר עוסקת במתן המידע הנכון ל-AI:

- **AI הוא חסר מצב** - כללו את כל מה שהוא צריך בכל פעם
- **RAG** מאחזר מסמכים רלוונטיים להעצמת פרומפטים
- **Embeddings** מאפשרים חיפוש סמנטי (משמעות, לא רק מילות מפתח)
- **קריאת פונקציות** מאפשרת ל-AI להשתמש בכלים חיצוניים
- **סיכום** מנהל שיחות ארוכות
- **MCP** מתקנן איך AI מתחבר לנתונים וכלים

<Callout type="tip" title="זכרו">
איכות הפלט של AI תלויה באיכות ההקשר שאתם מספקים. הקשר טוב יותר = תשובות טובות יותר.
</Callout>
