פרומפט הוא תדריך. המודל קורא רק את מה שכתבתם, ולכן כל עובדה שהוא צריך וכל העדפה שיש לכם חייבות להופיע בדף. כשתשובה חוזרת כללית, הסיבה כמעט תמיד היא משהו שהפרומפט השמיט, ולא משהו שהוא ניסח רע.
רוב הפרומפטים השימושיים בנויים מאותם שישה חלקים. בבלוק שלמטה יש את כל השישה. כבו חלקים כדי לראות את הפרומפט בלעדיהם, מלאו את שפת התכנות שלכם, ואז פתחו את התוצאה ב-ChatGPT או ב-Claude והשוו.
age = 30
print("Age: " + age)השגיאה:TypeError: can only concatenate str (not "int") to strמה זה אומר: + יכול לחבר שתי מחרוזות, או לחבר שני מספרים, אבל הוא לא יכול לחבר מחרוזת למספר. Python לא מנחש למה התכוונת, ולכן הוא עוצר.
למה הקוד שלך גרם לזה: "Age: " היא מחרוזת, ו-age מכיל את המספר 30. השורה מבקשת מ-Python להדביק אותם יחד עם +.
הקוד המתוקן: קודם כול ממירים את המספר לטקסט עם str():
age = 30
print("Age: " + str(age))
זה מדפיס Age: 30.
ששת החלקים
תפקיד אומר למודל באיזה קול ובאיזה שיקול דעת להשתמש. "מורה סבלני למתחילים" ו"מהנדס בכיר שבודק קוד פרודקשן" נותנים תשובות שונות מאוד לאותה שאלה. תפקיד שימושי במיוחד כשהוא מרמז על קהל ועל רף; בדף role prompting מוסבר איפה הוא עוזר ואיפה לא.
משימה היא המשפט האחד שאומר מה לעשות. פתחו בפועל: הסבר, שכתב, השווה, פרט, תקן, סכם. אם אי אפשר לכתוב את המשימה במשפט אחד, כנראה שיש בפרומפט שתי משימות, ואחת מהן מקבלת בדרך כלל תשובה דלה יותר.
הקשר הוא כל מה שהמודל לא יכול לנחש: מי אתם, מה אתם כבר יודעים, בשביל מה התוצאה ומה כבר ניסיתם. בדוגמה, "עוד לא למדתי מחלקות או חריגות" היא השורה שמונעת מהמודל לענות עם try ו-except.
קלט הוא החומר לעבודה: הקוד, המייל, הטבלה, השגיאה. הדביקו אותו במלואו. סיכום של הקוד שלכם הוא תיאור של מה שאתם חושבים שהוא עושה, והבאג בדרך כלל חי בפער שבין השניים.
פורמט אומר איך התשובה צריכה להיראות: רשימה, טבלה, שלושה חלקים עם כותרות, JSON, שורה אחת. בלעדיו המודל בוחר צורה בשבילכם, ומודלי צ'אט נוטים לבחור צורות ארוכות. פלט מובנה הולך רחוק יותר כשתוכנה צריכה לקרוא את התשובה.
מגבלות הן הגבולות: אורך, אוצר מילים, דברים שיש להימנע מהם, דברים שחייבים להישאר ללא שינוי. מספר ("מתחת ל-120 מילים") עובד טוב יותר משם תואר ("קצר"), כי "קצר" אומר דברים שונים לקוראים שונים, והמודל הוא אחד מהם.
מעורפל מול מדויק
הנה אותה בקשה כתובה בשתי דרכים. עברו בין הלשוניות והשוו את התשובות.
הנה פונקציית מיון פשוטה ב-Python:
def sort_list(items):
return sorted(items)
אפשר לקרוא לה כך: sort_list([3, 1, 2]), והיא מחזירה [1, 2, 3].
הפרומפט המעורפל קיבל תשובה נכונה לשאלה שאף אחד לא שאל. הוא נאלץ לנחש את השפה, את הנתונים, את הסדר ואם מותר לשנות את הקלט, ובכל פעם ניחש את המקרה הנפוץ ביותר. הפרומפט המדויק ענה על ארבעתם מראש, כך שלא נשאר מה לנחש.
הרגלים שמשפרים פרומפטים
- ציינו את המשימה מוקדם, ושוב אחרי חומר ארוך. בפרומפט קצר, פתחו במשימה כדי שהרקע שאחריה ייקרא עם מטרה. כשאתם מדביקים מסמך ארוך, שימו את המסמך קודם ואת השאלה בסוף, וחזרו שם על המגבלות העיקריות, כך שההוראה תעמוד ליד הנקודה שבה המודל מתחיל לכתוב.
- אמרו מה לעשות, לא רק ממה להימנע. "כתוב בעברית פשוטה לילד בן 12" נותן למודל יעד. "אל תהיה טכני מדי" רק פוסל כיוון אחד ומשאיר את השאר פתוח.
- הפרידו בין ההוראות לחומר. כשאתם מדביקים מייל או קובץ, סמנו איפה הוא מתחיל ואיפה הוא נגמר, כדי שהמודל לא יטעה ויחשוב שמשפט בתוכו הוא הוראה. בדף מפרידים ותגיות XML מוסברות האפשרויות.
- הראו דוגמה אחת של הפלט כשהפורמט לא שגרתי. דוגמה מראה את הצורה מהר יותר מפסקה שמתארת אותה. זה few-shot prompting.
- שפרו את הפרומפט, לא את הצ'אט. אם התשובה הראשונה שגויה, מצאו את ההקשר או את המגבלה שחסרים, תקנו את הפרומפט והריצו אותו שוב. שרשרת ארוכה של תיקונים עובדת, אבל משאירה אתכם עם תוצאה ובלי פרומפט שאפשר להשתמש בו שוב.
רשימת בדיקה לפני השליחה
- האם אפשר לנסח את המשימה במשפט אחד שמתחיל בפועל?
- האם אדם זר היה יודע בשביל מי התשובה ומה כבר ידוע לי?
- האם הדבקתי את החומר האמיתי ולא תיאור שלו?
- האם אמרתי כמה ארוכה צריכה להיות התשובה ואיזו צורה עליה לקבל?
- האם יש משהו שהתשובה לא צריכה לשנות או לא צריכה להשתמש בו?
חמש תשובות "כן" לא מבטיחות תשובה מושלמת, אבל "לא" הוא הסיבה הסבירה ביותר לתשובה גרועה.
שאלות נפוצות
מה הופך פרומפט ל-AI לטוב?
פרומפט טוב מציג את המשימה במשפט אחד ברור, נותן את ההקשר שהמודל לא יכול לנחש (מי אתם, מה אתם כבר יודעים, בשביל מה התוצאה), כולל את החומר לעבודה ואומר איך התשובה צריכה להיראות: אורך, מבנה וטון. רוב הפרומפטים החלשים נכשלים בהקשר ובפורמט, לא בניסוח.
כמה ארוך צריך להיות פרומפט?
ארוך כמו שהעבודה דורשת, ולא יותר. שאלה של שורה אחת מתאימה לתשובה של שורה אחת. משימה עם קהל מסוים, קלט מסוים וצורת פלט מסוימת דורשת בדרך כלל ארבעה עד שמונה משפטים. אורך שחוזר על אותה הוראה שלוש פעמים לא עוזר; אורך שמוסיף הקשר חסר כן עוזר.
האם צריך להיות מנומסים ל-ChatGPT או ל-Claude?
מילות נימוס לא עוזרות וגם לא מזיקות הרבה. מה שמשנה את התשובה הוא מידע: המטרה, הקהל, המגבלות ודוגמה לפלט שאתם רוצים. כתבו כמו שהייתם מתדרכים עמית מוכשר שמעולם לא ראה את הפרויקט שלכם.
יש תבנית לכתיבת פרומפטים?
סדר אמין הוא תפקיד, משימה, הקשר, קלט, פורמט, מגבלות. לא כל פרומפט צריך את כל השישה. התחילו במשימה, הוסיפו הקשר שהמודל לא יכול לנחש, ואז הוסיפו פורמט ומגבלות כשהתשובה הראשונה חוזרת ארוכה מדי, מעורפלת מדי או בצורה הלא נכונה. בדף תבניות פרומפטים יש גרסאות לשימוש חוזר עם חסרים למילוי.
למה אותו פרומפט נותן תשובות שונות בכל פעם?
מודלי צ'אט בוחרים כל מילה הבאה בדגימה מתוך התפלגות הסתברויות, ולכן שתי הרצות יכולות להיות שונות. פרומפט מדויק יותר מצמצם את מרחב התשובות הטובות, וכך ההרצות דומות יותר זו לזו. ההגדרה temperature קובעת כמה אקראיות הדגימה משתמשת.