Skip to content

Latest commit

 

History

History
453 lines (290 loc) · 55.9 KB

File metadata and controls

453 lines (290 loc) · 55.9 KB

יסודות הנדסת פרומפטים

Prompt Engineering Fundamentals

הקדמה

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

בינה מלאכותית גנרטיבית מסוגלת ליצור תוכן חדש (למשל, טקסט, תמונות, אודיו, קוד וכו') בתגובה לבקשות משתמשים. היא עושה זאת באמצעות מודלים שפתיים גדולים כמו סדרת GPT ("Generative Pre-trained Transformer") של OpenAI, שמאומנים על שפה טבעית וקוד.

המשתמשים יכולים כיום לתקשר עם המודלים האלה בשיטות מוכרות כמו צ'אט, בלי צורך בידע טכני או הכשרה. המודלים מבוססי פרומפט - המשתמשים שולחים קלט טקסטואלי (פרומפט) ומקבלים תגובה מה-AI (קומפלישן). אפשר "לשוחח עם ה-AI" באופן מחזורי, בשיחות מרובות פניות, ולשפר את הפרומפט עד שהתוצאה תואמת את הציפיות.

ה"פרומפטים" הופכים לממשק תכנות עיקרי לאפליקציות בינה מלאכותית גנרטיבית, ומכוונים את המודלים למה לעשות ומשפיעים על איכות התשובות. "הנדסת פרומפטים" היא תחום מתפתח במהירות, שמתמקד ב_עיצוב ואופטימיזציה_ של פרומפטים כדי להבטיח תגובות איכותיות ועקביות בקנה מידה גדול.

מטרות למידה

בשיעור הזה נלמד מהי הנדסת פרומפטים, למה זה חשוב, ואיך אפשר ליצור פרומפטים יעילים יותר עבור מודל ומטרה מסוימים. נבין מושגים מרכזיים ושיטות עבודה מומלצות להנדסת פרומפטים - ונכיר סביבת "sandbox" אינטראקטיבית ב-Jupyter Notebooks שבה אפשר לראות את המושגים האלה בפעולה על דוגמאות אמיתיות.

בסוף השיעור נוכל:

  1. להסביר מהי הנדסת פרומפטים ולמה היא חשובה.
  2. לתאר את מרכיבי הפרומפט ואיך משתמשים בהם.
  3. ללמוד שיטות עבודה וטכניקות להנדסת פרומפטים.
  4. ליישם את הטכניקות שנלמד על דוגמאות אמיתיות, באמצעות נקודת קצה של OpenAI.

מושגים מרכזיים

הנדסת פרומפטים: עיצוב ושיפור קלטים כדי לכוון את מודלי הבינה המלאכותית להפיק פלטים רצויים. טוקניזציה: תהליך הפיכת טקסט ליחידות קטנות יותר, שנקראות טוקנים, שהמודל יודע להבין ולעבד. מודלים שפתיים גדולים מכווני-הוראות: LLMs שעברו כיוונון נוסף עם הוראות ספציפיות כדי לשפר את דיוק ורלוונטיות התשובות.

סביבת למידה

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

ה-Jupyter Notebook שמלווה את השיעור הזה מספק סביבת sandbox שבה אפשר לנסות את מה שלומדים - תוך כדי או כחלק מאתגר הקוד בסוף. כדי לבצע את התרגילים, תצטרכו:

  1. מפתח API של Azure OpenAI - נקודת קצה לשירות עם LLM שהופעל.
  2. סביבת הרצה של Python - שבה אפשר להריץ את ה-Notebook.
  3. משתני סביבה מקומיים - השלימו עכשיו את שלבי SETUP כדי להתכונן.

ה-Notebook מגיע עם תרגילים ראשוניים - אבל מומלץ להוסיף קטעי Markdown (תיאור) ו-Code (בקשות פרומפט) משלכם כדי לנסות עוד דוגמאות או רעיונות - ולבנות אינטואיציה לעיצוב פרומפטים.

מדריך מאויר

רוצים להבין את התמונה הגדולה של מה שהשיעור הזה כולל לפני שמתחילים? הציצו במדריך המאויר הזה, שמציג את הנושאים המרכזיים ואת התובנות שכדאי לחשוב עליהן בכל אחד מהם. מפת השיעור לוקחת אתכם מהבנת המושגים והאתגרים המרכזיים ועד להתמודדות איתם באמצעות טכניקות ושיטות עבודה מומלצות להנדסת פרומפטים. שימו לב שקטע "טכניקות מתקדמות" במדריך הזה מתייחס לתוכן שיילמד בפרק הבא בקורס.

מדריך מאויר להנדסת פרומפטים

הסטארטאפ שלנו

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

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

וזה רק קצה הקרחון. הציצו ב-Prompts For Education - ספריית פרומפטים בקוד פתוח שאצרו מומחי חינוך - כדי לקבל מושג רחב יותר על האפשרויות! נסו להריץ כמה מהפרומפטים האלה ב-sandbox או ב-OpenAI Playground ותראו מה קורה!

מהי הנדסת פרומפטים?

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

  • עיצוב הפרומפט הראשוני עבור מודל ומטרה מסוימים
  • שיפור הפרומפט באופן מחזורי כדי לשפר את איכות התגובה

זהו תהליך של ניסוי וטעייה שמצריך אינטואיציה ומאמץ מצד המשתמש כדי להגיע לתוצאות מיטביות. אז למה זה חשוב? כדי לענות על השאלה, צריך להבין שלושה מושגים:

  • טוקניזציה = איך המודל "רואה" את הפרומפט
  • מודלי בסיס = איך מודל הבסיס "מעבד" את הפרומפט
  • מודלים מכווני-הוראות = איך המודל יכול לראות "משימות"

טוקניזציה

LLM רואה פרומפטים כ_רצף של טוקנים_, כאשר מודלים שונים (או גרסאות שונות של אותו מודל) יכולים לטוקן את אותו פרומפט בדרכים שונות. מאחר ש-LLMs מאומנים על טוקנים (ולא על טקסט גולמי), הדרך שבה הפרומפטים עוברים טוקניזציה משפיעה ישירות על איכות התגובה שנוצרת.

כדי להבין איך טוקניזציה עובדת, נסו כלים כמו OpenAI Tokenizer שמוצג למטה. העתיקו את הפרומפט שלכם - ותראו איך הוא הופך לטוקנים, תוך תשומת לב לאיך תווי רווח וסימני פיסוק מטופלים. שימו לב שהדוגמה הזו מציגה מודל ישן יותר (GPT-3) - אז אם תנסו זאת עם מודל חדש יותר, ייתכן שתקבלו תוצאה שונה.

טוקניזציה

מושג: מודלי בסיס

לאחר שהפרומפט עבר טוקניזציה, התפקיד העיקרי של "מודל הבסיס" (או Foundation model) הוא לנבא את הטוקן הבא ברצף. מאחר ש-LLMs מאומנים על מאגרי טקסט עצומים, יש להם הבנה סטטיסטית טובה של הקשרים בין טוקנים והם יכולים לנבא את הטוקן הבא בביטחון מסוים. שימו לב שהם לא מבינים את המשמעות של המילים או הטוקנים בפרומפט; הם פשוט מזהים תבנית שאפשר "להשלים" עם הניבוי הבא. הם יכולים להמשיך לנבא את הרצף עד שהמשתמש מפסיק אותם או לפי תנאי מוגדר מראש.

רוצים לראות איך השלמה מבוססת פרומפט עובדת? הזינו את הפרומפט למעלה ל-Azure OpenAI Studio Chat Playground עם ההגדרות ברירת מחדל. המערכת מוגדרת להתייחס לפרומפטים כבקשות למידע - אז תראו השלמה שמספקת את ההקשר הזה.

אבל מה אם המשתמש רוצה לראות משהו מסוים שעונה על קריטריונים או משימה? כאן נכנסים לתמונה מודלים מכווני-הוראות.

השלמת צ'אט במודל בסיסי

מושג: מודלים מכווני-הוראות

מודל מכוון-הוראות מתחיל ממודל הבסיס ועובר כיוונון נוסף עם דוגמאות או זוגות קלט/פלט (למשל, "הודעות" מרובות פניות) שכוללות הוראות ברורות - והתגובה מה-AI מנסה לעקוב אחרי ההוראה.

זה משתמש בטכניקות כמו Reinforcement Learning with Human Feedback (RLHF) שמאפשרות למודל לעקוב אחרי הוראות ו_ללמוד ממשוב_, כך שהוא מפיק תגובות שמתאימות יותר ליישומים מעשיים ורלוונטיות יותר למטרות המשתמש.

בואו ננסה - חזרו לפרומפט למעלה, אבל עכשיו שנו את הודעת המערכת ותנו את ההוראה הבאה כהקשר:

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

שימו לב איך התוצאה עכשיו מותאמת למטרה ולפורמט הרצוי? מורה יכול להשתמש בתגובה הזו ישירות בשקופיות לשיעור.

השלמת צ'אט במודל מכוון-הוראות

למה צריך הנדסת פרומפטים?

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

  1. התגובות של המודל אקראיות. אותו פרומפט כנראה יניב תגובות שונות עם מודלים שונים או גרסאות שונות של אותו מודל. ואפילו עם אותו מודל, ייתכן שתקבלו תוצאות שונות בזמנים שונים. טכניקות הנדסת פרומפטים יכולות לעזור לצמצם את השונות הזו על ידי יצירת מסגרות ברורות יותר.

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

  3. היכולות של המודלים משתנות. מודלים חדשים או דורות חדשים יהיו בעלי יכולות עשירות יותר, אבל גם יביאו איתם מאפיינים ייחודיים ואתגרים בעלות ומורכבות. הנדסת פרומפטים יכולה לעזור לנו לפתח שיטות עבודה שמסתירות את ההבדלים ומסתגלות לדרישות ייחודיות של כל מודל בצורה גמישה ויעילה.

בואו נראה את זה בפעולה ב-OpenAI או Azure OpenAI Playground:

  • השתמשו באותו פרומפט עם פריסות LLM שונות (למשל, OpenAI, Azure OpenAI, Hugging Face) - האם ראיתם הבדלים?
  • השתמשו באותו פרומפט שוב ושוב עם אותה פריסה של LLM (למשל, Azure OpenAI playground) - איך ההבדלים נראו?

דוגמה להמצאות

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

רוצים להבין איך המצאות עובדות? חשבו על פרומפט שמנחה את ה-AI לייצר תוכן בנושא לא קיים (כדי לוודא שהוא לא נמצא במאגר האימון). לדוגמה - ניסיתי את הפרומפט הזה:

תוכנית שיעור: מלחמת המאדים של 2076

מטרות השיעור

  • להבין את הגורמים למלחמת המאדים של 2076
  • לנתח את ההשפעות של המלחמה על מאדים ועל כדור הארץ
  • לדון בתפקידים של הצדדים השונים במלחמה
  • לפתח חשיבה ביקורתית לגבי השלכות עתידיות של סכסוכים בין-פלנטריים

מבוא

מלחמת המאדים של 2076 הייתה נקודת מפנה בהיסטוריה של ההתיישבות האנושית בחלל. השיעור יבחן את הרקע, הגורמים, וההשפעות של המלחמה, תוך התמקדות באירועים המרכזיים ובדמויות החשובות.

שלבי השיעור

1. רקע היסטורי

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

2. הגורמים למלחמה

  • ניתוח הסיבות הכלכליות, הפוליטיות והחברתיות
  • השפעת התחרות על מים, חמצן ומשאבים אחרים
  • תפקידן של חברות כדור-ארציות בסכסוך

3. מהלך המלחמה

  • תיאור האירועים המרכזיים: קרבות, בריתות, אסטרטגיות
  • הצגת דמויות מפתח: מנהיגים, גנרלים, מדענים
  • השפעת הטכנולוגיה על אופי הלחימה

4. השלכות המלחמה

  • השפעות על החברה המאדימית והכדור-ארצית
  • שינויים פוליטיים וחברתיים בעקבות המלחמה
  • לקחים שנלמדו והסכמים שנחתמו

5. דיון ופעילות

  • דיון קבוצתי: האם ניתן היה למנוע את המלחמה?
  • פעילות יצירתית: כתיבת מכתב מנקודת מבט של משתתף במלחמה
  • ניתוח תרחישים עתידיים של סכסוכים בין-פלנטריים

סיכום

השיעור מספק הבנה מעמיקה של מלחמת המאדים של 2076, ומעודד חשיבה ביקורתית על סכסוכים עתידיים בחלל. התלמידים יוכלו לזהות את הגורמים, ההשפעות והלקחים מהאירוע ההיסטורי.

משימות להמשך

  • לקרוא את הפרק על מלחמת המאדים בספר הלימוד
  • להכין מצגת קצרה על אחת מהדמויות המרכזיות במלחמה
  • לכתוב חיבור: "כיצד מלחמת המאדים שינתה את פני ההתיישבות האנושית בחלל?" חיפוש ברשת הראה לי שיש תיאורים בדיוניים (למשל, סדרות טלוויזיה או ספרים) על מלחמות במאדים – אבל אף אחד מהם לא מתרחש ב-2076. ההיגיון הבריא גם אומר לנו ש-2076 היא בעתיד, ולכן לא יכולה להיות קשורה לאירוע אמיתי.

אז מה קורה כשמריצים את השאלה הזו אצל ספקי LLM שונים?

תגובה 1: OpenAI Playground (GPT-35)

תגובה 1

תגובה 2: Azure OpenAI Playground (GPT-35)

תגובה 2

תגובה 3: : Hugging Face Chat Playground (LLama-2)

תגובה 3

כצפוי, כל מודל (או גרסה של מודל) מייצר תגובות מעט שונות, בזכות ההתנהגות הסטוכסטית והבדלים ביכולות המודל. לדוגמה, מודל אחד מכוון לקהל של תלמידי חטיבת ביניים בעוד אחר מניח שמדובר בתלמיד תיכון. אבל כל שלושת המודלים יצרו תגובות שיכולות לשכנע משתמש לא בקיא שהאירוע אמיתי.

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

מחקר מקרה: GitHub Copilot

נסיים את החלק הזה בהצצה לאופן שבו הנדסת פרומפטים משמשת בפתרונות אמיתיים, דרך מחקר מקרה: GitHub Copilot.

GitHub Copilot הוא "מתכנת זוגי מבוסס בינה מלאכותית" – הוא ממיר פרומפטים טקסטואליים להשלמות קוד ומשולב בסביבת הפיתוח שלך (למשל, Visual Studio Code) לחוויית משתמש חלקה. כפי שמתואר בסדרת הבלוגים למטה, הגרסה הראשונה התבססה על מודל OpenAI Codex – והמהנדסים הבינו במהרה שיש צורך לכוונן את המודל ולפתח טכניקות הנדסת פרומפטים טובות יותר, כדי לשפר את איכות הקוד. ביולי, הם השיקו מודל בינה מלאכותית משופר שמתקדם מעבר ל-Codex ומספק הצעות מהירות יותר.

קראו את הפוסטים לפי הסדר, כדי לעקוב אחרי מסע הלמידה שלהם.

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


בניית פרומפט

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

פרומפט בסיסי

נתחיל מהפרומפט הבסיסי: קלט טקסטואלי שנשלח למודל בלי הקשר נוסף. הנה דוגמה – כששולחים את המילים הראשונות של ההמנון האמריקאי ל-Completion API של OpenAI, הוא מיד משלים את התגובה עם השורות הבאות, ומדגים את התנהגות החיזוי הבסיסית.

פרומפט (קלט) השלמה (פלט)
Oh say can you see זה נשמע כאילו אתה מתחיל את מילות ההמנון "The Star-Spangled Banner", ההמנון הלאומי של ארצות הברית. המילים המלאות הן ...

פרומפט מורכב

עכשיו נוסיף הקשר והוראות לאותו פרומפט בסיסי. Chat Completion API מאפשר לנו לבנות פרומפט מורכב כאוסף של הודעות עם:

  • זוגות קלט/פלט שמייצגים קלט משתמש ותגובה של העוזר.
  • הודעת מערכת שמגדירה את ההקשר להתנהגות או אישיות של העוזר.

הבקשה כעת בנויה כך, כשה-tokenization לוכד מידע רלוונטי מההקשר ומהשיחה. שינוי ההקשר של המערכת יכול להשפיע על איכות ההשלמות לא פחות מהקלט של המשתמש.

response = openai.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

פרומפט הוראות

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

פרומפט (קלט) השלמה (פלט) סוג הוראה
כתוב תיאור של מלחמת האזרחים הוחזר פסקה פשוטה פשוט
כתוב תיאור של מלחמת האזרחים. ציין תאריכים ואירועים מרכזיים והסבר את חשיבותם הוחזרה פסקה ואחריה רשימת תאריכים מרכזיים עם הסברים מורכב
כתוב תיאור של מלחמת האזרחים בפסקה אחת. ציין 3 נקודות עם תאריכים מרכזיים וחשיבותם. ציין 3 דמויות היסטוריות מרכזיות ותרומתן. החזר את הפלט כקובץ JSON הוחזר פירוט רחב יותר בתיבת טקסט, בפורמט JSON שאפשר להעתיק לקובץ ולבדוק לפי הצורך מורכב. בפורמט.

תוכן עיקרי

בדוגמאות למעלה, הפרומפט עדיין היה פתוח יחסית, ואפשר למודל להחליט איזה חלק מהמידע שברשותו רלוונטי. עם תבנית תוכן עיקרי, קלט הטקסט מחולק לשני חלקים:

  • הוראה (פעולה)
  • תוכן רלוונטי (שמשפיע על הפעולה)

הנה דוגמה שבה ההוראה היא "סכם זאת בשתי משפטים".

פרומפט (קלט) השלמה (פלט)
צדק הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גזים שמסתו אלפית מזו של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת יחד. צדק הוא אחד מהעצמים הבהירים ביותר שניתן לראות בעין בלתי מזוינת בשמי הלילה, ומוכר לציביליזציות עתיקות עוד לפני ההיסטוריה המתועדת. שמו של צדק ניתן לו על שם אל הרומאים יופיטר.[19] כאשר מתבוננים בו מכדור הארץ, צדק יכול להיות כה בהיר עד שאורו המוחזר יוצר צללים נראים לעין,[20] ובממוצע הוא העצם הטבעי השלישי בבהירותו בשמי הלילה אחרי הירח ונוגה.
סכם זאת בשני משפטים קצרים
צדק, כוכב הלכת החמישי מהשמש, הוא הגדול ביותר במערכת השמש ומוכר כאחד מהעצמים הבהירים ביותר בשמי הלילה. הוא קרוי על שם אל הרומאים, והוא ענק גזים שמסתו פי שניים וחצי מכל שאר כוכבי הלכת יחד.

את מקטע התוכן העיקרי אפשר לנצל בדרכים שונות כדי להנחות את ההוראות:

  • דוגמאות – במקום להורות למודל מה לעשות, אפשר לתת לו דוגמאות של התוצאה הרצויה ולתת לו להסיק את התבנית.
  • רמזים – אחרי ההוראה, מוסיפים "רמז" שמכוון את ההשלמה, ומנחה את המודל לתגובה רלוונטית יותר.
  • תבניות – אלו "מתכונים" חוזרים לפרומפטים עם משתנים (placeholders) שאפשר להתאים לנתונים שונים לפי הצורך.

בואו נראה דוגמאות לכך.

שימוש בדוגמאות

זו גישה שבה משתמשים בתוכן העיקרי כדי "להאכיל את המודל" בדוגמאות של הפלט הרצוי עבור הוראה מסוימת, ונותנים לו להסיק את התבנית הרצויה. לפי מספר הדוגמאות, אפשר לקבל zero-shot, one-shot, few-shot וכו'.

הפרומפט מורכב כעת משלושה חלקים:

  • תיאור המשימה
  • כמה דוגמאות של הפלט הרצוי
  • התחלה של דוגמה חדשה (שמשמשת כהוראה מרומזת)
סוג למידה פרומפט (קלט) השלמה (פלט)
Zero-shot "The Sun is Shining". Translate to Spanish "El Sol está brillando".
One-shot "The Sun is Shining" => ""El Sol está brillando".
"It's a Cold and Windy Day" =>
"Es un día frío y ventoso".
Few-shot The player ran the bases => Baseball
The player hit an ace => Tennis
The player hit a six => Cricket
The player made a slam-dunk =>
Basketball

שימו לב שב-zero-shot היינו צריכים לתת הוראה מפורשת ("Translate to Spanish"), אבל ב-one-shot ההוראה כבר משתמעת. בדוגמת few-shot, הוספת דוגמאות מאפשרת למודל להסיק טוב יותר את התבנית גם בלי הוראות נוספות.

רמזים בפרומפט

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

מספר רמזים פרומפט (קלט) השלמה (פלט)
0 צדק הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גזים שמסתו אלפית מזו של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת יחד. צדק הוא אחד מהעצמים הבהירים ביותר שניתן לראות בעין בלתי מזוינת בשמי הלילה, ומוכר לציביליזציות עתיקות עוד לפני ההיסטוריה המתועדת.

סכם זאת | צדק הוא כוכב הלכת הגדול ביותר במערכת השמש והחמישי מהשמש. זהו ענק גזים שמסתו היא אלפית מזו של השמש, אך הוא כבד יותר מכל שאר כוכבי הלכת יחד. תרבויות עתיקות הכירו את צדק מזה זמן רב, והוא נראה בקלות בשמי הלילה. | | 1 | צדק הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גזים שמסתו אלפית מזו של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת יחד. צדק הוא אחד מהעצמים הבהירים ביותר שניתן לראות בעין בלתי מזוינת בשמי הלילה, והוא מוכר לתרבויות עתיקות עוד לפני ההיסטוריה המתועדת.
סכם זאת
מה שלמדנו הוא שצדק | הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גזים שמסתו אלפית מזו של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת יחד. הוא נראה בקלות בעין בלתי מזוינת ומוכר מאז ימי קדם. | | 2 | צדק הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גזים שמסתו אלפית מזו של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת יחד. צדק הוא אחד מהעצמים הבהירים ביותר שניתן לראות בעין בלתי מזוינת בשמי הלילה, והוא מוכר לתרבויות עתיקות עוד לפני ההיסטוריה המתועדת.
סכם זאת
3 עובדות עיקריות שלמדנו: | 1. צדק הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש.
2. זהו ענק גזים שמסתו אלפית מזו של השמש...
3. צדק נראה בעין בלתי מזוינת מאז ימי קדם ... | | | | |

תבניות להנחיות

תבנית להנחיה היא מתכון מוגדר מראש להנחיה שניתן לשמור ולהשתמש בו שוב לפי הצורך, כדי ליצור חוויות משתמש עקביות יותר בקנה מידה גדול. בצורה הפשוטה ביותר, מדובר באוסף של דוגמאות להנחיות כמו הדוגמה הזו של OpenAI שמספקת גם את רכיבי ההנחיה האינטראקטיביים (הודעות משתמש ומערכת) וגם את פורמט הבקשה ל-API - כדי לאפשר שימוש חוזר.

בצורה המורכבת יותר כמו הדוגמה הזו של LangChain היא כוללת מקומות שמורים שניתן להחליף בנתונים ממקורות שונים (קלט משתמש, הקשר מערכת, מקורות מידע חיצוניים וכו') כדי ליצור הנחיה באופן דינמי. זה מאפשר לנו ליצור ספרייה של הנחיות שניתן להשתמש בהן כדי ליצור חוויות משתמש עקביות באופן תכנותי בקנה מידה גדול.

הערך האמיתי של תבניות הוא ביכולת ליצור ולפרסם ספריות הנחיות לתחומי יישום מסוימים - כאשר התבנית מותאמת להקשר או דוגמאות רלוונטיות לאותו תחום, מה שהופך את התשובות לרלוונטיות ומדויקות יותר עבור קהל היעד. המאגר Prompts For Edu הוא דוגמה מצוינת לכך, עם ספרייה של הנחיות לתחום החינוך בדגש על מטרות כמו תכנון שיעורים, עיצוב תוכניות לימודים, חונכות תלמידים ועוד.

תוכן תומך

אם נחשוב על בניית הנחיה ככוללת הוראה (משימה) ותוכן עיקרי (המטרה), אז תוכן משני הוא הקשר נוסף שאנו מספקים כדי להשפיע על התוצאה בדרך כלשהי. זה יכול להיות פרמטרים לכיוונון, הוראות עיצוב, טקסונומיות נושאיות וכו' שיכולים לעזור למודל להתאים את התשובה למטרות או ציפיות המשתמש.

לדוגמה: אם יש לנו קטלוג קורסים עם מטא-דאטה נרחב (שם, תיאור, רמה, תגיות, מרצה וכו') על כל הקורסים בתוכנית הלימודים:

  • אפשר להגדיר הוראה "לסכם את קטלוג הקורסים לסתיו 2023"
  • אפשר להשתמש בתוכן העיקרי כדי לספק כמה דוגמאות לתוצאה הרצויה
  • אפשר להשתמש בתוכן המשני כדי לזהות את 5 התגיות החשובות ביותר.

כעת, המודל יכול לספק סיכום בפורמט שמוצג בדוגמאות, אבל אם יש תוצאה עם כמה תגיות, הוא יכול להעדיף את 5 התגיות שצוינו בתוכן המשני.


עקרונות להנחיה נכונה

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

גישת הנדסת הנחיות

הנדסת הנחיות היא תהליך של ניסוי וטעייה, לכן כדאי לזכור שלושה עקרונות מנחים:

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

  2. הבנת המודל חשובה. אנחנו יודעים שמודלים הם אקראיים מטבעם. אבל גם היישום של המודל משתנה לפי מאגר הנתונים עליו הוא אומן (ידע מוקדם), היכולות שהוא מספק (למשל, דרך API או SDK) וסוג התוכן שהוא מותאם אליו (קוד, תמונות, טקסט). למד את החוזקות והמגבלות של המודל בו אתה משתמש, והשתמש בזה כדי לתעדף משימות או לבנות תבניות מותאמות שמנצלות את יכולות המודל.

  3. חזרתיות ואימות חשובים. המודלים משתנים במהירות, וכך גם הטכניקות להנדסת הנחיות. כמומחה תחום, ייתכן שיש לך הקשר או קריטריונים ליישום שלך, שלא רלוונטיים לקהילה הרחבה. השתמש בכלים וטכניקות להנדסת הנחיות כדי "להניע" את בניית ההנחיה, ואז חזור ואמת את התוצאות לפי האינטואיציה והידע שלך. תעד את התובנות שלך ויצור בסיס ידע (למשל, ספריות הנחיות) שאחרים יוכלו להשתמש בו כנקודת התחלה, כדי לייעל את התהליך בעתיד.

עקרונות מומלצים

בואו נסקור עקרונות מומלצים שמומלצים על ידי OpenAI ו-Azure OpenAI.

מה למה
הערך את המודלים החדשים ביותר. דורות חדשים של מודלים עשויים לכלול תכונות ואיכות משופרות - אך גם עלויות גבוהות יותר. בדוק את ההשפעה, ואז קבל החלטות מעבר.
הפרד בין הוראות להקשר בדוק אם המודל/הספק שלך מגדיר תוחמים שמפרידים בין הוראות, תוכן עיקרי ותוכן משני בצורה ברורה יותר. זה יכול לעזור למודל להעריך משקל נכון יותר לטוקנים.
היה ספציפי וברור תן יותר פרטים על ההקשר הרצוי, התוצאה, אורך, פורמט, סגנון וכו'. זה ישפר את איכות ועקביות התשובות. שמור מתכונים בתבניות לשימוש חוזר.
היה תיאורי, השתמש בדוגמאות מודלים מגיבים טוב יותר לגישה של "הראה והסבר". התחל בגישת zero-shot שבה אתה נותן הוראה (בלי דוגמאות), ואז נסה few-shot עם כמה דוגמאות לתוצאה הרצויה. השתמש באנלוגיות.
השתמש ברמזים להניע השלמות תן למודל מילים או ביטויים התחלתיים שיכולים להניע אותו לכיוון התוצאה הרצויה.
חזור על עצמך לפעמים צריך לחזור על ההוראות למודל. תן הוראות לפני ואחרי התוכן העיקרי, השתמש בהוראה ורמז, וכו'. חזור ואמת מה עובד.
סדר הדברים חשוב הסדר בו אתה מציג מידע למודל עשוי להשפיע על התוצאה, אפילו בדוגמאות הלמידה, בגלל הטיית "העדכניות". נסה אפשרויות שונות לראות מה עובד הכי טוב.
תן למודל "מוצא" תן למודל תשובה חלופית שהוא יכול לספק אם הוא לא מצליח להשלים את המשימה. זה יכול להפחית סיכוי לתשובות שגויות או מומצאות.

כמו בכל עקרון מומלץ, זכור ש_התוצאות עשויות להשתנות_ לפי המודל, המשימה והתחום. השתמש בזה כנקודת התחלה, וחזור כדי למצוא מה עובד הכי טוב עבורך. הערך מחדש את תהליך הנדסת ההנחיות שלך ככל שמודלים וכלים חדשים יוצאים, תוך דגש על יכולת הרחבה ואיכות התשובות.

משימה

כל הכבוד! הגעת לסוף השיעור! עכשיו הזמן ליישם חלק מהעקרונות והטכניקות שלמדת עם דוגמאות אמיתיות!

למשימה, נשתמש במחברת Jupyter עם תרגילים שתוכל להשלים בצורה אינטראקטיבית. אפשר גם להרחיב את המחברת עם תאי Markdown וקוד משלך כדי לחקור רעיונות וטכניקות בעצמך.

כדי להתחיל, עשה fork למאגר ואז

  • (מומלץ) הפעל GitHub Codespaces
  • (אפשרות נוספת) שיבוט המאגר למחשב שלך והפעל אותו עם Docker Desktop
  • (אפשרות נוספת) פתח את המחברת בסביבת העבודה המועדפת עליך.

לאחר מכן, הגדר משתני סביבה

  • העתק את הקובץ .env.copy מהשורש ל-.env ומלא את הערכים AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT ו-AZURE_OPENAI_DEPLOYMENT. חזור לסעיף Learning Sandbox כדי ללמוד איך.

לאחר מכן, פתח את מחברת Jupyter

  • בחר את ה-Kernel הרצוי. אם השתמשת באפשרות 1 או 2, פשוט בחר את Kernel ברירת המחדל של Python 3.10.x שמסופק על ידי סביבת הפיתוח.

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

מסיבה זו אין קטעי פתרון קוד בשיעור זה. במקום זאת, במחברת יהיו תאי Markdown בשם "הפתרון שלי:" שמראים דוגמה אחת לתשובה.

בדיקת ידע

איזו מההנחיות הבאות היא הנחיה טובה לפי עקרונות סבירים?

  1. תראה לי תמונה של רכב אדום
  2. תראה לי תמונה של רכב אדום מדגם Volvo ודגם XC90 חונה ליד צוק עם שקיעה ברקע
  3. תראה לי תמונה של רכב אדום מדגם Volvo ודגם XC90

תשובה: 2, זו ההנחיה הטובה ביותר כי היא מפרטת "מה" ומוסיפה פרטים (לא סתם רכב אלא דגם מסוים) וגם מתארת את הסביבה הכללית. 3 היא הבאה בתור כי היא גם כוללת הרבה תיאור.

🚀 אתגר

נסה להשתמש בטכניקת "רמז" עם ההנחיה: השלם את המשפט "תראה לי תמונה של רכב אדום מדגם Volvo ו-". מה המודל משיב, ואיך היית משפר זאת?

עבודה מצוינת! המשך ללמוד

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

המשך לשיעור 5 בו נלמד על טכניקות הנחיה מתקדמות!


Certainly! Here is your requested translation to Hebrew:

הצהרת אחריות:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון כי תרגומים אוטומטיים עשויים להכיל שגיאות או אי-דיוקים. יש לראות במסמך המקורי בשפתו המקורית כמקור הסמכותי. למידע קריטי, מומלץ לפנות לתרגום מקצועי על ידי אדם. איננו אחראים לכל אי-הבנה או פירוש שגוי הנובעים מהשימוש בתרגום זה.