מודול זה מכסה מושגים וטכניקות חיוניות ליצירת פקודות יעילות במודלים גנרטיביים של בינה מלאכותית. האופן שבו אתם כותבים את הפקודה ל-LLM חשוב גם הוא. פקודה שנכתבה בקפידה יכולה להשיג איכות תגובה טובה יותר. אבל מה בדיוק משמעות המונחים פקודה ו-הנדסת פקודות_? וכיצד אשפר את קלט הפקודה שאני שולח ל-LLM? אלה הן השאלות שננסה לענות להן בפרק זה ובפרקים הבאים.
בינה מלאכותית גנרטיבית מסוגלת ליצור תוכן חדש (לדוגמה, טקסט, תמונות, אודיו, קוד וכו') בתגובה לבקשות משתמש. היא עושה זאת באמצעות מודלים לשוניים גדולים כמו סדרת GPT של OpenAI ("טרנספורמר מאומן מראש גנרטיבי") שמאמנים אותם לשימוש בשפה טבעית ובקוד.
כעת משתמשים יכולים לתקשר עם המודלים הללו באמצעות פרדיגמות מוכרות כמו שיחה, ללא צורך בידע טכני או אימון. המודלים הם מבוססי פקודות – המשתמשים שולחים קלט טקסטואלי (פקודה) ומקבלים חזרה את תגובת הבינה המלאכותית (השלמה). ניתן להמשיך "לשוחח עם הבינה המלאכותית" במחזורים מרובים, ולחדד את הפקודה עד שהתשובה תואמת את הציפיות.
"הפקודות" הופכות מעתה לממשק התכנותי העיקרי של אפליקציות בינה מלאכותית גנרטיבית, המספר למודלים מה לעשות ומשפיע על איכות התגובות המוחזרות. "הנדסת פקודות" הוא תחום מחקר מתפתח במהירות המתמקד ב-עיצוב ואופטימיזציה של פקודות כדי לספק תגובות עקביות ואיכותיות בקנה מידה.
בשיעור זה נלמד מהי הנדסת פקודות, מדוע היא חשובה, וכיצד ניתן ליצור פקודות יעילות יותר עבור מודל מסוים ומטרת יישום. נבין מושגים מרכזיים ושיטות עבודה מומלצות בהנדסת פקודות – ונלמד על סביבת "מגרש משחקים" אינטראקטיבית ב-Jupyter Notebooks שבה נוכל לראות את המושגים מיושמים בדוגמאות אמיתיות.
בסיום שיעור זה נוכל:
- להסביר מהי הנדסת פקודות ולמה היא חשובה.
- לתאר את רכיבי הפקודה וכיצד משתמשים בהם.
- ללמוד שיטות עבודה מומלצות וטכניקות להנדסת פקודות.
- ליישם את הטכניקות הנלמדות בדוגמאות אמיתיות, תוך שימוש ב-EndPoint של OpenAI.
הנדסת פקודות: העיסוק בתכנון ושכלול הקלטים להכוונת מודלי AI ליצירת פלט רצוי.
טוקניזציה: התהליך של המרת טקסט ליחידות קטנות יותר, הנקראות טוקנים, שהמודל יכול להבין ולעבד.
LLMs ממוקדי הוראות: מודלים לשוניים גדולים (LLMs) שעברו כוונון עדין באמצעות הוראות ספציפיות לשיפור דיוק ורלוונטיות התגובה.
הנדסת פקודות היא כיום יותר אומנות מאשר מדע. הדרך הטובה ביותר לשפר את האינטואיציה שלנו בעניין היא להתאמן יותר ולאמץ גישת ניסוי וטעייה המשולבת במומחיות בתחום היישום עם טכניקות מומלצות ואופטימיזציות למודל הספציפי.
מחברת ה-Jupyter הנלווית לשיעור זה מספקת סביבת מגרש משחקים שבה תוכלו להתנסות במה שלמדתם – ככל שתתקדמו או כחלק מאתגר הקוד בסוף. כדי להפעיל את התרגילים, תזדקקו ל:
- מפתח API של Azure OpenAI - נקודת קצה לשירות עבור מודל LLM בפריסה.
- סביבת הרצה של Python - בה ניתן להריץ את המחברת.
- משתני סביבה מקומיים - סיימו את שלבי ה-SETUP כעת כדי להתכונן.
המחברת מגיעה עם תרגילים התחלתיים - אבל מומלץ להוסיף את ה-Markdown שלכם (תיאור) ואת חלקי ה-Code (בקשות פקודה) כדי לנסות דוגמאות או רעיונות נוספים - ולבנות את האינטואיציה שלכם לעיצוב פקודות.
רוצים לקבל תמונה רחבה של מה שהשיעור הזה מכסה לפני שאתם צוללים? צפו במדריך הממוחשב הזה, שמעניק לכם מושג על הנושאים המרכזיים והנקודות החשובות למחשבה בכל אחד מהם. מפת הדרכים של השיעור מובילה אתכם מהבנת המושגים והאתגרים המרכזיים לטיפול בהם באמצעות טכניקות הנדסת פקודות רלוונטיות ושיטות עבודה מומלצות. שימו לב שפרק "טכניקות מתקדמות" במדריך זה מתייחס לתוכן המכוסה בפרק הבא בתכנית הלימודים הזו.
עכשיו נדבר על איך הנושא הזה קשור למשימת הסטארטאפ שלנו בנושא להביא חדשנות בינה מלאכותית לחינוך. אנו רוצים לבנות יישומים מבוססי AI ללמידה מותאמת אישית - אז בואו נבחן איך משתמשים שונים ביישום שלנו עשויים "לעצב" פקודות:
- מנהלנים עשויים לבקש מה-AI לנתח נתוני תוכנית לימודים כדי לזהות פערים בכיסוי. ה-AI יכול לסכם תוצאות או להמחיש אותן עם קוד.
- מחנכים עשויים לבקש מה-AI ליצור תכנית שיעור לקהל יעד ונושא מסוימים. ה-AI יכול לבנות את התכנית המותאמת בפורמט מוגדר.
- תלמידים עשויים לבקש מה-AI להדריך אותם בנושא קשה. ה-AI יכול כעת להנחות תלמידים עם שיעורים, רמזים ודוגמאות המתאימות לרמתם.
וזה רק קצה הקרחון. בדקו את Prompts For Education - ספריית פקודות קוד פתוח שערכו מומחי חינוך - כדי לקבל מושג רחב יותר על האפשרויות! נסו להריץ כמה מהפקודות האלה במגרש המשחקים או ב-OpenAI Playground כדי לראות מה קורה!
התחלנו שיעור זה בהגדרת הנדסת פקודות כתהליך של תכנון ואופטימיזציה של קלטי טקסט (פקודות) כדי לספק השלמות עקביות ואיכותיות למטרה ויישום נתונים ולהתאמה למודל. ניתן לחשוב על כך כתהליך שני שלבים:
- תכנון הפקודה הראשונית עבור מודל ומטרה נתונים
- שכלול הפקודה באופן איטרטיבי כדי לשפר את איכות התגובה
מדובר בהכרח בתהליך ניסוי וטעייה שדורש אינטואיציה ומאמץ משתמש כדי לקבל תוצאות אופטימליות. אז למה זה חשוב? כדי לענות על שאלה זו, ראשית עלינו להבין שלוש מושגים:
- טוקניזציה = כיצד המודל "רואה" את הפקודה
- מודלים בסיסיים LLM = כיצד המודל הבסיסי "מעבד" פקודה
- מודלים ממוקדי הוראות LLM = כיצד המודל יכול כעת לזהות "משימות"
מודל LLM רואה פקודות כ_רצף של טוקנים_ כאשר מודלים שונים (או גרסאות שונות של מודל) יכולים לטוקנז את אותה הפקודה בדרכים שונות. מאחר ש-LLMs מאומנים על טוקנים (ולא על טקסט גולמי), אופן הטוקניזציה של הפקודות משפיע ישירות על איכות התגובה המיוצרת.
כדי לקבל אינטואיציה כיצד עובדת הטוקניזציה, נסו כלים כמו OpenAI Tokenizer המוצג למטה. העתיקו את הפקודה שלכם - וראו כיצד היא מומרת לטוקנים, תוך תשומת לב לאופן שבו מטופלים תווי רווח וסימני פיסוק. שימו לב שהדוגמה מציגה LLM ישן יותר (GPT-3) - אז ניסיון עם מודל חדש יותר עשוי להניב תוצאה שונה.
לאחר טוקניזציה של הפקודה, הפעולה העיקרית של "מודל בסיסי LLM" (או מודל הבסיס) היא לחזות את הטוקן הבא ברצף. מכיוון שבניו למידה מיומנים על מערכי נתוני טקסט עצומים, יש להם הבנה טובה של היחסים הסטטיסטיים בין הטוקנים ויכולים לבצע את התחזית באמינות מסוימת. שימו לב שהם לא מבינים את משמעות המילים בפקודה או בטוקן; הם רואים רק דפוס שיכולים "להשלים" עם התחזית הבאה שלהם. הם יכולים להמשיך לנבא את רצף הטוקנים עד שמופעלת הפסקה על ידי המשתמש או תנאי שנקבע מראש.
רוצים לראות כיצד השלמה מבוססת פקודות עובדת? הזינו את הפקודה הנ"ל ב-Azure OpenAI Studio Chat Playground עם הגדרות ברירת המחדל. המערכת מוגדרת לטפל בפקודות כבקשות מידע – כך שתראו השלמה העונה להקשר זה.
אבל מה אם המשתמש רצה לראות משהו ספציפי העונה לקריטריונים או למטרת משימה? כאן נכנסים לתמונה ה-LLMs ה-המכוונים על פי הוראות.
מודל לוּמדי (Instruction Tuned) LLM מתחיל עם המודל הבסיסי ומכוון אותו בעדינות באמצעות דוגמאות או זוגות קלט/פלט (למשל, "הודעות" רב-מחזוריות) שיכולים לכלול הוראות ברורות – והתגובה של ה-AI מנסה לעקוב אחר ההוראה.
טכניקות אלה כוללות למידה עם חיזוק המשוב האנושי (RLHF) שיכולות לאמן את המודל לעקוב אחרי הוראות ו-ללמוד ממשוב כדי לייצר תגובות המתאימות יותר ליישומים מעשיים ורלוונטיות יותר למטרות המשתמש.
בואו ננסה זאת – חזרו לפקודה שלעיל, אך עכשיו שנו את הודעת המערכת כדי לספק את ההוראה הבאה כהקשר:
סכם תוכן שניתן לך לתלמיד בכיתה ב'. שמור את התוצאה לפסקה אחת עם 3-5 נקודות בולטות.
רואים כיצד התוצאה כעת מכוונת להראות את המטרה והפורמט הרצויים? מחנך יכול כעת להשתמש ישירות בתגובה הזו במצגות עבור הכיתה.
כעת כשאנחנו יודעים כיצד המודלים מעבדים פקודות, בואו נדבר על מדוע אנו זקוקים להנדסת פקודות. התשובה נעוצה בעובדה שמודלים LLM עכשוויים מציבים מספר אתגרים שהופכים את השגת השלמות אמינות ועקביות לקשה יותר ללא השקעת מאמץ בבניית הפקודה ואופטימיזציה שלה. לדוגמה:
-
תגובות המודל הינן מקריות. אותה פקודה צפויה לייצר תגובות שונות במודלים שונים או בגרסאות שונות של אותו מודל. ואף עלולה להניב תוצאות שונות באותו מודל בזמנים שונים. טכניקות הנדסת פקודות יכולות לסייע להקטין שינויים אלו על ידי מתן גבולות טובים יותר.
-
מודלים עשויים להמציא תגובות. מודלים מאומנים עם מערכי נתונים גדולים אך סופיים, כלומר חסרים ידע לגבי מושגים מחוץ לטווח האימון. כתוצאה מכך, הם עלולים לייצר השלמות שאינן מדויקות, דמיוניות או סותרות באופן ישיר עובדות ידועות. טכניקות הנדסת פקודות מסייעות למשתמשים לזהות ולהפחית המצאות כאלו, למשל על ידי בקשת ציטוטים או היגיון מה-AI.
-
יכולות המודל משתנות. דורות או דגמים חדשים מציעים יכולות עשירות יותר אך מביאים גם תכונות ייחודיות ואיזונים שונים בעלויות ומורכבות. הנדסת פקודות מסייעת לפתח שיטות עבודה וזרימות עבודה המסתרות הבדלים ומסתגלות לדרישות ספציפיות למודל בצורה נרחבת וחלקה.
בואו נראה זאת בפעולה ב-OpenAI או ב-Azure OpenAI Playground:
- השתמשו באותה הפקודה בפריסות LLM שונות (למשל, OpenAI, Azure OpenAI, Hugging Face) – האם ראיתם שינויים?
- השתמשו באותה הפקודה שוב ושוב באותה פריסת LLM (למשל, Azure OpenAI Playground) – כיצד שונות תגובות אלו?
בקורס זה, אנו משתמשים במונח "המצאה" להתייחס לתופעה שבה לעיתים מודלים LLM מייצרים מידע שאינו מדויק בשל מגבלות באימון או אילוצים אחרים. ייתכן שגם שמעתם מונחים כמו "הלוצינציות" במאמרים פופולריים או במאמרים מחקריים. עם זאת, אנו ממליצים בחום להשתמש במונח "המצאה" כדי לא לאנשה את ההתנהגות על ידי ייחוס תכונה אנושית לתוצאה שמונעת על ידי מכונה. זאת גם מחזקת את ההנחיות לבינה מלאכותית אחראית מבחינת מונחים, ומסירה מונחים שעשויים להיחשב לפוגעניים או לא כלוליים בהקשרים מסוימים.
רוצים לקבל הבנה כיצד פועלות המצאות? חשבו על פקודה שמבקשת מה-AI ליצור תוכן בנושא שאינו קיים (כדי להבטיח שהוא לא נמצא במערך האימון). לדוגמה – ניסיתי את הפקודה:
פקודה: צור תכנית שיעור על מלחמת מאדים של 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 משופר שמתקדם מעבר לקודקס עבור הצעות מהירות עוד יותר.
קראו את הפוסטים לפי סדר כדי לעקוב אחר מסע הלמידה שלהם.
- מאי 2023 | GitHub Copilot משתפר בהבנת הקוד שלך
- מאי 2023 | מבפנים ב-GitHub: עבודה עם ה-LLM מאחורי GitHub Copilot.
- יוני 2023 | איך לכתוב פרומפטים טובים יותר ל-GitHub Copilot.
- יולי 2023 | .. GitHub Copilot מתקדם מעבר לקודקס עם מודל AI משופר
- יולי 2023 | המדריך של מפתח להנדסת פרומפט ו-LLM
- ספטמבר 2023 | איך לבנות אפליקציית LLM ארגונית: לקחים מ-GitHub Copilot
אתם יכולים גם לגלוש בבלוג ההנדסה שלהם כאן עבור פוסטים נוספים כמו זה שמדגים איך הטכניקות והמודלים האלה מופעלים ליישומים בעולם האמיתי.
ראינו מדוע הנדסת פרומפט חשובה – עכשיו נבין איך פרומפטים בנויים כדי שנוכל להעריך טכניקות שונות לעיצוב פרומפטים יעיל יותר.
נתחיל עם הפרומפט הבסיסי: קלט טקסט שנשלח אל המודל ללא הקשר אחר. הנה דוגמה – כשאנחנו שולחים את המילים הראשונות של ההמנון הלאומי של ארה"ב ל־OpenAI Completion API הוא מיד משלים את התגובה עם השורות הבאות, ומדגים את התנהגות החיזוי הבסיסית.
| פרומפט (קלט) | השלמה (פלט) |
|---|---|
| Oh say can you see | זה נשמע שאתה מתחיל את מילות השיר "The Star-Spangled Banner," ההמנון הלאומי של ארה"ב. המילים המלאות הן ... |
עכשיו נוסיף הקשר והוראות לאותו פרומפט בסיסי. ה־Chat Completion API מאפשר לנו לבנות פרומפט מורכב כאוסף של הודעות הכוללות:
- זוגות קלט/פלט המשקפים קלט משתמש ותגובה של עוזר.
- הודעת מערכת שמגדירה את ההקשר להתנהגות או אישיות העוזר.
הבקשה כעת היא בצורתה הבאה, שבה ה־טוקניזציה מפיקה ביעילות את המידע הרלוונטי מההקשר ומהשיח. שינוי ההקשר במערכת יכול להיות משמעותי לא פחות באיכות ההשלמות, מהקלט שנתן המשתמש.
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 שניתן להעתיק ולהדביק לקובץ ולוודא לפי הצורך | מורכב. מעוצב. |
בדוגמאות שלמעלה, הפרומפט היה פתוח למדי, מה שאיפשר ל־LLM להחליט איזו חלק מהקבוצה הממוחשבת שהיו לו רלוונטית. עם תבנית עיצוב ה_תוכן הראשוני_, הטקסט שמוזן מתחלק לשני חלקים:
- הוראה (פעולה)
- תוכן רלוונטי (שמשפיע על הפעולה)
הנה דוגמה שבה ההוראה היא "סכם את זה בשתי משפטים".
| פרומפט (קלט) | השלמה (פלט) |
|---|---|
| יופיטר הוא כוכב הלכת החמישי מהשמש והגדול ביותר במערכת השמש. זהו ענק גז עם מסה שהיא אלףית של מסה של השמש, אך פי שניים וחצי מכל שאר כוכבי הלכת במערכת השמש ביחד. יופיטר הוא אחד הדברים הבהירים הנראים לעין בלתי מזוינת בשמי הלילה, וידוע לציוויליזציות עתיקות מאז לפני ההיסטוריה המתועדת. הוא נקרא על שם האל הרומי יופיטר.[19] כשמביטים אליו מהארץ, יופיטר יכול להיות מבריק מספיק שהאור המשוקף ממנו ייצור צללים נראים,[20] ובדרך כלל הוא האובייקט הטבעי השלישי בבהירותו בשמי הלילה אחרי הירח ונוגה. סכם זאת ב-2 משפטים קצרים |
יופיטר, כוכב הלכת החמישי מהשמש, הוא הגדול ביותר במערכת השמש וידוע כאחד מהגופים הבהירים ביותר בשמי הלילה. נקרא על שם האל הרומי יופיטר, הוא ענק גז שמסתו פי שניים וחצי מכל שאר כוכבי הלכת במערכת השמש ביחד. |
ניתן להשתמש בקטע התוכן הראשוני בדרכים שונות כדי להנחות הוראות יעילות יותר:
- דוגמאות – במקום לומר למודל מה לעשות עם הוראה מפורשת, נותנים לו דוגמאות של מה לעשות ונותנים לו להסיק את התבנית.
- רמזים – שומרים את ההוראה עם "רמז" שמכוון את ההשלמה, ומנחה את המודל לכיוון תגובות רלוונטיות יותר.
- תבניות – אלו "מתכונים" חוזרים לפרומפט עם תחליפים (משתנים) שניתן להתאים עם נתונים למקרים ספציפיים.
בואו נחקור את זה בפעולה.
זו גישה שבה משתמשים בתוכן הראשוני כדי "לספק למודל" כמה דוגמאות של הפלט הרצוי להוראה נתונה, ונותנים למודל להסיק את התבנית לפלט הרצוי. בהתאם למספר הדוגמאות שסופקו, אפשר לעשות פרומפט זיר"שוט, יונשוט, פיושוט וכו'.
הפרומפט עכשיו מורכב משלושה מרכיבים:
- תיאור משימה
- כמה דוגמאות של הפלט הרצוי
- התחלה של דוגמה חדשה (שמתפקדת כהוראת משימה מרומזת)
| סוג למידה | פרומפט (קלט) | השלמה (פלט) |
|---|---|---|
| זיר"שוט | "The Sun is Shining". תרגם לספרדית | "El Sol está brillando". |
| יונשוט | "The Sun is Shining" => ""El Sol está brillando". "It's a Cold and Windy Day" => |
"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 תגיות המוזכרות בתוכן המשני.
כעת כשאנו יודעים כיצד ניתן לבנות הנחיות, נתחיל לחשוב כיצד לעצב אותן כך שישקפו שיטות עבודה מומלצות. ניתן לחשוב על זה בשני חלקים - קיום גישה נכונה ויישום טכניקות מתאימות.
הנדסת הנחיות היא תהליך של ניסוי וטעייה, לכן שמור שלושה גורמים מנחים רחבים בזיכרון:
-
הבנת התחום חשובה. דיוק ורלוונטיות התגובה תלויים ב_תחום_ שבו האפליקציה או המשתמש פועלים. השתמש באינטואיציה ומומחיות תחומית כדי להתאים טכניקות במיוחד. למשל, הגדר אישיויות תחומיות ספציפיות בהנחיות המערכת שלך, או השתמש ב_תבניות תחומיות_ בהנחיות המשתמש. ספק תוכן משני שמשקף הקשרים תחומיים, או השתמש ב_רמזים ודוגמאות תחומיות_ כדי לכוון את המודל לדפוסי שימוש מוכרים.
-
הבנת המודל חשובה. ידוע שהמודלים הם סטוכסטיים מטבעם. אך יישומי המודל יכולים להשתנות גם בהתאם לנתוני האימון בהם השתמשו (ידע מוקדם), היכולות הניתנות (למשל, דרך API או SDK) וסוג התוכן אליו הם מותאמים (קוד, תמונות, טקסט וכו'). הבן את החוזקות והמגבלות של המודל בו אתה משתמש, והשתמש בידע זה כדי לתעדף משימות או לבנות תבניות מותאמות שמותאמות ליכולות המודל.
-
איטרציה ואימות חשובים. המודלים מתפתחים במהירות, וכך גם הטכניקות להנדסת הנחיות. כמומחה תחום, ייתכן ויש לך הקשרים או קריטריונים ספציפיים לאפליקציה שלך שאינם חלים על הקהילה הרחבה. השתמש בכלים וטכניקות להנדסת הנחיות כדי "לקפוץ" להתחלת הבנייה, ואז בצע איטרציה ואימות של התוצאות עם האינטואיציה והמומחיות שלך. רשום תובנות וצרף מאגר ידע (כגון ספריות הנחיות) שיהיו בסיס חדש לאחרים לאיטרציות מהירות יותר בעתיד.
כעת נסקור שיטות עבודה מומלצות נפוצות שמומלצות על ידי OpenAI וAzure OpenAI.
| מה | למה |
|---|---|
| להעריך את המודלים העדכניים ביותר | דורות חדשים של מודלים צפויים לכלול תכונות איכות משופרות - אך עלולים לעלות יותר. הערך את השפעתם, ואז קבל החלטות מעבר. |
| להפריד הוראות והקשר | בדוק אם המודל/ספק שלך מגדיר מפרידים להבדיל בין הוראות, תוכן ראשי ותוכן משני בצורה ברורה יותר. זה יכול לעזור למודלים להקצות משקל מדויק יותר לטוקנים. |
| להיות ספציפי וברור | ספק פרטים רבים יותר על ההקשר הרצוי, התוצאה, האורך, הפורמט, הסגנון וכו'. זה ישפר גם את איכות וגם עקביות התגובות. אחזר מתכונים בתבניות שניתנות לשימוש חוזר. |
| להיות תיאורי, השתמש בדוגמאות | מודלים עשויים להגיב טוב יותר לגישה של "הראה וספר". התחל עם גישת zero-shot שבה נותנים הוראה (אך ללא דוגמאות) ואז נסה few-shot לשיפור, תוך אספקת כמה דוגמאות לתוצאה הרצויה. השתמש באנלוגיות. |
| השתמש ברמזים כדי לזרז השלמות | עודד את המודל לכיוון התוצאה הרצויה על ידי מתן מילות פתיחה או ביטויים מובילים שיכול להשתמש בהם כנקודת התחלה לתגובה. |
| חזור על ההוראות | לפעמים יש צורך לחזור על ההוראות למודל. ספק הוראות לפני ואחרי התוכן הראשי, השתמש גם בהוראה וגם ברמז וכו'. בצע איטרציה ואימות כדי לראות מה עובד. |
| הסדר חשוב | הסדר שבו מציגים מידע למודל עשוי להשפיע על התוצאה, גם בדוגמאות הלמידה, בגלל הטיה לזכירות. נסה אפשרויות שונות כדי למצוא מה מיטבי. |
| תן למודל "יציאה" | ספק למודל תגובת השלמה חילופית למקרה שאינו יכול להשלים את המשימה מסיבה כלשהי. זה יכול להפחית סיכוי ליצירת תגובות שגויות או מומצאות. |
כמו בכל שיטת עבודה מומלצת, זכרו ש_הניסיון עשוי להשתנות_ תלוי במודל, במשימה ובתחום. השתמשו בזה כנקודת התחלה, בצעו איטרציה למציאת הטוב ביותר עבורכם. הערכו מחדש את תהליך הנדסת ההנחיות בהתאם למודלים וכלים חדשים העולים, במבט על קנה מידה ואיכות התגובה.
ברכות! הגעת לסוף השיעור! הגיע הזמן לממש חלק מהמונחים והטכניקות עם דוגמאות אמיתיות!
למשימה שלנו, נשתמש ב-Jupyter Notebook עם תרגילים שניתן להשלים באופן אינטראקטיבי. ניתן גם להרחיב את ה-Notebook עם תאי Markdown ו-Code משלכם כדי לחקור רעיונות וטכניקות.
- (מומלץ) הפעל GitHub Codespaces
- (אופציה נוספת) שכפל את המאגר למכשיר המקומי והשתמש בו עם Docker Desktop
- (אופציה נוספת) פתח את ה-Notebook בסביבת הריצה המועדפת עליך
- העתיק את הקובץ
.env.copyמשורש המאגר ל.envומלא את הערכיםAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINTו-AZURE_OPENAI_DEPLOYMENT. חזור לסעיף הלימוד Sandbox כדי ללמוד כיצד.
- בחר בליבת הריצה. אם משתמש באופציות 1 או 2, פשוט בחר בליבת Python 3.10.x המוגדרת כברירת מחדל בקונטיינר הפיתוח.
אתה מוכן להריץ את התרגילים. שים לב שאין תשובות נכונות או לא נכונות כאן - רק חקר אפשרויות בניסוי וטעייה ובניית אינטואיציה לאיך עובד מודל ואפליקציה מסוימת.
לכן אין קטעי קוד עם פתרון בשיעור זה. במקום זאת, ל-Notebook יהיו תאי Markdown שכותרתם "הפתרון שלי:" שמראים דוגמה אחת לתוצאה למען התייחסות.
איזו מהאפשרויות הבאות היא הנחיה טובה לפי שיטות עבודה מומלצות סבירות?
- הצג לי תמונה של רכב אדום
- הצג לי תמונה של רכב אדום מדגם וולוו XC90 חנוי על צוק עם השמש שוקעת
- הצג לי תמונה של רכב אדום מדגם וולוו XC90
תשובה: 2, זוהי ההנחיה הטובה ביותר כי היא מספקת פרטים על "מה" ופרטים ספציפיים (לא רק רכב כלשהו אלא מותג ודגם מסוים) וגם מתארת את ההקשר הכולל. 3 היא הבאה בטיבה כי גם מכילה תיאור רב.
נסה להשתמש בטכניקת "הרמז" עם ההנחיה: השלם את המשפט "הצג לי תמונה של רכב אדום מדגם וולוו ו-". מה התגובה, ואיך תשפר את זה?
רוצה ללמוד עוד על מושגי הנדסת הנחיות שונים? עבור לעמוד הלמידה הממושכת כדי למצוא משאבים מעולים נוספים בנושא.
קדימה לשיעור 5 שבו נסקור טכניקות הנחיה מתקדמות!
כתב ויתור: מסמך זה תורגם באמצעות שירות התרגום האוטומטי Co-op Translator. על אף שאנו שואפים לדיוק, יש להיות מודעים לכך שתירגומים אוטומטיים עלולים להכיל שגיאות או אי־דיוקים. המסמך המקורי בשפתו המקורית נחשב למקור הסמכותי. עבור מידע קריטי מומלץ להיעזר בתרגום מקצועי על ידי אנשי מקצוע. אנו לא אחראים לכל אי הבנה או פרשנות שגויה הנובעים משימוש בתרגום זה.







