הנדסת פרומפטים – חלק א'
OpenAi (2023). Prompt engineering
מדריך זה מציג אסטרטגיות וטקטיקות להשגת תוצאות טובות יותר ממודלים של בינה מלאכותית, ונכתב על ידי חברת OpenAI, שפיתחה את הצ'אטבוט ChatGPT. ניתן להשתמש בשילוב של כמה מהשיטות שיתוארו בהמשך, ולכל משתמש כדאי לערוך ניסויים כדי למצוא את השיטות המתאימות ביותר עבורו. חלק מהדוגמאות שמוצגות כאן פועלות כעת רק עם דגמים מתקדמים יותר, ולא חינמיים, של בינה מלאכותית.
לקריאה נוספת: כל סיכומי המאמרים על בינה מלאכותית
שש אסטרטגיות להשגת תוצאות טובות יותר:
- כתבו הוראות ברורות
- ספקו טקסט עזר
- פצלו משימות מורכבות למשימות משנה פשוטות יותר
- תנו למודל זמן "לחשוב"
- השתמשו בכלים חיצוניים
- בדקו שינויים באופן שיטתי
כתבו הוראות ברורות
הבינה המלאכותית אינה יכולה לקרוא את המחשבות שלכם. אם הפלטים (התשובות) שאתם מקבלים ממנה ארוכים מדי, בקשו תשובות קצרות. אם הפלטים פשוטים מדי לצרכיכם, בקשו כתיבה ברמת מומחה. אם אינכם אוהבים את הפורמט של התשובה שקיבלתם, הגדירו לבינה המלאכותית את הפורמט שאתם זקוקים לו. ככל שהבינה תצטרך פחות לנחש מה אתם רוצים, כך גדל הסיכוי שתקבלו ממנה את מה שאתם זקוקים לו.
טַקטִיקָות:
- כללו פרטים רבים בשאילתה (prompt) שלכם כדי לקבל תשובות רלוונטיות יותר
- בקשו מהבינה לאמץ פרסונה מסוימת (מומחה, מורה קשוח, מורה סבלני, בדחן, חבר וכו')
- השתמשו בתוחמים delimiters)) כדי לציין בבירור חלקים נפרדים של הקלט (השאילתה)
- ציינו לפי הסדר את השלבים השונים הדרושים להשלמת משימה
- ספקו דוגמאות
- ציינו את האורך הרצוי של הפלט.
ספקו טקסט עזר
מודלים של שפה יכולים להמציא ולזייף בביטחון תשובות שגויות, במיוחד כששואלים אותם על נושאים אזוטריים או עבור ציטוטים וכתובות URL. מתן טקסט עזר למודלים אלה יכול לשפר את הסיכויים לקבל תשובה נכונה ולא מומצאת:
טַקטִיקות:
- הנחו את המודל לענות באמצעות טקסט עזר
- הנחו את המודל לענות עם ציטוטים מתוך מקור טקסטואלי (reference)
פצלו משימות מורכבות למשימות משנה פשוטות יותר
בדיוק כפי שמתכנתים נוהגים לפרק מערכת מורכבת למערכת של רכיבים מודולריים, כך מומלץ לנהוג גם למשתמשים שמציגים משימות למודל שפה. אם מטילים על המודל משימות מורכבות, שיעורי השגיאה של המודל גבוהים יותר מאשר כשמטילים עליו משימות פשוטות יותר. לעתים קרובות ניתן להגדיר מחדש משימות מורכבות כסדרה של משימות פשוטות יותר שבהן פלטים של משימות קודמות משמשים לבניית הקלטים למשימות מאוחרות יותר.
טקטיקות
- ביישומי דיאלוג הדורשים שיחות ארוכות מאוד, סכמו או סננו דיאלוג קודם
- סכמו בכמה שלבים מקטעים של מסמכים ארוכים ואז הכינו סיכום מלא באופן רקורסיבי
תנו למודל זמן "לחשוב"
אם תתבקשו להכפיל 17 ב-28, אולי לא תצליחו לעשות זאת באופן מיידי, אבל עדיין תוכלו לפתור את התרגיל בתום זמן-מה. באופן דומה, מודלים עושים יותר טעויות כאשר הם מנסים לענות מיד, במקום להשתהות מעט. בקשת "שרשרת חשיבה" לפני תשובה יכולה לעזור למודל למצוא את דרך המנומקת לעבר תשובות נכונות יותר.
טקטיקות
- הנחו את המודל לחשב את הפתרון שלו לפני שהוא ממהר להגיע למסקנה
- השתמשו במונולוג פנימי או ברצף של שאילתות כדי להסתיר את תהליך החשיבה של המודל
- שאלו את הדגם אם הוא פספס משהו במעברים קודמים
השתמשו בכלים חיצוניים
פצו על החולשות של המודל באמצעות הזנתו בתפוקות של כלים אחרים. לדוגמה, מערכת אחזור טקסט (לפעמים נקראת RAG או אחזור augmented generation) יכולה לספר למודל על מסמכים רלוונטיים. מנוע ביצוע קוד כמו מפרש הקוד של OpenAI יכול לעזור למודל לעשות חישובים מתמטיים ולהריץ קוד. אם ניתן לבצע משימה בצורה אמינה או יעילה יותר באמצעות כלי ולא באמצעות מודל שפה, הורידו אותה כדי להפיק את המיטב משניהם.
טַקטִיקָות:
- השתמשו בחיפוש מבוסס הטמעות כדי ליישם אחזור ידע יעיל
- השתמשו בביצוע קוד כדי לבצע חישובים מדויקים יותר או להתקשר לממשקי API חיצוניים
- תנו לדגם גישה לפונקציות ספציפיות
בדקו שינויים באופן שיטתי
שיפור הביצועים קל יותר אם אתם יכולים למדוד אותם. במקרים מסוימים, שינוי בהנחיה ישיג ביצועים טובים יותר בכמה דוגמאות בודדות, אך יוביל לביצועים כלליים גרועים יותר בקבוצה מייצגת יותר של דוגמאות. לכן כדי להיות בטוח ששינוי הוא אכן חיובי, ייתכן שיהיה צורך להגדיר חבילת בדיקות מקיפה (המכונה גם "השוואה").
טקטיקה:
- הערכת תפוקות המודל תוך השוואתן לתשובות אידיאליות (gold-standard answers)
דוגמאות לטקטיקות ספציפיות
כל אחת מהאסטרטגיות המפורטות לעיל יכולה להיות מופעלת באמצעות טקטיקות ספציפיות. הדוגמאות להלן נועדו לספק רעיונות לדברים שאפשר לנסות. מדובר בדוגמאות חלקיות בלבד, ומומלץ לכל המשתמשים לנסות רעיונות יצירתיים שאינם מוצגים כאן.
אסטרטגיה: כתבו הוראות ברורות
טקטיקה: כללו פרטים בשאילתה שלכם כדי לקבל תשובות רלוונטיות יותר
על מנת לקבל מענה רלוונטי ביותר, ודא שהבקשות מספקות פרטים חשובים או הקשר. אחרת אתם מאלצים את המודל לנחש למה אתם מתכוונים.
במקום לשאול: כיצד אוכל להוסיף מספרים באקסל?
שאלו: כיצד אוכל לחבר שורה של סכומי דולרים באקסל? אני רוצה לעשות זאת אוטומטית עבור גיליון שלם של שורות כאשר כל הסכומים מסתיימים בצד ימין בעמודה שנקראת סה"כ.
במקום לשאול: מי הנשיא?
שאלו: מי היה נשיא מקסיקו ב-2021, ובאיזו תדירות נערכות בחירות?
במקום להורות למודל: סכם את הערות הפגישה.
הורו למודל: סכם את הערות הפגישה בפסקה אחת. לאחר מכן הכן רשימה של הדוברים וכל אחת מנקודות המפתח שלהם. לבסוף, רשום את הפעולות לביצוע שהוצעו על ידי הדוברים, אם יש כאלה.
טקטיקה: בקשו מהמודל לאמץ פרסונה
ניתן לבקש מהמודל לגלם דמות מסוימת, בעלת מאפיינים רצויים.
למשל: השב עם טקסט שמכיל לפחות בדיחה אחת או הערה שובבה בכל פסקה; כתוב כמומחה; כתוב כמורה פרטי וקשוב לתלמיד מתחיל.
טקטיקה: השתמשו בתוחמים כדי לציין בבירור חלקים נפרדים של הקלט
תוחמים כמו מירכאות משולשות, תגי XML, כותרות קטעים וכו' יכולים לעזור לתחום קטעי טקסט שיש להתייחס אליהם בצורה שונה.
דוגמה:
סכם את הטקסט התחום במירכאות משולשות עם הייקו. """הוסף טקסט כאן"""
מערכת
יסופקו לך צמד מאמרים (מופרדים בתגי XML) על אותו נושא. תחילה סכם את הטיעונים של כל מאמר. לאחר מכן ציין מי מהם טוען טיעון טוב יותר והסבר מדוע.
משתמש
<article> הוסף מאמר ראשון כאן </article> <article> הוסף מאמר שני כאן </article>
טקטיקה: תנו דוגמאות
מתן הנחיות כלליות החלות על כל הדוגמאות הוא בדרך כלל יעיל יותר מאשר הדגמת כל התמורות של משימה לפי דוגמה, אך במקרים מסוימים מתן דוגמאות עשוי להיות קל יותר. לדוגמה, אם בכוונתכם שהמודל יעתיק סגנון מסוים של תגובה לשאילתות משתמשים שקשה לתארו במפורש. טכניקה זו ידועה בתור הנחיה של "כמה יריות" (few shot prompting).
טקטיקה: ציינו את האורך הרצוי של הפלט המבוקש
אתם יכולים לבקש מהמודל לייצר פלטים באורכים נתונים. ניתן לציין את אורך הפלט הרצוי במונחים של ספירת מילים, משפטים, פסקאות, נקודות תבליטים וכו'. שימו לב, עם זאת, שהוראה למודל לספור מספר מסוים של מילים אינה עובדת בדיוק רב. המודל יכול לייצר פלטים בצורה מהימנה יותר עם מספר מסוים של פסקאות או נקודות תבליטים.
אסטרטגיה: ספקו טקסט עזר
טקטיקה: הנחו את המודל לענות באמצעות טקסט עזר
אם נוכל לספק למודל מידע מהימן שרלוונטי לשאילתה הנוכחית, נוכל להורות למודל להשתמש במידע שסופק כדי לחבר את התשובה שלו.
דוגמה:
מערכת:
השתמש במאמרים המוגדרים במירכאות משולשות כדי לענות על שאלות. אם לא ניתן למצוא את התשובה במאמרים, כתוב "לא הצלחתי למצוא תשובה".
מִשׁתַמֵשׁ:
<הכנס מאמרים, כל אחד מופרד במירכאות משולשות> שאלה: <הכנס שאלה כאן>
ניתן להשתמש בהטמעות (Embeddings) כדי ליישם אחזור ידע יעיל. לפרטים נוספים ראו את המדריך ליישום הטקטיקה "השתמש בחיפוש מבוסס הטמעות כדי ליישם אחזור ידע יעיל".
טקטיקה: הנחו את המודל לענות עם ציטוטים מטקסט שאתם מפנים אליו (reference text)
אם לקלט הוּסָף ידע רלוונטי, ניתן לבקש מהמודל לעבות את תשובותיו בציטוטים מקטעים ממסמכים שסיפקתם לו. שימו לב שניתן לאחר מכן לאמת ציטוטים בפלט באופן שיטתי באמצעות התאמת מחרוזת בתוך המסמכים שסופקו.
דוגמה:
מערכת:
יסופק לך מסמך מופרד במירכאות משולשות ושאלה. המשימה שלך היא לענות על השאלה באמצעות המסמך שסופק בלבד ולציין את הקטע(ים) של המסמך המשמשים לתשובה לשאלה. אם המסמך אינו מכיל את המידע הדרוש כדי לענות על שאלה זו, פשוט כתוב: "אין מספיק מידע". אם ניתנת תשובה לשאלה, יש לגבותה בציטוט. השתמש בפורמט הבא כדי לצטט קטעים רלוונטיים ({"ציטוט": …}).
מִשׁתַמֵשׁ
"""<הכנס כאן מסמך>""" שאלה: <הכנס שאלה כאן>
נהניתי מאוד מדריך ומסייע תודה