מודול זה מכסה מושגים וטכניקות חיוניות ליצירת פרומפטים יעילים במודלים גנרטיביים של בינה מלאכותית. האופן שבו אתה כותב את הפרומפט למודל שפה גדול (LLM) גם הוא חשוב. פרומפט המעוצב בקפידה יכול להשיג איכות תגובה טובה יותר. אך מה בדיוק משמעות המונחים פרומפט ו-הנדסת פרומפטים? וכיצד אני משפר את קלט הפרומפט שאני שולח למודל השפה? אלה השאלות שננסה לענות עליהן בפרק זה והבא.
בינה מלאכותית גנרטיבית מסוגלת ליצור תוכן חדש (למשל, טקסט, תמונות, קול, קוד וכו') בהתאם לבקשות משתמש. היא משיגה זאת באמצעות מודלי שפה גדולים כמו סדרת GPT של OpenAI ("טרנספורמר מאומן מראש גנרטיבי") המותאמים לשימוש בשפה טבעית ובקוד.
משתמשים יכולים כעת לתקשר עם מודלים אלו באמצעות פרדיגמות מוכרות כמו צ'אט, ללא צורך במומחיות טכנית או הכשרה. המודלים מבוססי-פרומפטים – המשתמשים שולחים קלט טקסטואלי (פרומפט) ומקבלים תגובת בינה מלאכותית (תוצאה). הם יכולים לאחר מכן "לדבר עם הבינה המלאכותית" באינטראקציות מרובות סבבים, ולשפר את הפרומפט עד שהתשובה תתאים לציפיותיהם.
"פרומפטים" הופכים כעת לממשק ה-תכנותי המרכזי באפליקציות בינה מלאכותית גנרטיביות, שמכוון את המודלים ומהווה גורם משפיע על איכות התגובות המתקבלות. "הנדסת פרומפטים" היא תחום מתפתח במהירות שמתמקד ב-עיצוב ואופטימיזציה של פרומפטים כדי לספק תגובות איכותיות ועקביות בקנה מידה רחב.
בשיעור זה נלמד מהי הנדסת פרומפטים, מדוע היא חשובה, וכיצד ניתן ליצור פרומפטים יעילים יותר עבור מודל ומטרת יישום נתונים. נבין את המושגים הבסיסיים ואת השיטות הטובות ביותר להנדסת פרומפטים – ונכיר סביבת "סנדבוקס" אינטראקטיבית ב-Jupyter Notebooks שבה נוכל לראות את המושגים מיושמים בדוגמאות ממשיות.
בסיום השיעור נוכל:
- להסביר מהי הנדסת פרומפטים ומדוע היא חשובה.
- לתאר את מרכיבי הפרומפט ואיך הם משמשים.
- ללמוד שיטות וטכניקות להנדסת פרומפטים.
- ליישם טכניקות שנלמדו בדוגמאות אמיתיות, בעזרת נקודת קצה של OpenAI.
הנדסת פרומפטים: תהליך של תכנון ושיפור קלטים שמכוונים את מודלי הבינה המלאכותית ליצירת תוצאות רצויות. טוקניזציה: התהליך של המרת טקסט ליחידות קטנות יותר, המכונות טוקנים, שהמודל יכול להבין ולעבד. מודלי שפה גדולים מכווני הוראות: מודלי שפה גדולים (LLMs) שעברו התאמה עדינה עם הוראות ברורות לשיפור דיוק ורלוונטיות התגובות שלהם.
הנדסת פרומפטים היא כיום אומנות יותר מאשר מדע. הדרך הטובה ביותר לשפר את האינטואיציה שלנו היא לתרגל יותר ולאמץ גישת ניסוי וטעייה שמשלבת מומחיות בתחום היישום עם טכניקות מומלצות ואופטימיזציות מותאמות למודל.
מחברת Jupyter הנלווית לשיעור זה מספקת סביבת סנדבוקס שבה ניתן לנסות את מה שלמדתם – תוך כדי תנועה או כחלק מאתגר הקוד בסוף השיעור. לביצוע התרגילים תצטרכו:
- מפתח API של Azure OpenAI – נקודת הקצה של השירות עבור מודל שפה גדול שמופעל.
- סביבת הרצה בפייתון – שבה ניתן להפעיל את המחברת.
- משתני סביבה מקומיים – השלימו את שלבי ה-SETUP כעת כדי להתכונן.
המחברת כוללת תרגילים מתחילים – אך מומלץ להוסיף גם תיאורים ב-Markdown וקטעי קוד (בקשות פרומפט) שלכם כדי לנסות עוד דוגמאות או רעיונות – ולבנות את האינטואיציה לעיצוב פרומפטים.
רוצים לקבל תמונת מצב גדולה של מה שהשיעור הזה מכסה לפני שנכנסים לעומק? עיינו במדריך המאור, שמעניק לכם תחושה של הנושאים המרכזיים והמסקנות החשובות בכל אחד מהם. מפת השיעור מובילה אתכם מהבנת המושגים והאתגרים הבסיסיים ועד התמודדות איתם בעזרת טכניקות הנדסת פרומפטים רלוונטיות ושיטות עבודה מומלצות. שימו לב כי סקטור "טכניקות מתקדמות" במדריך מתייחס לתוכן הנלמד בפרק הבא של תכנית הלימודים הזו.
עכשיו, נדבר על האופן שבו הנושא הזה מתקשר למשימת הסטארטאפ שלנו להביא חדשנות בינה מלאכותית לחינוך bringing AI innovation to education. אנו רוצים לבנות אפליקציות מבוססות בינה מלאכותית ללמידה אישית – אז בואו נחשוב על האופן שבו משתמשים שונים באפליקציה שלנו עשויים "לעצב" פרומפטים:
- מנהלים עשויים לבקש מהבינה המלאכותית לנתח נתוני תכניות לימודים כדי לאתר פערי כיסוי. הבינה המלאכותית יכולה לסכם תוצאות או להמחיש אותן עם קוד.
- מחנכים עשויים לבקש מהבינה המלאכותית ליצור תכנית שיעור עבור קהל יעד ונושא מסוימים. הבינה יכולה לבנות את התכנית האישית בפורמט מוגדר.
- תלמידים עשויים לבקש מהבינה המלאכותית לתת להם שיעור במקצוע קשה. הבינה יכולה להנחות את התלמידים עם שיעורים, רמזים ודוגמאות המותאמות לרמתם.
זו רק קצה הקרחון. עיינו ב-Prompts For Education – ספריית פרומפטים בקוד פתוח שנבחרה על ידי מומחי חינוך – כדי לקבל תחושה רחבה יותר של האפשרויות! נסו להריץ כמה מהפרומפטים בסנדבוקס או באמצעות OpenAI Playground כדי לראות מה קורה!
התחלנו את השיעור בהגדרת הנדסת פרומפטים כתהליך של עיצוב ואופטימיזציה של קלטים טקסטואליים (פרומפטים) כדי לספק תגובות עקביות ובעלות איכות (השלמות) למטרת יישום ומודל נתונים. ניתן לחשוב על כך כתהליך דו-שלבי:
- עיצוב הפרומפט הראשוני עבור מודל ומטרה מסוימים
- שיפור הפרומפט בצורה איטרטיבית כדי לשפר את איכות התגובה
זהו בהכרח תהליך של ניסוי וטעייה שמצריך אינטואיציה ומאמץ מצד המשתמש להשגת תוצאות מיטביות. מדוע זה חשוב? כדי לענות על שאלה זו, עלינו תחילה להבין שלושה מושגים:
- טוקניזציה = איך המודל "רואה" את הפרומפט
- מודלי שפה בסיסיים = איך מודל הבסיס "מעבד" פרומפט
- מודלי שפה מכווני הוראות = איך המודל יכול כעת לזהות "משימות"
מודל שפה גדול רואה פרומפטים כסידרה של טוקנים, שבה מודלים שונים (או גרסאות שונות של מודל) יכולים לפרק את אותו פרומפט בדרכים שונות. מכיוון שהמודלים מאומנים על טוקנים (ולא על טקסט גלמי), האופן שבו הטוקניזציה מתבצעת משפיע ישירות על איכות התגובה המופקת.
כדי לקבל אינטואיציה לגבי אופן פעולת הטוקניזציה, נסו כלים כמו OpenAI Tokenizer שמוצג למטה. העתקו את הפרומפט שלכם – וראו כיצד הוא מומר לטוקנים, תוך התבוננות איך תווי הרווח והנקודה מטופלים. שימו לב שהדוגמה מראה מודל ישן יותר (GPT-3) – לכן ייתכן שהתוצאה במודל חדש תהיה שונה.
לאחר שהפרומפט מומצל לטוקנים, התפקיד העיקרי של "מודל שפה בסיסי" (או מודל היסוד) הוא לחזות את הטוקן הבא בסדרה. מכיוון שמודלי השפה מאומנים על מאגרי טקסט עצומים, יש להם הבנה טובה של הקשרים הסטטיסטיים בין טוקנים ויכולת לבצע תחזיות אלה בביטחון מסוים. עם זאת, הם אינם מבינים את משמעות המילים בפרומפט או בטוקן; הם פשוט מזהים דפוס שניתן "להשלים" עם התחזית הבאה שלהם. הם יכולים להמשיך לחזות את הסדרה עד לסיום בהתערבות משתמש או תנאי קודם.
רוצים לראות איך השלמת פרומפט עובדת? הזינו את הפרומפט שלמעלה ל-Microsoft Foundry playground עם ההגדרות ברירת המחדל. המערכת מוגדרת לטפל בפרומפטים כבקשות למידע – כך שתקבלו השלמה שעונה להקשר זה.
אך מה אם המשתמש רוצה לראות משהו ספציפי שעומד בקריטריון או במטרה כלשהי? כאן נכנסים לתמונה המודלים מכווני ההוראות.
מודל שפה מכוון הוראות מתחיל במודל היסוד ועובר התאמה עדינה עם דוגמאות או זוגות קלט/פלט (למשל, מסרים מרובי סבבים) שיכולים להכיל הוראות ברורות – והתגובות של הבינה המלאכותית מנסות לעקוב אחר אותן הוראות.
משתמשים בטכניקות כמו Reinforcement Learning with Human Feedback (RLHF) שיכולות לאמן את המודל לעקוב אחרי הוראות וללמוד מפיוביק בדיעבד, כך שהוא מייצר תגובות המתאימות יותר ליישומים מעשיים ורלוונטיות למטרות המשתמש.
בואו ננסה – חזרו על הפרומפט שלמעלה, אך כעת שנו את הודעת המערכת כך שתכלול את ההוראה הבאה כהקשר:
סכם את התוכן שניתן לך עבור תלמיד בכיתה ב'. השאר את התוצאה לפסקה אחת עם 3-5 נקודות.
תשימו לב שהתוצאה מותאמת כעת למטרה ולפורמט הרצויים? מחנך יכול להשתמש בתגובה זו ישירות במצגות לשיעור.
כעת, כשהבנו כיצד מודלים מעבדים פרומפטים, נדבר על מדוע אנו צריכים הנדסת פרומפטים. התשובה טמונה בעובדה שמודלי השפה הנוכחיים מציגים מספר אתגרים שהופכים את השגת השלמות אמינות ועקביות לקשה יותר ללא השקעת מאמץ בבניית הפרומפט ואופטימיזציה שלו. לדוגמה:
-
תגובות המודל הן סטוכסטיות. אותו פרומפט כנראה יפיק תגובות שונות עם מודלים שונים או בגרסאות שונות של אותו מודל. ואף עלול להפיק תוצאות שונות עם אותו מודל בזמנים שונים. טכניקות הנדסת פרומפטים יכולות לעזור לנו לצמצם שונות זאת על ידי מתן כללים טובים יותר.
-
מודלים עלולים להמציא תגובות. המודלים מאומנים על מאגרים גדולים אך סופיים, כלומר חסרה להם ידע על מושגים מחוץ להיקף האימון. כתוצאה מכך הם עלולים לייצר השלמות שלא מדויקות, דמיוניות או מנוגדות לעובדות ידועות. טכניקות הנדסת פרומפטים מסייעות למשתמשים לזהות ולהפחית המצאות מסוג זה, למשל על ידי בקשת ציטוטים או הסברים מהבינה המלאכותית.
-
יכולות המודלים משתנות. מודלים חדשים או דורות חדשים יביאו יכולות עשירות יותר אך גם בעלי מאפיינים מסוימים והשפעות על עלות ומורכבות. הנדסת פרומפטים יכולה לסייע לפתח שיטות עבודה מומלצות ותהליכים שמעבירים על ההבדלים ומסתנכרנים לדרישות מודל ספציפיות בצורה נוחה ונגישה בקנה מידה רחב.
בואו נראה זאת בפעולה ב-OpenAI או Azure OpenAI Playground:
- השתמשו באותו פרומפט עם פריסות שונות של מודלים (למשל, OpenAI, Azure OpenAI, Hugging Face) – האם ראיתם הבדלים?
- השתמשו באותו פרומפט שוב ושוב עם אותה פריסת מודל (למשל, Azure OpenAI playground) – כיצד השתנו התגובות?
בקורס הזה, אנו משתמשים במונח "המצאה" כדי להתייחס לתופעה שבה מודלי שפה מייצרים לפעמים מידע אינו מדויק בשל מגבלות באימון או מגבלות אחרות. יתכן כי שמעתם גם את המונח "הלוצינציות" במאמרים פופולריים או מחקרים. עם זאת, אנו ממליצים בחום להשתמש במונח "המצאה" כדי למנוע אנתרופומורפיזם של ההתנהגות באמצעות אפיון תכונה אנושית לתוצאה ממונעת על ידי מכונה. זה גם מחזק את קווי ההנחיה לבינה מלאכותית אחראית בהקשר של מונחים, ומוציא מונחים שעלולים להיחשב כפוגעניים או בלתי כוללניים בהקשרים מסוימים.
רוצים להבין איך המצאות פועלות? חשבו על פרומפט שמבקש מהבינה המלאכותית ליצור תוכן בנושא שאינו קיים (כדי לוודא שהוא לא נמצא במאגרי האימון). למשל – ניסיתי את הפרומפט הבא:
פרומפט: צור תכנית שיעור על מלחמת המאדים בשנת 2076.
חיפוש באינטרנט הראה לי שישנם תיאורים בדיוניים (למשל, סדרות טלוויזיה או ספרים) על מלחמות מאדים – אך לא בשנת 2076. ההיגיון הבריא אומר ש-2076 הוא בעתיד ולכן לא יכול להיות מקושר לאירוע אמיתי.
אז מה קורה כשמריצים את הפקודה הזו עם ספקי LLM שונים?
תגובה 1: OpenAI Playground (GPT-35)
תגובה 2: Azure OpenAI Playground (GPT-35)
תגובה 3: : Hugging Face Chat Playground (LLama-2)
כפי שציפינו, כל דגם (או גרסת דגם) מייצר תגובות שונות במקצת בזכות התנהגות אקראית ושונות ביכולת הדגם. לדוגמה, דגם אחד פונה לקהל כיתה ח' בעוד שהאחר מניח תלמיד בית ספר תיכון. אבל כל שלושת הדגמים ייצרו תגובות שיכולות לשכנע משתמש לא מיודע שהאירוע היה אמיתי.
טכניקות הנדסת פרומפט כמו מטאפראופטינג ו_קונפיגורציית טמפרטורה_ עשויות להפחית במעט את ההמצאות של הדגם. ארכיטקטורות חדשות של הנדסת פרומפט משלבות גם כלים וטכניקות חדשות בזרימת הפרומפט, כדי להקטין או להפחית חלק מההשפעות האלו.
נסיים את החלק הזה בהבנת כיצד משתמשים בהנדסת פרומפט בפתרונות בעולם האמיתי על ידי הסתכלות על מחקר מקרה: GitHub Copilot.
GitHub Copilot הוא ה"שותף המהנדס" שלך ב-AI – הוא ממיר פקודות טקסט להשלמות קוד ומשולב בסביבת הפיתוח שלך (למשל, Visual Studio Code) לחוויית משתמש חלקה. כמו שמתועד בסדרת הבלוגים למטה, הגרסה המוקדמת התבססה על דגם OpenAI Codex – כאשר המהנדסים הבינו מהר את הצורך לכוונן היטב את הדגם ולפתח טכניקות הנדסת פרומפט טובות יותר, כדי לשפר את איכות הקוד. ביולי, הם חשפו דגם AI משופר שעובר את Codex להציע הצעות מהירות יותר.
קראו את הפוסטים בסדר, לעקוב אחרי מסע הלמידה שלהם.
- מאי 2023 | GitHub Copilot משתפר בהבנת הקוד שלך
- מאי 2023 | פנים GitHub: עבודה עם ה-LLM מאחורי GitHub Copilot.
- יוני 2023 | איך לכתוב פרומפטים טובים יותר עבור GitHub Copilot.
- יולי 2023 | .. GitHub Copilot עובר את Codex עם דגם AI משופר
- יולי 2023 | מדריך למפתח להנדסת פרומפט ו-LLM
- ספטמבר 2023 | איך לבנות אפליקציית LLM ארגונית: לקחים מ-GitHub Copilot
אתם גם יכולים לעיין בבלוג ההנדסה שלהם לפוסטים נוספים כמו זה שמראה איך דגמים וטכניקות אלו מיושמים להנעת יישומים בעולם האמיתי.
ראינו מדוע הנדסת פרומפט חשובה - עכשיו נבין איך פרומפטים נבנים כדי שנוכל להעריך טכניקות שונות לעיצוב פרומפט יעיל יותר.
נתחיל עם הפרומפט הבסיסי: קלט טקסט שנשלח לדגם ללא הקשר נוסף. הנה דוגמה - כשאנחנו שולחים את המילים הראשונות של ההמנון הלאומי של ארה"ב ל-OpenAI Completion API, הוא מיד משלים את התגובה עם השורות הבאות, ומדגים את התנהגות החיזוי הבסיסית.
| פרומפט (קלט) | השלמה (פלט) |
|---|---|
| Oh say can you see | זה נשמע כאילו אתה מתחיל בשיר "The Star-Spangled Banner", ההמנון הלאומי של ארצות הברית. מילות השיר המלאות הן ... |
עכשיו נוסיף הקשר והוראות לפרומפט הבסיסי הזה. ה-Chat Completion API מאפשר לנו לבנות פרומפט מורכב כאוסף של הודעות עם:
- זוגות קלט/פלט המשקפים קלט של המשתמש ותגובה של העוזר.
- הודעת מערכת שקובעת את ההקשר להתנהגות או אישיות העוזר.
הבקשה היא כעת בצורה הבאה, שבה ה-טוקניזציה לוכדת בצורה יעילה מידע רלוונטי מהקשר ושיחה. כעת, שינוי ההקשר במערכת יכול להיות בעל השפעה משמעותית על איכות ההשלמות, כפי שהקלטים שניתנים למשתמש.
response = client.responses.create(
model="gpt-5-mini",
input=[
{"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 שאפשר להעתיק-להדביק לקובץ ולוודא לפי הצורך | מורכב. מעוצב. |
בדוגמאות שלמעלה, הפרומפט עדיין היה פתוח למדי, ומאפשר ל-LLM להחליט איזו חלק מהמאגר המקדים שלו רלוונטי. עם דפוס העיצוב תוכן ראשי, טקסט הקלט מחולק לשני חלקים:
- הוראה (פעולה)
- תוכן רלוונטי (שמשפיע על הפעולה)
הנה דוגמה שבה ההוראה היא "סכם זאת בשתי משפטים".
| פרומפט (קלט) | השלמה (פלט) |
|---|---|
| צדק הוא הפלנטה החמישית מהשמש והגדולה ביותר במערכת השמש. הוא ענק גז עם מסת אחד אלף מזו של השמש, אך פעמיים וחצי ממסת כל הפלנטות האחרות במערכת השמש יחד. צדק הוא אחת מהעצמים המבריקים ביותר שנראים לעין בלתי מזוינת בשמיים בלילה, והוא ידוע מזה עתיקות לפני התקופה המתועדת. הוא נקרא על שם האל הרומי צדק.[19] כשהוא נצפה מכדור הארץ, צדק יכול להיות מבריק מספיק כדי שהאור המוחזר ייצר צללים נראים,[20] ובממוצע הוא העצם הטבעי השלישי ביותר מבריק בשמיים בלילה אחרי הירח ונוגה. סכם זאת בשני משפטים קצרים |
צדק, הפלנטה החמישית מהשמש, הוא הגדולה ביותר במערכת השמש וידוע כאחד מהעצמים המבריקים בשמיים בלילה. הוא נקרא על שם האל הרומי צדק, והוא ענק גז שמסתו היא פעמיים וחצי מסת כל שאר הפלנטות במערכת השמש יחד. |
ניתן להשתמש בקטע התוכן הראשי בדרכים שונות כדי להניע הוראות יעילות יותר:
- דוגמאות - במקום לומר לדגם מה לעשות עם הוראה מפורשת, תנו לו דוגמאות למה לעשות ותנו לו להסיק את התבנית.
- רמזים - תעקבו אחרי ההוראה עם "רמז" שמכוון את ההשלמה, ומנחה את הדגם לתגובות רלוונטיות יותר.
- תבניות - אלו 'מתכונים' חוזרים לפרומפטים עם משתנים שניתן להתאים עם נתונים למקרי שימוש ספציפיים.
בואו נבדוק את אלו בפעולה.
זו שיטה שבה משתמשים בתוכן הראשי כדי "להאכיל את הדגם" בדוגמאות לפלט הרצוי עבור הוראה נתונה, ומאפשרים לו להסיק את התבנית לפלט הרצוי. על פי מספר הדוגמאות שניתנו, יש לנו פרומפטינג אפס-ירי, ירי-יחיד, ירי-מועט וכן הלאה.
הפרומפט כעת מורכב משלושה מרכיבים:
- תיאור המשימה
- כמה דוגמאות לפלט הרצוי
- תחילת דוגמה חדשה (שהופכת לתיאור משימה מרומז)
| סוג למידה | פרומפט (קלט) | השלמה (פלט) |
|---|---|---|
| אפס-ירי | "השמש זורחת". תרגם לספרדית | "El Sol está brillando". |
| ירי-יחיד | "השמש זורחת" => ""El Sol está brillando". "זה יום קר ורטוב" => |
"Es un día frío y ventoso". |
| ירי-מועט | השחקן רץ על הבסיסים => בייסבול השחקן קלע אס => טניס השחקן קלע שש => קריקט השחקן עשה סל-דאנק => |
כדורסל |
שימו לב שצריך לספק הוראה מפורשת ("תרגם לספרדית") בפרומפט אפס-ירי, אך היא נסקה בדגם ירי-יחיד. הדוגמה ירי-מועט מראה שעם הוספת דוגמאות הדגמים יכולים להסיק יותר מדויק ללא הוראות נוספות.
טכניקה נוספת לשימוש בתוכן הראשי היא לספק רמזים במקום דוגמאות. במקרה כזה, נותנים לדגם דחיפה קלה לכיוון הנכון על ידי התחלתו בקטע שמראה את פורמט התגובה הרצוי. הדגם "לוקח את הרמז" וממשיך באותו הקו.
| מספר הרמזים | פרומפט (קלט) | השלמה (פלט) |
|---|---|---|
| 0 | צדק הוא הפלנטה החמישית מהשמש והגדולה ביותר במערכת השמש. הוא ענק גז עם מסת אחד אלף מזו של השמש, אך פעמיים וחצי ממסת כל הפלנטות האחרות במערכת השמש יחד. צדק הוא אחת מהעצמים המבריקים ביותר שנראים לעין בלתי מזוינת בשמיים בלילה, והוא ידוע מזה עתיקות לפני התקופה המתועדת. סכם זאת |
צדק היא הפלנטה הגדולה ביותר במערכת השמש והחמישית מהשמש. היא ענק גז עם מסת 1/1000 מזו של השמש, אך כבדה יותר מכל שאר הפלנטות יחד. ציוויליזציות עתיקות ידעו על צדק זמן רב, והוא נראית בבירור בשמי הלילה. |
| 1 | צדק הוא הפלנטה החמישית מהשמש והגדולה ביותר במערכת השמש. הוא ענק גז עם מסת אחד אלף מזו של השמש, אך פעמיים וחצי ממסת כל הפלנטות האחרות במערכת השמש יחד. צדק הוא אחת מהעצמים המבריקים ביותר שנראים לעין בלתי מזוינת בשמיים בלילה, והוא ידוע מזה עתיקות לפני התקופה המתועדת. סכם זאת מה שלמדנו הוא שצדק |
הוא הפלנטה החמישית מהשמש והגדולה ביותר במערכת השמש. הוא ענק גז עם מסת אחד אלף מזו של השמש, אך פעמיים וחצי מזו של כל שאר הפלנטות יחד. הוא נראה לעין בלתי מזוינת ומוכר מאז העת העתיקה. |
| 2 | כוכב הלכת צדק הוא הכוכב החמישי מהשמש והגדול ביותר במערכת השמש. זהו כוכב-ענק גזי עם מסה שהיא אלףית ממסת השמש, אך כפולה פי שניים וחצי מכל שאר הכוכבים במערכת השמש ביחד. צדק הוא אחד מהגופים הבהירים ביותר הנראים לעין בלתי מזוינת בשמי הלילה, והוא היה מוכר לציוויליזציות עתיקות עוד לפני התקופה המוקלטת. סכם זאת 3 עובדות מובילות שלמדנו: |
1. כוכב הלכת צדק הוא הכוכב החמישי מהשמש והגדול ביותר במערכת השמש. 2. זהו כוכב-ענק גזי עם מסה שהיא אלףית ממסת השמש... 3. צדק נצפה לעין בלתי מזוינת מאז העת העתיקה ... |
תבנית הנחייה היא מתכון מוגדר מראש להנחייה שניתן לשמור ולשחזר לפי הצורך, כדי להניע חוויות משתמש עקביות בקנה מידה. בצורה הפשוטה ביותר, זוהי אוסף של דוגמאות הנחייה כמו זו של OpenAI שמספקת הן את רכיבי ההנחייה האינטראקטיביים (הודעות משתמש ומערכת) והן את פורמט הבקשה המונע על ידי API - כדי לתמוך בשימוש חוזר.
בצורה המורכבת יותר כמו דוגמה זו מ-LangChain היא מכילה מקומות ממלאים שניתן להחליף בנתונים ממקורות מגוונים (קלט משתמש, הקשר מערכת, מקורות נתונים חיצוניים וכו') כדי לייצר הנחייה דינמית. זה מאפשר לנו ליצור ספריה של הנחיות לשימוש חוזר שניתן להשתמש בהן כדי להניע חוויות משתמש עקביות תכנותית בקנה מידה.
בסופו של דבר, הערך האמיתי של תבניות טמון ביכולת ליצור ולפרסם ספריות הנחיות לתחומי יישום אנכיים - שבהן תבנית ההנחייה מותאמת כעת באופטימיזציה כדי לשקף הקשר או דוגמאות ספציפיות ליישום שעושות את התגובות רלוונטיות ומדויקות יותר לקהל המשתמש המיועד. מאגר Prompts For Edu הוא דוגמה נהדרת לגישה זו, שמאגדת ספריית הנחיות לתחום החינוך תוך דגש על מטרות מרכזיות כמו תכנון שיעורים, עיצוב תוכניות לימוד, חונכות לסטודנטים וכו'.
אם נחשוב על בניית הנחייה כהכילה הוראה (משימה) ותוכן ראשי (תוכן עיקרי), אז תוכן משני הוא כמו הקשר נוסף שאנו מספקים כדי להשפיע על הפלט בדרך כלשהי. זה יכול להיות פרמטרים לכיוונון, הוראות עיצוב, טקסונומיות נושאים וכו' שיכולים לסייע למודל להתאים את תגובתו כך שתתאים למטרות או לציפיות המשתמש הרצויות.
לדוגמה: בהינתן קטלוג קורסים עם מטה-נתונים מפורטים (שם, תיאור, רמה, תגי מטה-נתונים, מרצה וכו') על כל הקורסים הזמינים בתכנית הלימודים:
- נוכל להגדיר הוראה ל"סכם את קטלוג הקורסים לסתיו 2023"
- נוכל להשתמש בתוכן הראשי כדי לספק כמה דוגמאות לפלט הרצוי
- נוכל להשתמש בתוכן המשני כדי לזהות את 5 ה"תגים" החשובים ביותר.
כעת, המודל יכול לספק סיכום בפורמט המוצג בדוגמאות, אך אם תוצאה מכילה תגיות מרובות, הוא יכול לתת עדיפות לאותם 5 תגיות שנקבעו בתוכן המשני.
עכשיו כשאנחנו יודעים כיצד ניתן לבנות הנחיות, נוכל להתחיל לחשוב כיצד לעצב אותן כך שישקפו שיטות עבודה מומלצות. נוכל לחשוב על כך בחלקים שניים - גישה נכונה (mindset) ויישום הטכניקות הנכונות.
הנדסת הנחיות היא תהליך של ניסוי וטעייה, לכן שמרו בראש שלושה גורמים מנחים רחבים:
-
הבנת התחום חשובה. הדיוק והרלוונטיות של התגובה הם פונקציה של ה תחום שבו היישום או המשתמש פועל. השתמשו באינטואיציה ובמומחיות התחום שלכם כדי להתאים טכניקות נוסף. למשל, הגדירו אישיויות ייחודיות לתחום בתבניות המערכת שלכם, או השתמשו ב תבניות ייחודיות לתחום בהנחיות המשתמש שלכם. ספקו תוכן משני המשקף הקשרים ייחודיים לתחום, או השתמשו ב רמזים ודוגמאות ייחודיות לתחום כדי להכווין את המודל לדפוסי שימוש מוכרים.
-
הבנת המודל חשובה. אנו יודעים שמודלים הם סטוכסטיים מטבעם. אך מימושי מודל יכולים להשתנות גם בהתאם למאגר הנתונים עליו אומנו (ידע מראש), ליכולות שהם מספקים (למשל, דרך API או SDK) ולסוג התוכן שאליו הם מותאמים (למשל, קוד לעומת תמונות לעומת טקסט). הבינו את החוזקות והמגבלות של המודל בו אתם משתמשים, והשתמשו בידע זה כדי לתעדף משימות או לבנות תבניות מותאמות אישית המותאמות ליכולות המודל.
-
חשיבות הלולאה והוולידציה. המודלים מתפתחים במהירות, וכך גם הטכניקות להנדסת הנחיות. כמומחה תחום, ייתכן שיש לכם הקשר ספציפי או קריטריונים ל היישום שלכם, שאינם חלים על הקהילה הרחבה יותר. השתמשו בכלי וטכניקות הנדסת הנחיות כדי "להאיץ" את בניית ההנחייה, ולאחר מכן בצעו לולאה ואימות התוצאות תוך שימוש באינטואיציה ובמומחיות התחום שלכם. תעדו את התובנות שלכם וצרו מאגר ידע (למשל, ספריות הנחיות) שניתן להשתמש בו כקו בסיס חדש לאחרים, עבור לולאות מהירות יותר בעתיד.
עכשיו נבחן שיטות עבודה מומלצות נפוצות המומלצות על ידי OpenAI ו Azure OpenAI מומחים.
| מה | למה |
|---|---|
| העריכו את המודלים האחרונים. | דורות חדשים של מודלים צפויים לכלול תכונות ואיכות משופרות - אך עלולים גם לגרום לעלויות גבוהות יותר. העריכו אותם לפי השפעה, ואז קבלו החלטות על מעבר. |
| הפרידו בין הוראות להקשר | בדקו האם המודל/הספק שלכם מגדיר גבולות להבחנה בין הוראות, תוכן ראשי ותוכן משני בצורה ברורה יותר. זה יכול לעזור למודלים להקצות משקלים מדויקים יותר לטוקנים. |
| היו ספציפיים וברורים | ספקו פרטים נוספים על ההקשר הרצוי, התוצאה, האורך, הפורמט, הסגנון וכו'. זה ישפר גם את האיכות וגם את העקביות של התגובות. קיבעו מתכונים בתבניות לשימוש חוזר. |
| היו תיאוריים, השתמשו בדוגמאות | המודלים עשויים להגיב טוב יותר לגישה של "הראה וספר". התחילו בגישת שונה-אפס שבה אתם נותנים הוראה (אבל ללא דוגמאות) ואז נסו שונה-מעט כשיונון, המספק כמה דוגמאות לפלט הרצוי. השתמשו באנלוגיות. |
| השתמשו ברמזים כדי לזרז השלמות | נדדו אותו לעבר תוצאה רצויה על ידי מתן מילים או ביטויים מובילים שיכולים לשמש נקודת התחלה לתגובה. |
| חזרו על עצמכם | לפעמים תצטרכו לחזור על עצמכם למודל. ספקו הוראות לפני ואחרי התוכן הראשי, השתמשו בהוראה ורמז, וכו'. בצעו חזרות ואימות כדי לראות מה עובד. |
| הסדר חשוב | הסדר בו אתם מציגים מידע למודל עשוי להשפיע על הפלט, גם בדוגמאות הלמידה, בזכות הטיה של עדכניות. נסו אפשרויות שונות כדי לגלות מה עובד הכי טוב. |
| תנו למודל אפשרות “יציאה” | ספקו למודל תגובת המשך גיבוי שתוכל לספק במקרה שהוא לא מצליח להשלימה את המשימה מסיבה כלשהי. זה יכול להפחית סיכוי להפקת תגובות שקריות או מומצאות. |
כמו בכל שיטה מומלצת, זכרו ש התוצאה שלכם עשויה להשתנות בהתאם למודל, המשימה והתחום. השתמשו בכך כנקודת התחלה, וחזרו על התהליך למציאת מה שהכי מתאים לכם. העריכו מחדש את תהליך הנדסת ההנחות שלכם כל הזמן ככל שמודלים וכלים חדשים זמינים, עם דגש על סקלביליות התהליך ואיכות התגובה.
ברכות! הגעתם לסוף השיעור! הגיע הזמן לבחון חלק מהמושגים והטכניקות האלה עם דוגמאות ממשיות!
עבור המטלה שלנו, נשתמש ב-Jupyter Notebook עם תרגילים שתוכלו להשלים אינטראקטיבית. תוכלו גם להרחיב את ה-Notebook עם תאים משלכם במרקדאון וקוד כדי לחקור רעיונות וטכניקות בעצמכם.
- (מומלץ) הפעלו GitHub Codespaces
- (כחלופה) השיבו עותק מהרפוזיטורי למכשיר המקומי שלכם והשתמשו בו עם Docker Desktop
- (כחלופה) פתחו את ה-Notebook בסביבת הריצה המועדפת עליכם.
- העתיקו את הקובץ
.env.copyשבשורש הרפוזיטורי ל-.envומלאו את הערכיםAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTו-AZURE_OPENAI_DEPLOYMENT. חזרו למדור למידת החול כדי ללמוד כיצד.
- בחרו את קרנל הריצה. אם אתם משתמשים באפשרויות 1 או 2, פשוט בחרו בקרנל Python 3.10.x המוגדר כברירת מחדל שמסופק על ידי מכולת הפיתוח.
אתם מוכנים להריץ את התרגילים. שימו לב שאין פה תשובות נכונות או שגויות - רק חקירת אפשרויות בניסוי וטעייה ופיתוח אינטואיציה למה עובד עבור מודל ותחום יישום מסוימים.
מסיבה זו אין קטעי פתרון קוד בשיעור הזה. במקום זאת, ל-Notebook יהיו תאי Markdown שכותרתם "הפתרון שלי:" שמציג דוגמה אחת לפלט כהפניה.
איזו מבין ההנחיות הבאות היא טובה ועומדת בשיטות עבודה סבירות?
- תראה לי תמונה של רכב אדום
- תראה לי תמונה של רכב אדום מדגם Volvo ודגם XC90 חונה על צוק עם השמש שוקעת
- תראה לי תמונה של רכב אדום מדגם Volvo ודגם XC90
א: 2 הוא ההנחייה הטובה ביותר מכיוון שהיא מספקת פרטים על "מה" ונכנסת לספציפיות (לא סתם רכב אלא דגם מדויק) וגם מתארת את הסביבה הכוללת. הנחייה 3 היא השנייה בטיבה כי היא גם מכילה הרבה תיאורים.
נסו לנצל את טכניקת ה"רמז" עם ההנחייה: השלם את המשפט "תראה לי תמונה של רכב אדום מדגם Volvo ו...". מה התגובה, ואיך הייתם משפרים אותה?
רוצים ללמוד עוד על מושגי הנדסת הנחיות שונים? גשו לדף הלמידה המתמשכת כדי למצוא משאבים מעולים נוספים על הנושא.
עברו לשיעור 5 שבו נבחן טכניקות הנחיה מתקדמות!
כתב ויתור: מסמך זה תורגם באמצעות שירות תרגום אוטומטי Co-op Translator. למרות שאנו שואפים לדיוק, יש לקחת בחשבון שתרגומים אוטומטיים עלולים להכיל שגיאות או אי-דיוקים. יש להחשיב את המסמך המקורי בשפתו הטבעית כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי מתרגם אדם. אנו לא אחראים לכל אי-הבנה או פירוש שגוי הנובע מהשימוש בתרגום זה.







