Menu

תבניות פרומפט: דוגמאות ואיך לבנות אחת

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

כל פרומפט למטה ניתן לעריכה: שנו אותו, ואז פתחו אותו ב-ChatGPT, ב-Claude או באפליקציית AI אחרת.

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

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

להסביר מושג ברמה שלי
Fill in
Parts
אתה מורה פרטי סבלני למתכנתים שלומדים לבד.
הסבר closures ב-JavaScript.
אני כבר מכיר משתנים, פונקציות ומערכים. אני לומד הכי טוב מדוגמה קטנה שאני יכול להריץ בעצמי.
ענה בשלושה חלקים עם תוויות מודגשות: הרעיון במשפט אחד, דוגמת קוד קצרה עם הערה בשורת המפתח, וטעות נפוצה אחת.
שמור על פחות מ-150 מילים. אם אתה צריך מונח שלא ציינתי שאני מכיר, הסבר אותו בכמה מילים.
Try it
Example replyReplies vary between models and runs.

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

דוגמה:

function makeCounter() {
  let count = 0;
  return function () {
    count += 1; // still sees count from makeCounter
    return count;
  };
}

const next = makeCounter();
console.log(next()); // 1
console.log(next()); // 2

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

מה הופך תבנית לטובה

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

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

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

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

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

דוגמאות לתבניות פרומפט

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

לסכם בשביל קורא מסוים
Fill in
סכם את הטקסט שבתוך תגיות <text> בשביל מנהל שיש לו שתי דקות. השתמש בלכל היותר 3 נקודות. פתח בכל החלטה או פעולה שהקורא צריך לבצע, והשמט רקע שהוא לא צריך. <text> הדביקו כאן את הטקסט </text>
Try it
לכתוב פונקציה קטנה
Fill in
כתוב פונקציה ב-Python שמקבלת רשימת מספרים ומחזירה את החציון. השתמש ב-type hints אם יש כאלה בשפה. אם הקלט ריק, זרוק ValueError. אחרי הפונקציה, הוסף שלוש קריאות לדוגמה עם התוצאות הצפויות שלהן כהערות. החזר רק את הקוד.
Try it
Example replyReplies vary between models and runs.
def median(numbers: list[float]) -> float:
    if not numbers:
        raise ValueError("median() needs at least one number")
    ordered = sorted(numbers)
    middle = len(ordered) // 2
    if len(ordered) % 2 == 1:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2


# median([3, 1, 2])     returns 2
# median([4, 1, 3, 2])  returns 2.5
# median([])            raises ValueError
לענות להודעה
Fill in
כתוב תשובה להודעה שבתוך תגיות <message>. מטרה: לסרב בנימוס ולהציע במקום תאריך בחודש הבא. טון: ידידותי וקצר. שמור על פחות מ-80 מילים ואל תוסיף עובדות שלא נמצאות בהודעה או במטרה. <message> היי! תהיה פנוי להעביר הרצאה קצרה על הפרויקט שלך במיטאפ שלנו ב-14 לחודש? </message>
Try it
Example replyReplies vary between models and runs.

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

בברכה, [השם שלכם]

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

איך לבנות תבנית משלכם

  1. התחילו מפרומפט שעבד. קחו שיחה שבה התשובה יצאה נכונה, ואספו את הגרסה הסופית של הפרומפט, כולל כל התיקונים שהייתם צריכים להוסיף בהודעות המשך. התיקונים האלה הם החלק הכי יקר ערך, כי הם מתקנים את מה שהגרסה הראשונה פספסה.
  2. סמנו מה ישתנה בפעם הבאה. קראו את הפרומפט וסמנו כל מילה שהייתם עורכים לשימוש הבא. בדרך כלל אלה שניים עד ארבעה דברים: נושא, קהל, אורך, קלט מודבק.
  3. החליפו כל אחד במקום ריק עם שם. כתבו את המקום הריק בצורה שהכלי שלכם מצפה לה, למשל [קהל] לפרומפט שאתם מדביקים ידנית או {audience} לקוד.
  4. בדקו עם שלושה מילויים שונים. השתמשו במקרה טיפוסי אחד, בקלט קצר מאוד או ארוך מאוד אחד, ובמקרה חריג אחד. אם אחד מהם נכשל, הטקסט הקבוע עדיין מניח משהו על השימוש הראשון. שנו משפט אחד בכל פעם, כמתואר באיטרציה על פרומפטים.
  5. שמרו אותה במקום שתמצאו אותה. קובץ פתקים, מרחיב טקסט או מנהל קטעי קוד, כולם עובדים. תבנית שצריך לחפש היא תבנית שתפסיקו להשתמש בה.

תבניות בקוד

בתוכנה, תבנית היא מחרוזת עם שדות בעלי שם. המתודה str.format() של Python ממלאת אותם:

SUMMARY_TEMPLATE = """Summarize the text inside the <text> tags for {audience}.
Use at most {bullets} bullet points and lead with any action the reader must take.

<text>
{text}
</text>"""

with open("notes.txt", encoding="utf-8") as f:
    meeting_notes = f.read()

prompt = SUMMARY_TEMPLATE.format(
    audience="a manager who has two minutes",
    bullets=3,
    text=meeting_notes,
)

עם str.format(), כל סוגר מסולסל מילולי בתבנית צריך להיכתב פעמיים ({{ ו-}}), וזה חשוב כשהתבנית כוללת דוגמת JSON. סוגריים בתוך הערכים שמעבירים, כמו קוד ב-meeting_notes, לא צריכים escaping. לחלק מהספריות לבניית אפליקציות AI יש מחלקות תבנית משלהן, אבל הן עושות את אותה עבודה כמו מחרוזת format עם תוספות מסביב.

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

תבנית או פרומפט מערכת

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

שאלות נפוצות

מה זו תבנית פרומפט?

תבנית פרומפט היא פרומפט לשימוש חוזר עם placeholders, כמו [נושא] או {language}, לחלקים שמשתנים בין שימוש לשימוש. הטקסט הקבוע מכיל את ההוראות שכבר בדקתם; אתם ממלאים את המקומות הריקים בכל פעם במקום לכתוב את הפרומפט מאפס.

איך יוצרים תבנית פרומפט משלי?

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

איפה כדאי לשמור תבניות פרומפט?

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

איך משתמשים בתבנית פרומפט ב-Python?

שמרו את התבנית כמחרוזת עם שדות בעלי שם ומלאו אותה עם str.format() או עם f-string. עם str.format(), כתבו פעמיים כל סוגר מסולסל מילולי בתבנית ({{ ו-}}), למשל כשהתבנית מכילה דוגמת JSON. שימו טקסט שמגיע ממשתמשים בין מפרידים כדי שיישאר נפרד מההוראות.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל