רוב האנשים יודעים לתת פרומפטים ל-LLM. לבנות אחד בתוך מוצר שעומד בתעבורה אמיתית זה משחק אחר לגמרי. אם אתם רוצים לעבור מהקלדה בחלון צ'אט להשקת AI ב-production, אתם צריכים להבין איך הסטאק באמת מתחבר. זה לא קסם. זה צינור (pipeline) של בעיות הנדסיות נפרדות, ולכל שכבה יש את מצבי הכשל שלה.
תנו לי להסביר לכם איך מערכת AI מודרנית עובדת, מהרגע שבו אתם מקלידים מילה ועד לרגע שבו סוכן (agent) משלים משימה.
הבסיס: איך מודלים חושבים
בבסיסו, מודל שפה גדול עושה דבר אחד בדיוק: הוא חוזה את ה-token הבא. ה-token הזה יכול להיות המילה הבאה, חלק ממילה, או אפילו סמל. כל השאר — שירה, קוד, הסקה (reasoning) — הם התנהגות מגיחה (emergent behavior) מביצוע המשימה הבודדת הזו בקנה מידה רחב.
המסע מהפרומפט שלכם לתגובת המודל נראה כך.
Tokenization היא השלב הראשון. טקסט גולמי הוא חסר משמעות עבור רשת עצבית, לכן המודל מפרק את המילים שלכם לחלקים וממפה כל חלק למספר. המילה "tokenization" עשויה להפוך לשלושה tokens נפרדים. הביטוי "New York" עשוי להיות אחד או שניים, תלוי באוצר המילים (vocabulary). המספרים הללו אינם שרירותיים; הם מגיעים מתוך מילון קבוע שהמודל למד במהלך האימון.
ברגע שהמילים הופכות למספרים, הן זקוקות למשמעות. Embeddings הופכים את המספרים הללו לווקטורים — רשימות ארוכות של ערכי floating-point שמציבים מושגים דומים קרוב זה לזה במרחב המתמטי. "King" ו-"Queen" ימוקמו קרוב זה לזה. "Paris" ו-"Berlin" יתקבצו יחד אך בשכונה שונה מ-"Python" או "JavaScript".
אך וקטורים לבדם מאבדים את הסדר. Positional encoding אומר למודל היכן כל token ממוקם במשפט. בלעדיו, "The dog bit the man" ו-"The man bit the dog" היו נראים זהים.
ואז מגיע מנגנון ה-attention. כאן המודל סורק את כל ה-tokens בקלט ומחליט אילו מהם חשובים לחיזוי הבא. כשאתם שואלים, "When was the company founded, and who leads it now?", המודל צריך לקשר את "founded" לתאריך ואת "leads" לשם של מנכ"ל. ה-attention יוצר את הקשרים הללו.
הפעולות הללו נערמות בתוך layers — לעיתים עשרות כאלו — שבהן השכבות המוקדמות מטפלות בתחביר (syntax) והמאוחרות יותר בונות הסקה מופשטת. אי שם באמצע, feed-forward networks שומרות אסוציאציות עובדתיות. כאן המודל שומר את הידע שפריז היא בירת צרפת, או ש-API מסוים מצפה ל-JSON payload. זה לא מסד נתונים, בדיוק לא, אלא רשת דחוסה של משקלים (weights) שמפעילה תבניות.
לבסוף, decoding הופך את ייצוגי הווקטור הפנימיים בחזרה ל-tokens שניתן לקרוא אותם. המודל לא "יודע" שהוא כותב באנגלית; הוא פשוט מדרג אלפי tokens אפשריים הבאים ובוחר את הסביר ביותר, שוב ושוב, עד שהוא מגיע לתנאי עצירה.
שכבת ה-RAG: להעניק למודלים זיכרון
מודל בסיס הוא קפוא בזמן. המשקלים שלו לוכדים את האינטרנט עד לתאריך חיתוך מסוים, והוא לא יכול לגשת למסמכים הפרטיים שלכם אלא אם תזינו אותם פנימה. זה הופך אותו לחסר תועלת עבור רוב המשימות העסקיות. Retrieval-Augmented Generation, או RAG, פותר זאת על ידי מתן ספרייה חיצונית שהמודל יכול להתייעץ איתה לפני שהוא עונה.
ההגדרה פשוטה מבחינה קונספטואלית אך רגישה ומורכבת בפועל. ראשית, אתם לוקחים את המסמכים שלכם ומיישמים chunking. אתם לא זורקים קובץ PDF בן מאה עמודים לחלון הפרומפט. אתם מפצלים אותו לפסקאות, סעיפים או בלוקים סמנטיים קטנים מספיק כדי להיכנס למגבלת ההקשר (context limit) של המודל תוך שמירה על המשמעות.
כל chunk עובר דרך embedding model והופך לווקטור, בדיוק כמו ה-tokens בתוך ה-LLM. הווקטורים הללו חיים בתוך vector database — מאגר ייעודי שנועד לחיפוש דמיון (similarity search) ולא לשליפה מדויקת. כשמשתמש שואל שאלה, אתם מבצעים embedding לשאילתה שלו ושואלים את מסד הנתונים: "אילו chunks נמצאים הכי קרוב לווקטור הזה מבחינת משמעות?"
חיפוש וקטורי גולמי לבדו מפספס לעיתים קרובות התאמות מדויקות. מערכת production
RAG מאפשר למודל לקרוא. סוכנים (Agents) מאפשרים לו לפעול.
סוכן הוא ביסודו LLM שכלוא בתוך לולאה. הוא צופה, מסיק, פועל, ואז צופה שוב. אם תבקשו מסוכן להזמין טיסה, הוא לא רק יתאר איך תהליך ההזמנה עובד. הוא מפרק את המשימה לשלבים, קורא לפונקציות המתאימות, קורא את התגובות ומתאים את עצמו.
הלולאה נראית כך. צפייה (Observe): הסוכן קורא את המצב הנוכחי — הבקשה שלכם, התוצאות של קריאות כלים קודמות, או כל שגיאה. הסקה (Reason): ה-LLM מחליט מה לעשות בהמשך, לעיתים קרובות על ידי יצירת תוכנית מובנית או בחירה מתוך אפשרויות מוגדרות מראש. פעולה (Act): הוא קורא לכלי.
כלים הם הדרך שבה סוכנים נוגעים בעולם האמיתי. הם מוגדרים באמצעות JSON schemas שאומרים למודל בדיוק אילו פרמטרים API צריך. ה-LLM לא מבצע בקשות HTTP שרירותיות. הוא ממלא סכימה. "קרא ל-weather API עם city: London ו-units: metric". אם הכלי מחזיר טמפרטורה, הסוכן מזין
