הנדסת הנחיות מעשיות למודלי שפה גדולים יותר

Maud Nalpas
Maud Nalpas

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

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

הדבר נכון גם לגבי מודלים בגדלים שונים.

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

מודלים גדולים יותר של שפה (LLM) הם פחות חזקים ויש להם מאגר קטן יותר של מידע שאפשר להפיק ממנו מידע.

מה המשמעות של 'מודלים גדולים יותר של שפה (LLM)'?

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

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

איפה משתמשים במודלי שפה גדולים יותר?

  • AI גנרטיבי במכשיר או בדפדפן, לדוגמה, אם משתמשים ב-Gemma 2B באמצעות ממשק ה-API של LLM Inference API של MediaPipe (גם מתאים למכשירים עם מעבדים בלבד) או DistilBert בדפדפן עם Transformers.js. אפשר רק להוריד מודל ולהפעיל הסקה במכשיר של משתמש במודלים גדולים יותר של שפה (LLM), כדי שההורדות באינטרנט יהיו סבירות ומותאמים אישית מהמגבלות של הזיכרון והמעבד (GPU) או המעבד (CPU) של המכשיר.
  • AI גנרטיבי בהתאמה אישית בצד השרת דגמים קטנים במשקל פתוח כמו Gemma 2B, ערכות Gemma 7B או Gemma 27B זמינות להפעלה בשרת שלכם (וגם אם רוצים, ניתן לכוונון עדין).

שנתחיל?

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

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

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

לדוגמה:

Based on a user review, provide a product rating as an integer between 1 and 5. \n
Only output the integer.

Review: "${review}"
Rating:
קלט (בדיקה) פלט (דירוג)
  LLM גדול יותר (Gemini 1.5) LLM קטן יותר (Gemma 2B)
ממש אהבתי את ההתאמה! המשקל מחולק בצורה טובה ונוחות באופן מפתיע גם בטיולים של כל היום. מומלץ. 5 4 מתוך 5 כוכבים**
הרצועות דקות מאוד, והן התחילו לחפור על הכתפיים שלי בעומס כבד. 1 2/5

מודל Gemini 1.5 מספק את הפלט הרצוי באמצעות הנחיה פשוטה זו, אבל הפלט אינו מספיק:

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

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

לדוגמה:

`Analyze a product review, and then based on your analysis give me the
corresponding rating (integer). The rating should be an integer between 1 and
5. 1 is the worst rating, and 5 is the best rating. A strongly dissatisfied
review that only mentions issues should have a rating of 1 (worst). A strongly
satisfied review that only mentions positives and upsides should have a rating
of 5 (best). Be opinionated. Use the full range of possible ratings (1 to
5). \n\n
    \n\n
    Here are some examples of reviews and their corresponding analyses and
    ratings:
    \n\n
    Review: 'Stylish and functional. Not sure how it'll handle rugged outdoor
    use, but it's perfect for urban exploring.'
    Analysis: The reviewer appreciates the product's style and basic
    functionality. They express some uncertainty about its ruggedness but
    overall find it suitable for their intended use, resulting in a positive,
    but not top-tier rating.
    Rating (integer): 4
    \n\n
    Review: 'It's a solid backpack at a decent price. Does the job, but nothing
    particularly amazing about it.'
    Analysis: This reflects an average opinion. The backpack is functional and
    fulfills its essential purpose. However, the reviewer finds it unremarkable
    and lacking any standout features deserving of higher praise.
    Rating (integer): 3
    \n\n
    Review: 'The waist belt broke on my first trip! Customer service was unresponsive too. Would not recommend.'
    Analysis: A serious product defect and poor customer service experience naturally warrants the lowest possible rating. The reviewer is extremely unsatisfied with both the product and the company.
    Rating (integer): 1
    \n\n
    Review: 'Love how many pockets and compartments it has. Keeps everything organized on long trips. Durable too!'
    Analysis: The enthusiastic review highlights specific features the user loves (organization and durability), indicating great satisfaction with the product. This justifies the highest rating.
    Rating (integer): 5
    \n\n
    Review: 'The straps are a bit flimsy, and they started digging into my shoulders under heavy loads.'
    Analysis: While not a totally negative review, a significant comfort issue leads the reviewer to rate the product poorly. The straps are a key component of a backpack, and their failure to perform well under load is a major flaw.
    Rating (integer): 1
    \n\n
    Now, here is the review you need to assess:
    \n
    Review: "${review}" \n`;
קלט (בדיקה) פלט עם LLM קטן יותר (Gemma 2B)

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

ניתוח: הביקורת הזו חיובית מאוד ומדגישה את נושא המוצר התאמה ונוחות, מה שמעיד על שביעות רצון רבה מהמוצר. הזה מצדיק דירוג גבוה.

דירוג (שלם): 5

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

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

**דירוג:** 1 (הגרוע ביותר)

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

צריך לצפות לניתוח פלט ידני

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

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

// Use try/catch to catch (parsing) errors
try {
  // Parse the output for a rating
  const int = /[1-5]/;
  const ratingAsString = llmOutput.match(int)[0];
  // Parse as int
  const ratingAsInt = parseInt(ratingAsString);
  // `checkRating` checks the rating is a number between 1 and 5, since the
  // regEx may catch a number like "100"
  const finalRating = checkRating(ratingAsInt);
} catch (e) {
  console.error('Error', e);
}

הבדלים ב-API הראשון

ממשקי API בענן מסוג מודל שפה גדול (LLM), כמו Gemini API או OpenAI, שהם בדרך כלל מצביעים על מודלים גדולים יותר של שפה (LLM), ומציעים תכונות ליצירת הנחיות שימושיות. לדוגמה, Gemini 1.5 Pro מציע הוראות מערכת מצב JSON.

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

מגבלות של אסימוני מחשב

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

בנוסף, למודלים קטנים יותר יש בדרך כלל מגבלה קטנה יותר של אסימוני קלט. עבור לדוגמה, ב-Gemini 1.5 Pro יש מגבלה של מיליון אסימונים לקלט ואילו למודלים של Gemma יש חלון הקשר של 8K.

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

התאמה של אומדני הזמנים

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

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

מהנדס הנחיות לעומת כוונון עדין?

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

יש להשתמש בכוונון עדין כאשר:

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