שלום,
נראה שכבר הכרתם את אאוריקה. בטח כבר גיליתם כאן דברים מדהימים, אולי כבר שאלתם שאלות וקיבלתם תשובות טובות.
נשמח לראות משהו מכם בספר האורחים שלנו: איזו מילה טובה, חוות דעת, עצה חכמה לשיפור או כל מה שיש לכם לספר לנו על אאוריקה, כפי שאתם חווים אותה.
»
«
מה זה RAG בבינה מלאכותית?
בעולם הבינה המלאכותית מדברים יותר ויותר על RAG. אבל מה זה RAG בעצם?
אז RAG, ראשי תיבות של Retrieval-Augmented Generation, היא טכניקה המאפשרת למודלי AI גישה למאגרי מידע ובסיסי נתונים, בכדי לשלוף מהם מידע רלוונטי ונכון. הם עושים את זה כדי לייצר תשובות מדויקות ומבוססות נתונים עדכניים ואמיתיים.
בניגוד לאלטרנטיבה של בזבוז משאבים יקרים על אימון מטורף ויקר של מודל שפה, כך שיהיה תמיד מעודכן וברמות הכי גבוהות, RAG מאפשר למודל AI לענות ככזה, מבלי שיצטרכו מאמניו לעשות בו את כל העבודה.
כי מודלי שפה גדולים דוגמת GPT או Claude הם מרשימים ביכולתם לג'נרט תשובות מדויקות וטקסטים משכנעים, אך הם סובלים ממגבלה ברורה - הם יודעים רק את מה שלמדו בתקופת האימון שלהם. הידע שלהם "קפא" בזמן למועד ולהיקף האימון שלהם.
מה שעוד יותר מביך הוא שהם כמעט ולא יודעים לומר שאינם יודעים. לעתים, כשאין להם תשובה מדויקת, הם עונים או מייצרים מידע שגוי המתחזה לנכון - תופעה שאנו מכנים "הזיות", או בעגה המקצועית "הלוצינציות" (hallucinations), מונח טכני המתאר יצירת מידע שאינו מבוסס עובדות.
#יתרונות
RAG היא טכנולוגיה שמבטיחה שהתשובות יהיו לא רק חכמות, אלא גם נכונות. מעבר לחיסכון האדיר והברור בעלויות, לעומת בזבוז משאבים על אימון המודלים לעדכנות בזמן אמת, היתרונות של RAG לעומת מודל שפה סטנדרטי הם ברורים:
עדכניות בזמן אמת - גישה למידע חדש שלא היה קיים בזמן אימון המודל.
דיוק ואמינות - צמצום משמעותי של "הזיות".
שקיפות המקורות - אפשרות להציג למשתמש את מקורות המידע.
התאמה אישית וגמישות - יכולת להשיג ולהזין מידע ספציפי לתחום או לארגון המשתמש במודל.
בכל אלה RAG מסמן את כיוון ההתפתחות של מערכות בינה מלאכותית חכמות, מדויקות ואמינות יותר - מערכות המשלבות את היצירתיות של מודלי שפה עם הדיוק של מידע עובדתי ונכון לעכשיו ובזמינות של 24/7.
#אז איך עובד RAG?
דמיינו ספרן וירטואלי שעומד לצד מודל AI ומספק לו את המסמכים הרלוונטיים והמעודכנים בדיוק ברגע שהוא נזקק להם. זוהי מהותה של טכנולוגיית RAG - היא יודעת ומביאה את המידע המעודכן והמדויק לכל שאלה שנשאל מודל הבינה המלאכותית ומאפשרת לו לדייק בתשובותיו, גם בשאלות שלא עוסקות במידע שעליו הוא מאומן ומעודכן.
טכנית, RAG פותר את הבעיה בתהליך מובנה של שלושה שלבים:
1. קבלת השאלה מהמודל על ידי מערכת ה-RAG.
2. שליפה (Retrieval) - סריקת מסמכים פנימיים או דוחות פנימיים של הארגון או של מאגרי המידע החיצוניים והרלוונטיים על ידי מנגנון האחזור, זיהוי המידע הנדרש באתרים, מסמכים, או בסיסי נתונים ארגוניים והעברתו למודל.
3. יצירה (Generation) - שילוב המידע שנאסף עם הידע הכללי של מודל השפה לכדי תשובה קוהרנטית, כלומר הגיונית ומושלמת, בצורה של שיחה טבעית.
#דוגמאות
בארגון פיננסי למשל, מערכת RAG יכולה לשלוף מידע מעודכן מדוחות רבעוניים, תקנות רגולטוריות חדשות ונתוני שוק בזמן אמת כדי לענות על שאלה ספציפית של משקיע.
בעסק או חברה מערכת RAG יכולה לשלוף מדוחות פנימיים של הארגון, ממאגרי התמיכה או המסמכים הפנימיים ולתת מענה מבוסס ללקוחות ולעובדים.
באוניברסיטאות החוקרים משתמשים ב-RAG כדי לאפשר למודלים לגשת למאמרים מדעיים עדכניים בתחום הרפואה, מה שמאפשר ייעוץ מבוסס על מחקרים חדשניים שלא היו זמינים בעת אימון המודל.
חברת רפואה יכולה להטמיע RAG כדי לספק מענה מדויק לשאלות על טיפולים חדשניים, תוך שילוב מחקרים עדכניים עם ידע רפואי מוסמך.
במערכת המשפט, RAG יכול לסייע בניתוח תקדימים משפטיים, תוך שליפת פסקי דין רלוונטיים וחוקים עדכניים לסוגיה ספציפית.
#האתגרים
ההטמעה של טכנולוגיות RAG היא לא פשוטה ואף מורכבת מבחינה טכנית, הן בבחירת אלגוריתם האחזור המתאים, דרך ניהול מאגרי מידע גדולים, תחזוקה של מידע עדכני, שאלות של פרטיות כשמדובר במסמכים רגישים ועוד.
כמו כן, גם איכות התשובות תלויה באיכות מקורות המידע, כאשר מהנדסי המידע זוכרים תמיד את העיקרון שתקף גם כאן - "זבל נכנס, זבל יוצא".
הנה ה-RAG בהסבר פשוט ומרהיב:
https://youtu.be/zX4cL6n5UzY
כך עושים את זה:
https://youtu.be/tKPSmn-urB4
והסבר חופר:
https://youtu.be/u47GtXwePms
מהם ומה עושים הפרמטרים במודלי AI?
פרמטרים בלמידת מכונה (Machine Learning parameters), אם רוצים להבין מהם, אז כדאי לחשוב עליהם בתור המשתנים שקובעים את איכות ה"חשיבה" של מודל AI.
תפקידי הפרמטרים במודל שפה הם להבין הקשרים מורכבים בשפה, לחזות את המילה הבאה ברצף הטקסט שמפיק המודל ובסופו של דבר להצליח לייצר טקסט קוהרנטי (הגיוני) ומשמעותי.
אגב, במקום במילים זכרו שהטקסטים נבנים באמצעות טוקנים - ראו בתגית "טוקנים".
אבל עכשיו, אחרי שהסברנו בפשטות, הבה נפרט יותר ונרד לאיך זה נעשה: פרמטרים הם שלוכדים את הקשרים הסטטיסטיים שבין מילים ומושגי שפה שנמצאו בנתוני האימון. אפשר לדמות אותם למעין "כפתורים" בתוך המודל, שניתן לכוונם בכדי לשפר את יכולת המודל לעבד ולייצר שפה אנושית ומרשימה כל כך.
דמיינו שהידע על השפה מזוקק לתוך הפרמטרים ואז, בדומה למערכת סאונד שבה טכנאי הקול מכוונן את הכפתורים כדי להשיג את איכות הצליל הטובה ביותר, מהנדסי ה-AI מכוונים את מיליארדי הפרמטרים כדי להגיע לאיכות הגבוהה ביותר של התוצרים שהמודל ייצר.
בעצם, פרמטרים במודלים של בינה מלאכותית הם בקרי הגדרות פנימיות במודל שניתן לכוון במהלך האימון ועל ידי כך לשפר את יכולתו לעבד ולייצר שפה, תשובות ותגובות טובים יותר.
כלומר, ככל שיש במודל שפה יותר פרמטרים, גדלה גם חוכמתו ויכולתו לעשות שימוש במגוון המידע שנאגר בו. באמצעות הפרמטרים שולטים המהנדסים ברמה בה מודל AI מבין ויוצר שפה.
במהלך האימון, ערכי הפרמטרים מכוונים ומתעדכנים כדי לקודד דפוסים ממערכי הנתונים העצומים עליהם מאומנים המודלים הללו. הפרמטרים לוכדים את הקשרים הסטטיסטיים בין מילים ומושגי שפה שנמצאו בנתוני האימון. עבודה טובה איתם מאפשרת חשיבה טובה ומורכבת יותר ושימוש יותר מוצלח בידע שהמודל צבר, מה שיאפשר תגובות ותוצרים מדויקים יותר.
אגב, מספר הפרמטרים משקף בדרך כלל את גודל המודל. מודלים גדולים יותר יכולים להבין או לתפוס מורכבויות רבות יותר של שפה. מצד שני, הם גם יקרים יותר להפעלה, דורשים כוח מחשוב רב יותר ויש להם השפעה סביבתית רבה יותר, שהיא המחיר שאנו משלמים על כל ה-AI הזה.
אבל חשוב להבין שמספר הפרמטרים אינו המדד היחידי ליעילות המודל. לא פחות חשובה היא איכות הנתונים שעליהם אומן המודל. מודל קטן יותר שאומן על נתונים איכותיים יותר עשוי לבצע את המשימות טוב יותר ממודל גדול יותר שאומן על נתונים פחות מוצלחים.
כלומר, חיבור של כמות הפרמטרים, לצד איכות האימון, רמת הדאטה שעליו אומן המודל והיעילות הכוללת שלו הם המפתח ליכולות של מודל שפה.
הנה הפרמטרים במודל AI ואיך הם משתלבים בתמונה הכללית:
https://youtu.be/mnqXgojQCJI
פרמטרים וטוקנים הם לא הכל במודלים:
https://youtu.be/a1nqXQMOCks
והפרמטרים כחלק מהבינה היוצרת בכללה:
https://youtu.be/r17HV0TzAWw?long=yes
מהם פרמטרים וארגומנטים בקוד התוכנה?
נהוג לומר שהשם הנרדף של "ארגומנטים" הוא "משתנים" או גם "פרמטרים".
אז באמת מתכנתים מבלבלים לא פעם בין פרמטרים וארגומנטים וזה בסדר, כי ההבדל ביניהם הוא בעיקרו סמנטי, עניין של הגדרה ולא של מהות שיכולה לפגוע בעבודה.
אבל בכל זאת... כשאנו מגדירים פונקציה, נרצה להגדיר לה את הנתונים שהיא תצפה לקבל בעת קריאה וזימון שלה.
#דוגמה
למשל כאן, ניתן לראות ש-x הוא פרמטר, בעוד ש-y הוא ארגומנט.
int f(struct S *x);
return f(&y);
#אז בהגדרה אלה יהיו פרמטרים.
כלומר, פרמטרים (משתנים) מתקבלים על ידי הפונקציה כשמגדירים אותה. כל ארגומנט מופיע בצורה של סוג (type) ואז שם. כך יהיו למשל ארגומנטים מסוג int שבהם יופיעו מספרים שלמים, מסוג double שיהיה בו מספר עשרוני, או String עם מחרוזת טקסט.
#בקריאה לפונקציה אלה ארגומנטים
כשאנו מריצים פונקציה, היא מבצעת פעולה מסוימת. אלא שלא תמיד נרצה שהיא תעשה בדיוק את אותה פעולה בדיוק, או עם אותם נתונים. כך למשל, אם נרצה להשתמש בפונקציה כמו printInBold, כדי להדגיש מחרוזת טקסט בכתב Bold, נרצה לספק בכל פעם מחרוזת טקסט אחרת. זה בדיוק מה שהארגומנט (Argument) מאפשר לנו. כשנקרא לפונקציה, נכניס באמצעותו משתנה לתוך הסוגריים שלה וכך היא תבצע את הפעולה על המשתנה הזה.
כמובן שלא רק מחרוזות יכולות להיכנס כארגומנטים. לארגומנטים ניתן להכניס גם משתנים, ספרות וכדומה.
ארגומנטים, אם כן, הם פרמטרים שפונקציה מצפה לקבל דה פקטו. באמצעות הקוד שתוכנת בה לביצוע היא תייצר את ה-return שלה ממנו, או תדפיס אותו בפקודת print לטרמינל.
#לכן תיאורטית...
ה"פרמטרים" שההגדרנו בפונקציה עצמה, אלה "פרמטרים פורמליים" (Formal Parameters). לעומתם, ה"פרמטרים" שנשלחים לפונקציה הקיימת, נקראים "פרמטרים אקטואליים" (Actual Parameters) והם הארגומנטים.
#ומעשית...
המונח "פרמטרים" יכול לשמש למעשה בכדי לתאר, גם את ה"פרמטרים" וגם את ה"ארגומנטים".
הנה ארגומנטים בפייתון:
https://youtu.be/tQ7it_vlptA
ופרמטרים וארגומנטים בשפת Javascript:
https://youtu.be/G4lZSWssoqA
מהי פונקציה בתכנות?
מכירים את זה שאתם עושים שוב ושוב, כל יום או כל כמה שעות את אותה פעולה וזה נראה לכם לא הגיוני?
גם מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם למשל משתמשים בלולאות (Loops). אבל יש מרכיב שחוסך עוד יותר עבודה וכתיבת קוד מיותר. כי מתכנתים אוהבים לשמור את הקוד שלהם DRY, קיצור של "don’t repeat yourself".
לרכיב מקצר העבודה הזה קוראים פונקציה (Function). הפונקציה היא פלא של ייעול. כל מטרתה היא "לקודד פעם אחת, להשתמש הרבה פעמים".
#אבל מהי פונקציה?
פונקציה היא קוד שמבצע פעולה. הרעיון בכתיבת פונקציה הוא לכתוב פעם אחת קוד והוא יחליף את הצורך לכתוב פעולות דומות שוב ושוב, במקומות שונים בתוכנה.
דמייני שאת מתכנתת פעם אחת קטע של קוד ואחרי כן קוראת לו בתוכנה, בכל פעם שצריך שהוא יבצע את תפקידו.
מדהים לא?
ואכן, פונקציה בתכנות היא מרכיב פשוט אבל משמעותי מאוד, המקל את הקידוד ואת הארגון הנכון של תכנית מחשב. כך הוא מקצר את הקוד, חוסך זמן ומקטין את האפשרויות לשגיאות.
כמו במכשיר מיקרוגל או במכונית, בפונקציה משתמשים בכל פעם שרוצים לבצע את הפעולה שהיא יודעת ותוכנתה לעשות. מכונית תסיע אותנו ומיקרו יחמם לנו או יפשיר את האוכל. כל אחד יודע כמה הם שיפרו את חיינו לעומת העולם שלפני המכונית או המיקרוגל.
במילים פשוטות, הפונקציה היא קטע קוד המבצע פעולה, Action כלשהי. המתכנתים כותבים את הפונקציה פעם אחת ויכולים לקרוא לה בקוד מתי שרק ירצו.
#שיטת התכנות של פונקציות
אז השיטה היא פשוטה - מגדירים ומשתמשים. כלומר, מתכנתים פונקציה ונותנים לה שם. מעתה נוכל להשתמש בה בקוד, כלומר לקרוא לה בכל פעם שנצטרך שהיא תבצע את תפקידה.
#איך פונקציה פועלת?
בקריאה לפונקציה, לעתים נצטרך לתת לה נתונים. בשביל זה לפונקציה יש סוגריים. בתוכן נצרף לה לעתים פרמטרים, כלומר נתונים מסויימים שבהם היא תשתמש כדי לחשב ולבצע את מה שהיא תוכנתה לעשות.
כשהפונקציה תסיים "לעבוד" (וזה יהיה מאוד מהיר כמובן) היא תחזיר את הפלט להמשך התכנית, או תבצע פעולה כמו הדפסה או הפעלה של פונקציות אחרות.
#דוגמה לפונקציות בחיים
נסביר את זה רגע בדימוי מהחיים: דמיינו שאתם בפסטיבל עם המון אנשים ואיבדתם את החברה שלכם. אתם ניגשים לבמה ומבקשים להכריז שאתם ממתינים לה. אומרים לכם לדבר עם שמעון, הכרוז של הפסטיבל. הוא בחור נחמד וענייני ומבקש מכם מידע, דאטה. במילים פשוטות - הוא שואל איך קוראים לה ומה שמכם. כשאתם נותנים את הפרטים הללו, שמעון ממהר להכריז במיקרופון "ברכה לוי, בואי ליד הבמה! יוסי ושרון ממתינים לך". דקות אחר כך ברכה מגיעה אליכם ליד הבמה.
סוף טוב הכל טוב!
כלומר, שמעון הוא פונקציה שיודעת להכריז על אבדות. הוא צריך פרמטרים, דאטה הכרחי שבדוגמה הזו הוא שם הגברת ושמות הממתינים לה. כשהוא מבצע את הפעולה שלו, המשימה מתבצעת. אם הוא היה מחזיר תשובה, כמו" ברכה כבר בבית" זה כנראה היה ארגומנט.
#יתרונות הפונקציה
פונקציה מקצרת את הקוד, חוסכת מאוד בזמן פיתוח ומונעת באגים. במילים פשוטות, הרעיון בפונקציה "קודד פעם אחת, השתמש הרבה פעמים!"
איך זה עובד?
דמיינו שהייתם צריכים גם לתקן בעצמכם את המכונית, גם להכין אוכל, גם לבנות את הבית שלכם, לטפל וללמד את הילדים, לתקן את החשמל, את הביוב וכל הדברים שצריך לעשות. אולי זה אפשרי אבל זה לא חכם, נכון?
קוד ללא פונקציות הוא כמו עולם בלי בעלי תפקידים שיודעים היטב כיצד למלא משימות מוגדרות, בלי אנשי מקצוע שהם מומחים בתפקידם ובלי מכשירים שעושים לנו את החיים קלים ונוחים.
זה עולם מסובך ומבולגן. המתכנתים קוראים לקוד כזה "קוד ספגטי". מרוב שהוא עמוס ומנוהל לא נכון, לא מוצאים בו את הידיים והרגליים...
חישבו על הפונקציה כסוג של מכונה, מתקן או חלק בקוד. כשנותנים להם סוג של אינפוט, מידע, הם יודעים לבצע במידע הזה משימה שהוגדרה להם מראש בתכנות.
פעולה כזו של פונקציה יכולה לפעמים לתת לנו משהו בחזרה, ערך או ערכים מוגדרים. ערך כזה בדוגמה שלנו הוא כמו תשובה ששמעון יכול לתת לנו, שברכה נמצאה וממתינה לנו במקום כלשהו.
לעתים פונקציה יכולה לשנות את הדאטה שנתנו לה ולפעמים לקבל החלטה על בסיס הדאטה הזה. בשפות מונחות עצמים יש בדרך כלל סוגריים אחרי שם הפונקציה. כשמכריזים על הפונקציה, כלומר כשמהמתכנתים מציגים אותה לראשונה, הם מגדירים שבסוגריים האלה יוכנס הדאטה לצורך הביצוע. בכך הם מגדירים באמצעות "פרמטרים" מה יהיה הדאטה המצופה, כדי שהפונקציה תעשה את תפקידה.
כשקוראים לפונקציה, זה כמו למלא טופס. לתוך הסוגריים, מכניסים את הפרמטרים, האינפוט, את המידע שהפונקציה רוצה (כמו ששמעון שואל "איך קוראים לילדה שנעלמה לכם?")
אחרי ביצוע הפעולה, הפונקציה תחזיר את הארגומנט. כלומר, את התוצאה או המידע שביקשנו ממנה לייצר מהפרמטרים שסיפקנו לה בקריאה.
בשפות תכנות נהוג שהסוגריים נכללות בפונקציה בכל מקרה, גם אם אין מידע, כלומר פרמטרים שהפונקציה דורשת כדי למלא את תפקידה, יהיו שם סוגריים ריקות.
ואגב, בשפות התכנות השונות יש פונקציות מובנות, שנכתבו מראש, ברמת השפה כולה. ניתן להשתמש בהן מראש, מבלי שהמתכנת יצטרך לפתח בעצמו או בעצמה פונקציות לדברים שמתכנתים צריכים הרבה. יש גם ספריות שלמות, שאותן תוכלו לייבא לקוד שלכם ולחסוך זמן פיתוח. הן כוללות פונקציות שימושיות, בתחום בו הספריה שימושית.
הנה סרטון שמסביר את הפונקציה בפשטות:
https://youtu.be/3JIZ40yuZL0?end=2m40s
הפונקציה לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/o0wyYsNbJeY
והסבר הפונקציות ב-javascript (עברית):
https://youtu.be/c7mqY6QtdQQ
פרמטרים

בעולם הבינה המלאכותית מדברים יותר ויותר על RAG. אבל מה זה RAG בעצם?
אז RAG, ראשי תיבות של Retrieval-Augmented Generation, היא טכניקה המאפשרת למודלי AI גישה למאגרי מידע ובסיסי נתונים, בכדי לשלוף מהם מידע רלוונטי ונכון. הם עושים את זה כדי לייצר תשובות מדויקות ומבוססות נתונים עדכניים ואמיתיים.
בניגוד לאלטרנטיבה של בזבוז משאבים יקרים על אימון מטורף ויקר של מודל שפה, כך שיהיה תמיד מעודכן וברמות הכי גבוהות, RAG מאפשר למודל AI לענות ככזה, מבלי שיצטרכו מאמניו לעשות בו את כל העבודה.
כי מודלי שפה גדולים דוגמת GPT או Claude הם מרשימים ביכולתם לג'נרט תשובות מדויקות וטקסטים משכנעים, אך הם סובלים ממגבלה ברורה - הם יודעים רק את מה שלמדו בתקופת האימון שלהם. הידע שלהם "קפא" בזמן למועד ולהיקף האימון שלהם.
מה שעוד יותר מביך הוא שהם כמעט ולא יודעים לומר שאינם יודעים. לעתים, כשאין להם תשובה מדויקת, הם עונים או מייצרים מידע שגוי המתחזה לנכון - תופעה שאנו מכנים "הזיות", או בעגה המקצועית "הלוצינציות" (hallucinations), מונח טכני המתאר יצירת מידע שאינו מבוסס עובדות.
#יתרונות
RAG היא טכנולוגיה שמבטיחה שהתשובות יהיו לא רק חכמות, אלא גם נכונות. מעבר לחיסכון האדיר והברור בעלויות, לעומת בזבוז משאבים על אימון המודלים לעדכנות בזמן אמת, היתרונות של RAG לעומת מודל שפה סטנדרטי הם ברורים:
עדכניות בזמן אמת - גישה למידע חדש שלא היה קיים בזמן אימון המודל.
דיוק ואמינות - צמצום משמעותי של "הזיות".
שקיפות המקורות - אפשרות להציג למשתמש את מקורות המידע.
התאמה אישית וגמישות - יכולת להשיג ולהזין מידע ספציפי לתחום או לארגון המשתמש במודל.
בכל אלה RAG מסמן את כיוון ההתפתחות של מערכות בינה מלאכותית חכמות, מדויקות ואמינות יותר - מערכות המשלבות את היצירתיות של מודלי שפה עם הדיוק של מידע עובדתי ונכון לעכשיו ובזמינות של 24/7.
#אז איך עובד RAG?
דמיינו ספרן וירטואלי שעומד לצד מודל AI ומספק לו את המסמכים הרלוונטיים והמעודכנים בדיוק ברגע שהוא נזקק להם. זוהי מהותה של טכנולוגיית RAG - היא יודעת ומביאה את המידע המעודכן והמדויק לכל שאלה שנשאל מודל הבינה המלאכותית ומאפשרת לו לדייק בתשובותיו, גם בשאלות שלא עוסקות במידע שעליו הוא מאומן ומעודכן.
טכנית, RAG פותר את הבעיה בתהליך מובנה של שלושה שלבים:
1. קבלת השאלה מהמודל על ידי מערכת ה-RAG.
2. שליפה (Retrieval) - סריקת מסמכים פנימיים או דוחות פנימיים של הארגון או של מאגרי המידע החיצוניים והרלוונטיים על ידי מנגנון האחזור, זיהוי המידע הנדרש באתרים, מסמכים, או בסיסי נתונים ארגוניים והעברתו למודל.
3. יצירה (Generation) - שילוב המידע שנאסף עם הידע הכללי של מודל השפה לכדי תשובה קוהרנטית, כלומר הגיונית ומושלמת, בצורה של שיחה טבעית.
#דוגמאות
בארגון פיננסי למשל, מערכת RAG יכולה לשלוף מידע מעודכן מדוחות רבעוניים, תקנות רגולטוריות חדשות ונתוני שוק בזמן אמת כדי לענות על שאלה ספציפית של משקיע.
בעסק או חברה מערכת RAG יכולה לשלוף מדוחות פנימיים של הארגון, ממאגרי התמיכה או המסמכים הפנימיים ולתת מענה מבוסס ללקוחות ולעובדים.
באוניברסיטאות החוקרים משתמשים ב-RAG כדי לאפשר למודלים לגשת למאמרים מדעיים עדכניים בתחום הרפואה, מה שמאפשר ייעוץ מבוסס על מחקרים חדשניים שלא היו זמינים בעת אימון המודל.
חברת רפואה יכולה להטמיע RAG כדי לספק מענה מדויק לשאלות על טיפולים חדשניים, תוך שילוב מחקרים עדכניים עם ידע רפואי מוסמך.
במערכת המשפט, RAG יכול לסייע בניתוח תקדימים משפטיים, תוך שליפת פסקי דין רלוונטיים וחוקים עדכניים לסוגיה ספציפית.
#האתגרים
ההטמעה של טכנולוגיות RAG היא לא פשוטה ואף מורכבת מבחינה טכנית, הן בבחירת אלגוריתם האחזור המתאים, דרך ניהול מאגרי מידע גדולים, תחזוקה של מידע עדכני, שאלות של פרטיות כשמדובר במסמכים רגישים ועוד.
כמו כן, גם איכות התשובות תלויה באיכות מקורות המידע, כאשר מהנדסי המידע זוכרים תמיד את העיקרון שתקף גם כאן - "זבל נכנס, זבל יוצא".
הנה ה-RAG בהסבר פשוט ומרהיב:
https://youtu.be/zX4cL6n5UzY
כך עושים את זה:
https://youtu.be/tKPSmn-urB4
והסבר חופר:
https://youtu.be/u47GtXwePms

פרמטרים בלמידת מכונה (Machine Learning parameters), אם רוצים להבין מהם, אז כדאי לחשוב עליהם בתור המשתנים שקובעים את איכות ה"חשיבה" של מודל AI.
תפקידי הפרמטרים במודל שפה הם להבין הקשרים מורכבים בשפה, לחזות את המילה הבאה ברצף הטקסט שמפיק המודל ובסופו של דבר להצליח לייצר טקסט קוהרנטי (הגיוני) ומשמעותי.
אגב, במקום במילים זכרו שהטקסטים נבנים באמצעות טוקנים - ראו בתגית "טוקנים".
אבל עכשיו, אחרי שהסברנו בפשטות, הבה נפרט יותר ונרד לאיך זה נעשה: פרמטרים הם שלוכדים את הקשרים הסטטיסטיים שבין מילים ומושגי שפה שנמצאו בנתוני האימון. אפשר לדמות אותם למעין "כפתורים" בתוך המודל, שניתן לכוונם בכדי לשפר את יכולת המודל לעבד ולייצר שפה אנושית ומרשימה כל כך.
דמיינו שהידע על השפה מזוקק לתוך הפרמטרים ואז, בדומה למערכת סאונד שבה טכנאי הקול מכוונן את הכפתורים כדי להשיג את איכות הצליל הטובה ביותר, מהנדסי ה-AI מכוונים את מיליארדי הפרמטרים כדי להגיע לאיכות הגבוהה ביותר של התוצרים שהמודל ייצר.
בעצם, פרמטרים במודלים של בינה מלאכותית הם בקרי הגדרות פנימיות במודל שניתן לכוון במהלך האימון ועל ידי כך לשפר את יכולתו לעבד ולייצר שפה, תשובות ותגובות טובים יותר.
כלומר, ככל שיש במודל שפה יותר פרמטרים, גדלה גם חוכמתו ויכולתו לעשות שימוש במגוון המידע שנאגר בו. באמצעות הפרמטרים שולטים המהנדסים ברמה בה מודל AI מבין ויוצר שפה.
במהלך האימון, ערכי הפרמטרים מכוונים ומתעדכנים כדי לקודד דפוסים ממערכי הנתונים העצומים עליהם מאומנים המודלים הללו. הפרמטרים לוכדים את הקשרים הסטטיסטיים בין מילים ומושגי שפה שנמצאו בנתוני האימון. עבודה טובה איתם מאפשרת חשיבה טובה ומורכבת יותר ושימוש יותר מוצלח בידע שהמודל צבר, מה שיאפשר תגובות ותוצרים מדויקים יותר.
אגב, מספר הפרמטרים משקף בדרך כלל את גודל המודל. מודלים גדולים יותר יכולים להבין או לתפוס מורכבויות רבות יותר של שפה. מצד שני, הם גם יקרים יותר להפעלה, דורשים כוח מחשוב רב יותר ויש להם השפעה סביבתית רבה יותר, שהיא המחיר שאנו משלמים על כל ה-AI הזה.
אבל חשוב להבין שמספר הפרמטרים אינו המדד היחידי ליעילות המודל. לא פחות חשובה היא איכות הנתונים שעליהם אומן המודל. מודל קטן יותר שאומן על נתונים איכותיים יותר עשוי לבצע את המשימות טוב יותר ממודל גדול יותר שאומן על נתונים פחות מוצלחים.
כלומר, חיבור של כמות הפרמטרים, לצד איכות האימון, רמת הדאטה שעליו אומן המודל והיעילות הכוללת שלו הם המפתח ליכולות של מודל שפה.
הנה הפרמטרים במודל AI ואיך הם משתלבים בתמונה הכללית:
https://youtu.be/mnqXgojQCJI
פרמטרים וטוקנים הם לא הכל במודלים:
https://youtu.be/a1nqXQMOCks
והפרמטרים כחלק מהבינה היוצרת בכללה:
https://youtu.be/r17HV0TzAWw?long=yes

נהוג לומר שהשם הנרדף של "ארגומנטים" הוא "משתנים" או גם "פרמטרים".
אז באמת מתכנתים מבלבלים לא פעם בין פרמטרים וארגומנטים וזה בסדר, כי ההבדל ביניהם הוא בעיקרו סמנטי, עניין של הגדרה ולא של מהות שיכולה לפגוע בעבודה.
אבל בכל זאת... כשאנו מגדירים פונקציה, נרצה להגדיר לה את הנתונים שהיא תצפה לקבל בעת קריאה וזימון שלה.
#דוגמה
למשל כאן, ניתן לראות ש-x הוא פרמטר, בעוד ש-y הוא ארגומנט.
int f(struct S *x);
return f(&y);
#אז בהגדרה אלה יהיו פרמטרים.
כלומר, פרמטרים (משתנים) מתקבלים על ידי הפונקציה כשמגדירים אותה. כל ארגומנט מופיע בצורה של סוג (type) ואז שם. כך יהיו למשל ארגומנטים מסוג int שבהם יופיעו מספרים שלמים, מסוג double שיהיה בו מספר עשרוני, או String עם מחרוזת טקסט.
#בקריאה לפונקציה אלה ארגומנטים
כשאנו מריצים פונקציה, היא מבצעת פעולה מסוימת. אלא שלא תמיד נרצה שהיא תעשה בדיוק את אותה פעולה בדיוק, או עם אותם נתונים. כך למשל, אם נרצה להשתמש בפונקציה כמו printInBold, כדי להדגיש מחרוזת טקסט בכתב Bold, נרצה לספק בכל פעם מחרוזת טקסט אחרת. זה בדיוק מה שהארגומנט (Argument) מאפשר לנו. כשנקרא לפונקציה, נכניס באמצעותו משתנה לתוך הסוגריים שלה וכך היא תבצע את הפעולה על המשתנה הזה.
כמובן שלא רק מחרוזות יכולות להיכנס כארגומנטים. לארגומנטים ניתן להכניס גם משתנים, ספרות וכדומה.
ארגומנטים, אם כן, הם פרמטרים שפונקציה מצפה לקבל דה פקטו. באמצעות הקוד שתוכנת בה לביצוע היא תייצר את ה-return שלה ממנו, או תדפיס אותו בפקודת print לטרמינל.
#לכן תיאורטית...
ה"פרמטרים" שההגדרנו בפונקציה עצמה, אלה "פרמטרים פורמליים" (Formal Parameters). לעומתם, ה"פרמטרים" שנשלחים לפונקציה הקיימת, נקראים "פרמטרים אקטואליים" (Actual Parameters) והם הארגומנטים.
#ומעשית...
המונח "פרמטרים" יכול לשמש למעשה בכדי לתאר, גם את ה"פרמטרים" וגם את ה"ארגומנטים".
הנה ארגומנטים בפייתון:
https://youtu.be/tQ7it_vlptA
ופרמטרים וארגומנטים בשפת Javascript:
https://youtu.be/G4lZSWssoqA

מכירים את זה שאתם עושים שוב ושוב, כל יום או כל כמה שעות את אותה פעולה וזה נראה לכם לא הגיוני?
גם מתכנתים לא אוהבים לעשות שוב ושוב את אותה פעולה. לכן הם למשל משתמשים בלולאות (Loops). אבל יש מרכיב שחוסך עוד יותר עבודה וכתיבת קוד מיותר. כי מתכנתים אוהבים לשמור את הקוד שלהם DRY, קיצור של "don’t repeat yourself".
לרכיב מקצר העבודה הזה קוראים פונקציה (Function). הפונקציה היא פלא של ייעול. כל מטרתה היא "לקודד פעם אחת, להשתמש הרבה פעמים".
#אבל מהי פונקציה?
פונקציה היא קוד שמבצע פעולה. הרעיון בכתיבת פונקציה הוא לכתוב פעם אחת קוד והוא יחליף את הצורך לכתוב פעולות דומות שוב ושוב, במקומות שונים בתוכנה.
דמייני שאת מתכנתת פעם אחת קטע של קוד ואחרי כן קוראת לו בתוכנה, בכל פעם שצריך שהוא יבצע את תפקידו.
מדהים לא?
ואכן, פונקציה בתכנות היא מרכיב פשוט אבל משמעותי מאוד, המקל את הקידוד ואת הארגון הנכון של תכנית מחשב. כך הוא מקצר את הקוד, חוסך זמן ומקטין את האפשרויות לשגיאות.
כמו במכשיר מיקרוגל או במכונית, בפונקציה משתמשים בכל פעם שרוצים לבצע את הפעולה שהיא יודעת ותוכנתה לעשות. מכונית תסיע אותנו ומיקרו יחמם לנו או יפשיר את האוכל. כל אחד יודע כמה הם שיפרו את חיינו לעומת העולם שלפני המכונית או המיקרוגל.
במילים פשוטות, הפונקציה היא קטע קוד המבצע פעולה, Action כלשהי. המתכנתים כותבים את הפונקציה פעם אחת ויכולים לקרוא לה בקוד מתי שרק ירצו.
#שיטת התכנות של פונקציות
אז השיטה היא פשוטה - מגדירים ומשתמשים. כלומר, מתכנתים פונקציה ונותנים לה שם. מעתה נוכל להשתמש בה בקוד, כלומר לקרוא לה בכל פעם שנצטרך שהיא תבצע את תפקידה.
#איך פונקציה פועלת?
בקריאה לפונקציה, לעתים נצטרך לתת לה נתונים. בשביל זה לפונקציה יש סוגריים. בתוכן נצרף לה לעתים פרמטרים, כלומר נתונים מסויימים שבהם היא תשתמש כדי לחשב ולבצע את מה שהיא תוכנתה לעשות.
כשהפונקציה תסיים "לעבוד" (וזה יהיה מאוד מהיר כמובן) היא תחזיר את הפלט להמשך התכנית, או תבצע פעולה כמו הדפסה או הפעלה של פונקציות אחרות.
#דוגמה לפונקציות בחיים
נסביר את זה רגע בדימוי מהחיים: דמיינו שאתם בפסטיבל עם המון אנשים ואיבדתם את החברה שלכם. אתם ניגשים לבמה ומבקשים להכריז שאתם ממתינים לה. אומרים לכם לדבר עם שמעון, הכרוז של הפסטיבל. הוא בחור נחמד וענייני ומבקש מכם מידע, דאטה. במילים פשוטות - הוא שואל איך קוראים לה ומה שמכם. כשאתם נותנים את הפרטים הללו, שמעון ממהר להכריז במיקרופון "ברכה לוי, בואי ליד הבמה! יוסי ושרון ממתינים לך". דקות אחר כך ברכה מגיעה אליכם ליד הבמה.
סוף טוב הכל טוב!
כלומר, שמעון הוא פונקציה שיודעת להכריז על אבדות. הוא צריך פרמטרים, דאטה הכרחי שבדוגמה הזו הוא שם הגברת ושמות הממתינים לה. כשהוא מבצע את הפעולה שלו, המשימה מתבצעת. אם הוא היה מחזיר תשובה, כמו" ברכה כבר בבית" זה כנראה היה ארגומנט.
#יתרונות הפונקציה
פונקציה מקצרת את הקוד, חוסכת מאוד בזמן פיתוח ומונעת באגים. במילים פשוטות, הרעיון בפונקציה "קודד פעם אחת, השתמש הרבה פעמים!"
איך זה עובד?
דמיינו שהייתם צריכים גם לתקן בעצמכם את המכונית, גם להכין אוכל, גם לבנות את הבית שלכם, לטפל וללמד את הילדים, לתקן את החשמל, את הביוב וכל הדברים שצריך לעשות. אולי זה אפשרי אבל זה לא חכם, נכון?
קוד ללא פונקציות הוא כמו עולם בלי בעלי תפקידים שיודעים היטב כיצד למלא משימות מוגדרות, בלי אנשי מקצוע שהם מומחים בתפקידם ובלי מכשירים שעושים לנו את החיים קלים ונוחים.
זה עולם מסובך ומבולגן. המתכנתים קוראים לקוד כזה "קוד ספגטי". מרוב שהוא עמוס ומנוהל לא נכון, לא מוצאים בו את הידיים והרגליים...
חישבו על הפונקציה כסוג של מכונה, מתקן או חלק בקוד. כשנותנים להם סוג של אינפוט, מידע, הם יודעים לבצע במידע הזה משימה שהוגדרה להם מראש בתכנות.
פעולה כזו של פונקציה יכולה לפעמים לתת לנו משהו בחזרה, ערך או ערכים מוגדרים. ערך כזה בדוגמה שלנו הוא כמו תשובה ששמעון יכול לתת לנו, שברכה נמצאה וממתינה לנו במקום כלשהו.
לעתים פונקציה יכולה לשנות את הדאטה שנתנו לה ולפעמים לקבל החלטה על בסיס הדאטה הזה. בשפות מונחות עצמים יש בדרך כלל סוגריים אחרי שם הפונקציה. כשמכריזים על הפונקציה, כלומר כשמהמתכנתים מציגים אותה לראשונה, הם מגדירים שבסוגריים האלה יוכנס הדאטה לצורך הביצוע. בכך הם מגדירים באמצעות "פרמטרים" מה יהיה הדאטה המצופה, כדי שהפונקציה תעשה את תפקידה.
כשקוראים לפונקציה, זה כמו למלא טופס. לתוך הסוגריים, מכניסים את הפרמטרים, האינפוט, את המידע שהפונקציה רוצה (כמו ששמעון שואל "איך קוראים לילדה שנעלמה לכם?")
אחרי ביצוע הפעולה, הפונקציה תחזיר את הארגומנט. כלומר, את התוצאה או המידע שביקשנו ממנה לייצר מהפרמטרים שסיפקנו לה בקריאה.
בשפות תכנות נהוג שהסוגריים נכללות בפונקציה בכל מקרה, גם אם אין מידע, כלומר פרמטרים שהפונקציה דורשת כדי למלא את תפקידה, יהיו שם סוגריים ריקות.
ואגב, בשפות התכנות השונות יש פונקציות מובנות, שנכתבו מראש, ברמת השפה כולה. ניתן להשתמש בהן מראש, מבלי שהמתכנת יצטרך לפתח בעצמו או בעצמה פונקציות לדברים שמתכנתים צריכים הרבה. יש גם ספריות שלמות, שאותן תוכלו לייבא לקוד שלכם ולחסוך זמן פיתוח. הן כוללות פונקציות שימושיות, בתחום בו הספריה שימושית.
הנה סרטון שמסביר את הפונקציה בפשטות:
https://youtu.be/3JIZ40yuZL0?end=2m40s
הפונקציה לתלמידי תכנות שפת פייתון (עברית):
https://youtu.be/o0wyYsNbJeY
והסבר הפונקציות ב-javascript (עברית):
https://youtu.be/c7mqY6QtdQQ
