הגדרה של מודל שופט בסיסי (חלק 1)

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

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

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

יצירת מודל השופט הראשון

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

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

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

בחירת שיטת התאמה אישית

רוב מודלי הבסיס הם מודלים כלליים. מודל שופט פועל כמומחה בתחום.

האפשרויות העיקריות ליצירת מודל שופט כוללות:

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

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

בחירת מודל

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

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

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

בקורס הזה נעשה שימוש ב-Gemini 3 Flash כמודל השופט. ‫Gemini 3 Flash מציע את המהירות והעומק של החשיבה הרציונלית שנדרשים לתרחיש השימוש לדוגמה של הערכת התוצאות של ThemeBuilder. עם זאת, אפשר להחיל את הדפוסים בקורס הזה על כל מודל שתבחרו.

בחירת שיטת ניקוד

אפשר לתת ציון לפלט סובייקטיבי באמצעות תוויות בינאריות PASS ו-FAIL, או באמצעות ציון מספרי, למשל: "בסולם של 1 עד 5, עד כמה הסיסמה הזו תואמת למותג?"

מומלץ להשתמש בתוויות בינאריות.

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

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

הגדרת השופט

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

  • הגדרת הוראות מערכת: הגדרת השופט כדמות מומחה קפדנית.
  • הגדרת רמת אקראיות או רמת החשיבה: השופט צריך להיות עקבי. אם אתם משתמשים במודל חשיבה רציונלית כמו Gemini Flash, שנדרשת בו אקראיות קלה כדי לעבור בין שלבים לוגיים, השאירו את רמת האקראיות בערך ברירת המחדל, אבל הגדירו את thinking_level לערך HIGH. אם משתמשים במודל אחר, צריך להגדיר את רמת האקראיות לערך 0 או לערך קרוב ל-0. בכל מקרה, כדאי להשתמש בטכניקת שרשרת המחשבות, כדי שהמודל יחשוב לפני שיקבל החלטה לגבי שיפוט.
  • מבנה הפלט של השופט: הרבה יותר קל לעשות שימוש חוזר באובייקט JSON צפוי בשאר בסיס הקוד. משתמשים בסכימת EvalResult שדורשת label (PASS או FAIL) ומחרוזת rationale.

בדוגמה של ThemeBuilder:

הגדרת השופט

// LLM judge config
const response = await client.models.generateContent({
  model: modelVersion,
  config: {
      systemInstruction: "You are a senior brand strategist, brand identity
      specialist, and expert color psychologist. You also act as a strict
      content moderator for a brand safety tool. Be rigorous regarding brand
      alignment. Always formulate your rationale before assigning the final
      PASS or FAIL label to ensure thorough consideration of the criteria.",
      temperature: 0,
      thinkingConfig: {
          thinkingLevel: ThinkingLevel.HIGH,
      },
      responseJsonSchema: schemaConfig.responseSchema
  },
  contents: [{ role: "user", parts: [{ text: prompt }] }]
});

responseJsonSchema

const schemaConfig = {
  responseMimeType: "application/json",
  responseSchema: {
      type: "OBJECT",
      properties: {
          label: { type: "STRING", enum: [EvalLabel.PASS, EvalLabel.FAIL] },
          rationale: { type: "STRING" }
      },
      required: ["label", "rationale"],
      propertyOrdering: ["rationale", "label"]
  }
};

// Classification label for an evaluation (PASS/FAIL is the judge's verdict)
export enum EvalLabel {
    PASS = "PASS",
    FAIL = "FAIL"
}

דוגמה מלאה של קוד

כתיבת ההנחיה הראשונית

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

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

  • מגדירים את קריטריון ההערכה: מספקים לשופט הנחיות מפורטות למתן ציונים. מהו התיאור של הטון הצפוי בפלט האידיאלי? מודל שפה גדול (LLM) יכול לעזור לכם לכתוב את קריטריון ההערכה.
  • שימוש בהנחיה עם כמה דוגמאות: כוללים דוגמאות של PASS ושל FAIL.
  • שימוש בהנחיות בטכניקת שרשרת חשיבה: מנחים את המודל לכתוב את ההסבר לפני שהוא מקצה תווית, כי זה יכול לשפר באופן משמעותי את הדיוק. במצב החשיבה של HIGH, זה לא קריטי, אבל עדיין מומלץ.

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

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

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

export function getMottoBrandFitJudgePrompt(companyName: string, description: string, audience: string, tone: string | string[], motto: string) {
  return `Evaluate the following generated motto for a company.

${companyName ? `Company name: ${companyName}\n` : ""}${description ? `Description: ${description}\n` : ""}${audience ? `Target audience: ${audience}\n` : ""}${Array.isArray(tone) ? (tone.length > 0 ? `Desired tone: ${tone.join(", ")}\n` : "") : (tone ? `Desired tone: ${tone}\n` : "")}

Generated motto: "${motto}"

Does this motto effectively match the company description, appeal to the
target audience, and embody the desired tone?

CRITICAL INSTRUCTIONS:
1. **Brand fit vs. toxicity**: You are evaluating ONLY brand fit. Another system
  will evaluate toxicity separately. DO NOT evaluate toxicity, ethics, profanity,
  or offensiveness. A motto can be a GREAT brand fit for an edgy or aggressive
  brand. If the brand requests an "offensive" or "aggressive" tone, you MUST
  pass it for brand fit, regardless of how inappropriate it is.
1. **Primary tone and literal relevance**: Do not over-penalize a motto if it
  perfectly captures the primary literal vibe just because it might loosely
  conflict with a secondary adjective.
1. **Core promises and professionalism**: For B2B/Enterprise, the motto MUST NOT
  violate core promises.
1. **Resilience to input messiness**: The Company Name, Description, Target
  Audience, or Tone may contain typos, slang, or mixed-language. You must
  decipher the *intended* meaning and judge the output against that intent,
  rather than penalizing the output for not matching the literal typo or slang.

Criteria:
1. **Relevance**: Does the motto relate to the company's core business and
  value proposition? Does it uphold core brand promises?
1. **Audience appeal**: Is the language engaging for the target audience without
  alienating them (such as through forced or inappropriate slang)?
1. **Tone consistency**: Does the motto reflect the general desired emotional
  tone perfectly, without imposing moral judgments?

Examples:

Input:
Company Name: "Summit Bank"
Description: "Secure, reliable banking for families"
Tone: "Trustworthy, serious"
Motto: "YOLO with your money!"
Result:
  "rationale": "The motto 'YOLO with your money!' is too casual and risky, contradicting the 'trustworthy, serious' tone required for a family bank.",
  "label": "${EvalLabel.FAIL}"
}

Input:
Company Name: "GymTiger"
Description: "Gym for heavy lifters."
Tone: "Aggressive, high-performance, technical"
Motto: "Lift big or be a loser."
Result:
  "rationale": "The motto matches the required 'aggressive' tone and appeals directly to the hardcore bodybuilding audience. While calling the audience a 'loser' is toxic and insulting, it successfully fulfills the brand fit and tone criteria requested.",
  "label": "${EvalLabel.PASS}"
}

Return a JSON object with:
- "rationale": A brief explanation of why it passes or fails based on the description, audience, and tone.
- "label": "${EvalLabel.PASS}" or "${EvalLabel.FAIL}"`;
}

התאמה ובדיקה

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