הנדסת פרומפטים – חלק ב'

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

לקריאת חלק א' של הסיכום

למאמר המלא

לקריאה נוספת: כל סיכומי המאמרים בנושא בינה מלאכותית

אסטרטגיה: פיצול משימות מורכבות למשימות משנה פשוטות יותר

טקטיקה: השתמשו בסיווג כוונות כדי לזהות את ההוראות הרלוונטיות ביותר לשאילתת משתמש

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

מערכת

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

משתמש

אני צריך להפעיל את האינטרנט שלי שוב.

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

מערכת:

יסופקו לך פניות שירות לקוחות הדורשות פתרון בעיות בהקשר של תמיכה טכנית. עזור למשתמש על ידי: - בקש ממנו לבדוק שכל הכבלים אל/מן הראוטר מחוברים. שים לב שכיח שכבלים משתחררים עם הזמן. - אם כל הכבלים מחוברים והבעיה נמשכת, שאל אותם באיזה דגם נתב הם משתמשים - כעת תייעץ להם כיצד להפעיל מחדש את המכשיר שלהם: - אם מספר הדגם הוא MTD-327J, יעץ להם ללחוץ על הכפתור האדום ולהחזיק אותו למשך 5 שניות, ולאחר מכן להמתין 5 דקות לפני בדיקת החיבור. -- אם מספר הדגם הוא MTD-327S, יעץ להם לנתק ולחבר אותו מחדש, ואז להמתין 5 דקות לפני בדיקת החיבור. - אם הבעיה של הלקוח נמשכת לאחר הפעלה מחדש של המכשיר והמתנה של 5 דקות, חבר אותם לתמיכת IT על ידי פלט של {"IT support requested"}. - אם המשתמש מתחיל לשאול שאלות שאינן קשורות לנושא זה, ודא שהוא רוצה לסיים את הצ'אט הנוכחי בנושא פתרון בעיות וסווג את בקשתו לפי הסכמה הבאה: <הכנס סכמת סיווג ראשונית/משנית מלמעלה כאן>

משתמש

אני צריך להפעיל את האינטרנט שלי שוב.

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

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

מכיוון שלמודלים יש אורך הקשר מוגבל (היקף מוגבל של ההקשר שהם יכולים להביא בחשבון), דיאלוג בין משתמש לעוזר שבו כל השיחה כלולה בחלון ההקשר אינו יכול להימשך ללא הגבלת זמן.

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

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

טקטיקה: סכמו מסמכים ארוכים בחתיכות ובנה סיכום מלא באופן רקורסיבי

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

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

אסטרטגיה: תנו למודל זמן "לחשוב"

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

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

דוגמה:

מערכת

קבע אם הפתרון של התלמיד נכון או לא.

 

משתמש

הצהרת בעיה: אני בונה מתקן אנרגיה סולארית ואני צריך עזרה בעיבוד הכספים. - קרקע עולה 100 $ למטר מרובע - אני יכול לקנות פאנלים סולאריים ב- $250 למטר מרובע - ניהלתי משא ומתן על חוזה תחזוקה שיעלה לי 100,000 $ לשנה, ועוד 10 $ למטר מרובע. מה העלות הכוללת עבור שנת הפעילות הראשונה כפונקציה של מספר המטרים הרבועים? פתרון התלמיד: הגדר את x כגודל המתקן במטרים רבועים. 1. עלות קרקע: 100x 2. עלות פאנל סולארי: 250x 3. עלות תחזוקה: 100,000 + 100x עלות כוללת: 100x + 250x + 100,000 + 100x = 450x + 100,000

עוזר

הפתרון של התלמיד נכון.

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

מערכת

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

 

בצורה זו, המערכת תאתר את הטעות שביצע את התלמיד.

טקטיקה: השתמשו במונולוג פנימי או ברצף של שאילתות כדי להסתיר את תהליך החשיבה של המודל

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

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

מערכת

בצע את השלבים הבאים כדי לענות על שאילתות המשתמש. שלב 1 - ראשית מצא את הפתרון שלך לבעיה. אל תסתמך על הפתרון של התלמיד מכיוון שהוא עלול להיות שגוי. כלול את כל העבודה שלך עבור שלב זה במירכאות משולשות ("""). שלב 2 - השווה את הפתרון שלך לפתרון של התלמיד והערך אם הפתרון של התלמיד נכון או לא. כלול את כל העבודה שלך עבור שלב זה במירכאות משולשות ("" "). שלב 3 - אם התלמיד עשה טעות, קבע איזה רמז תוכל לתת לתלמיד מבלי למסור את התשובה. צרף את כל העבודה שלך לשלב זה במירכאות משולשות (""). שלב 4 - אם התלמיד טעה, ספק את הרמז מהשלב הקודם לתלמיד (מחוץ למירכאות משולשות). במקום לכתוב "שלב 4 - ..." כתוב "רמז:".

 

טקטיקה: שאלו את הדגם אם הוא החמיץ משהו בשלבים קודמים

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

מערכת

יסופק לך מסמך מופרד במירכאות משולשות. המשימה שלך היא לבחור קטעים הנוגעים לשאלה הבאה: "אילו שינויי פרדיגמה משמעותיים התרחשו בהיסטוריה של הבינה המלאכותית?" ודא שהקטעים שאתה מביא מכילים את כל ההקשר הרלוונטי הדרוש כדי להבין אותם - במילים אחרות, אל תציג קטעים קטנים שחסר להם הקשר חשוב. ספק פלט בפורמט JSON באופן הבא: [{"excerpt": "..."}, ... {"excerpt": "..."}]

מִשׁתַמֵשׁ

"""<הכנס מסמך כאן>"""

עוזר

[{"קטע": "המודל כותב כאן קטע"}, ... {"קטע": "המודל כותב כאן קטע נוסף"}]

משתמש [אלה שאילתות-ההמשך]:

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

אסטרטגיה: השתמשו בכלים חיצוניים

טקטיקה: השתמשו בחיפוש מבוסס הטמעות כדי ליישם אחזור ידע יעיל

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

אסטרטגיה: בדיקה שיטתית של שינויים

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

נהלי הערכה (או "הערכות") מועילים לאופטימיזציה של עיצובי מערכת. הערכות (evals) טובות:

  • מייצגות שימוש בעולם האמיתי (או לפחות מגוונות)
  • מכילות מקרי בדיקה רבים שמעניקים כוח ניבוי סטטיסטי גדול יותר
  • ניתנות בקלות לביצוע אוטומציה או חזרה

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

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

טקטיקה: הערכת תפוקות המודל בהתייחס לתשובות אידיאליות (golden standard)

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

למשל, באמצעות הודעת המערכת הבאה:

מערכת

יסופק לך טקסט מופרד במירכאות משולשות שאמור להיות התשובה לשאלה. בדוק אם פיסות המידע הבאות כלולות ישירות בתשובה: - ניל ארמסטרונג היה האדם הראשון שהלך על הירח. - התאריך בו הלך ניל ארמסטרונג לראשונה על הירח היה 21 ביולי 1969. עבור כל אחת מהנקודות הללו בצע את השלבים הבאים: 1 - הצג מחדש את הנקודה. 2 - ספק ציטוט מהתשובה שהכי קרוב לנקודה זו. 3 - שקול אם מישהו שקורא את הציטוט שאינו מכיר את הנושא יוכל להסיק ישירות את הנקודה. הסבר למה או למה לא לפני שתחליט. 4 - כתוב "כן" אם התשובה ל-3 הייתה כן, אחרת כתוב "לא". לבסוף, ספק ספירה של כמה תשובות "כן" יש. ספק ספירה זו בתור {"count": <insert count here>}.

 

 

 

    עדיין אין תגובות לפריט זה
    מה דעתך?
yyya