Menyiapkan model penilaian dasar (bagian 1)

Jalankan evaluasi subjektif Anda dengan model penilai dasar.

Evaluasi berbasis aturan dapat memeriksa jawaban deterministik. Untuk mengevaluasi kualitas subjektif, gunakan teknik LLM sebagai hakim.

Dalam modul ini, Anda akan mempelajari cara membuat hakim pertama dengan melabeli data sendiri atau bersama tim Anda dan dengan menggunakan metrik statistik dasar.

Langkah-langkah untuk membuat model penilaian pertama Anda

  1. Pilih metode penyesuaian model. Tentukan apakah akan melakukan penyesuaian atau rekayasa perintah.
  2. Pilih model. Model ini dapat berupa model dasar atau LLM lain tanpa keahlian domain.
  3. Pilih metode pemberian skor. Tentukan apakah hakim harus menggunakan skala biner atau numerik untuk memberi skor pada tema yang dihasilkan ThemeBuilder.
  4. Konfigurasi hakim. Ubah setelan model (seperti temperatur dan output terstruktur) agar sesuai untuk tugas penilaian.
  5. Tulis perintah awal. Merancang petunjuk dan perintah sistem penilaian versi pertama, termasuk rubrik penilaian dan contoh.
  6. Buat set data perataan. Buat atau kumpulkan serangkaian output ThemeBuilder yang beragam dan berkualitas tinggi, baik yang bagus maupun buruk, lalu beri label yang sesuai (seperti motto yang bagus, motto yang tidak pantas, dan palet warna di luar merek).
  7. Menyelaraskan dan menguji hakim. Gunakan set data penyelarasan untuk menyempurnakan perintah penilaian secara iteratif (petunjuk sistem dan petunjuk utama). Ulangi proses ini hingga putusan hakim konsisten dengan putusan manusia. Terakhir, uji hakim untuk mengonfirmasi bahwa hakim tersebut dapat diandalkan dan dapat menggeneralisasi pendekatannya terhadap input baru.

Model hakim memiliki LLM, setelan, perintah sistem, dan perintah penilaian.

Memilih metode penyesuaian

Sebagian besar model dasar adalah model generalis. Model hakim harus berpikir seperti spesialis domain.

Opsi utama Anda untuk membuat model penilaian meliputi:

  1. Membuat perintah untuk LLM.
  2. Menyesuaikan model.
  3. Gunakan LLM yang disesuaikan dan dioptimalkan untuk evaluasi, misalnya, JudgeLM. Opsi ini mengharuskan Anda menghosting bobot model kustom sendiri atau menggunakan penyedia cloud yang mendukung hosting model open source.

Untuk evaluasi ThemeBuilder dalam kursus ini, sebaiknya gunakan rekayasa perintah. Rekayasa perintah dapat memberikan hasil yang sangat baik dengan upaya pengembangan yang lebih sedikit dibandingkan alternatif lainnya.

Pilih model

Saat memilih model untuk hakim Anda, cari model yang memiliki kemampuan penalaran yang kuat. Saat Anda menjalankan evaluasi di pipeline CI/CD, kecepatan dan biaya juga sangat penting.

Bereksperimenlah dengan berbagai model dan teknik untuk menemukan yang paling cocok.

  • Mulai dengan model yang lebih besar dan lebih canggih untuk menetapkan standar yang tinggi, lalu turunkan skala secara progresif ke model yang lebih kecil. Atau sebaliknya.
  • Campur dan padukan: Gunakan model yang cepat dan hemat biaya untuk pemeriksaan PR harian, dan model yang lebih canggih untuk pengujian rilis akhir Anda. Atau gabungkan LLM umum dengan model kecil dan khusus untuk tugas tertentu seperti deteksi toksisitas agar lebih cepat.

Kursus ini menggunakan Gemini 3 Flash sebagai model penilai. Gemini 3 Flash menawarkan kecepatan dan kedalaman penalaran yang diperlukan untuk contoh kasus penggunaan evaluasi output ThemeBuilder. Namun, pola dalam kursus ini dapat diterapkan ke model apa pun yang Anda pilih.

Memilih metode pemberian skor

Anda dapat memberi skor pada output subjektif dengan label biner PASS dan FAIL, atau dengan skor numerik, misalnya "Dalam skala 1 hingga 5, seberapa baik motto ini sesuai dengan merek?".

Sebaiknya gunakan label biner.

Kriteria evaluasi Metode evaluasi Metrik
Motto cocok dengan merek, audiens, dan gaya bahasa Hakim LLM Label PASS atau FAIL
Palet warna cocok dengan merek, audiens, dan gaya bahasa Hakim LLM Label PASS atau FAIL
Slogan tersebut tidak negatif Hakim LLM Label PASS atau FAIL

Meskipun skor numerik (1-10) mungkin terasa intuitif, penelitian menunjukkan bahwa LLM (dan manusia) cenderung mengelompokkan skor mereka di tengah atau menaikkan skor agar sopan. Kategori atau label biner seperti PASS dan FAIL sering kali memberikan hasil yang lebih baik karena memaksa model untuk membuat keputusan yang jelas. Bagi manusia, hal ini disebut efek pemberi rating.

Mengonfigurasi hakim

Gunakan parameter dan petunjuk untuk membantu juri Anda membuat output yang konsisten dan terstruktur.

  • Tetapkan petunjuk sistem: Berikan persona ahli yang ketat kepada penilai Anda.
  • Tetapkan suhu atau tingkat pemikiran: Juri Anda harus konsisten. Jika Anda menggunakan model penalaran seperti Gemini Flash, yang memerlukan sedikit keacakan untuk berpindah antar-langkah logis, pertahankan suhu pada setelan default tetapi tetapkan thinking_level ke HIGH. Jika Anda menggunakan model lain, setel suhu ke 0 atau mendekati 0. Apa pun kasusnya, gunakan teknik alur berpikir, sehingga model berpikir sebelum memutuskan penilaian.
  • Menyusun output hakim: Objek JSON yang dapat diprediksi jauh lebih mudah digunakan kembali di seluruh codebase Anda. Gunakan skema EvalResult yang memerlukan label (PASS atau FAIL) dan string rationale.

Dalam contoh ThemeBuilder Anda:

Konfigurasi hakim

// 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"
}

Tinjau contoh kode lengkap.

Tulis perintah awal

Anda telah mengonfigurasi petunjuk sistem, sekarang rancang perintah penilaian utama Anda. Pada tahap ini, Anda hanya membuat versi pertama dari perintah ini. Anda akan menyempurnakannya secara iteratif saat menyelaraskan penilaian Anda pada langkah berikutnya.

Kualitas hakim Anda bergantung pada kualitas petunjuk yang Anda berikan. Hindari mengajukan pertanyaan umum, seperti "Apakah motto ini bagus?" yang tidak mendefinisikan bagus. Sebagai gantinya, berikan struktur untuk mendapatkan output yang jelas dan konsisten.

  • Tentukan rubrik Anda: Berikan pedoman penilaian yang mendetail kepada juri. Apa yang menggambarkan gaya bahasa yang diharapkan untuk output yang ideal? Anda dapat meminta LLM membantu Anda menulis rubrik.
  • Gunakan few-shot prompting: Sertakan contoh PASS dan FAIL.
  • Gunakan prompting rantai pemikiran: Instruksikan model untuk menuliskan alasan sebelum menetapkan label, karena hal ini dapat meningkatkan akurasi secara drastis. Dalam mode berpikir HIGH, hal ini tidak terlalu penting, tetapi tetap merupakan praktik yang baik.

Tulis tiga perintah penilaian terpisah untuk tiga kriteria spesifik Anda:

Di setiap perintah, sertakan rubrik penilaian yang jelas dan contoh few-shot dengan alasan. Dalam contoh sedikit tembakan, cantumkan alasan sebelum skor sebenarnya untuk menerapkan pola rantai pemikiran dan menunjukkan kepada juri cara berpikir.

Anda dapat menemukan perintah lengkap di repositori kode. Misalnya, perintah penilaian kecocokan merek motto terlihat seperti berikut:

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 (e.g. 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}"`;
}

Menyelaraskan dan menguji

Baca menyiapkan hakim dasar, bagian 2 untuk menyelesaikan pembuatan hakim dengan penyelarasan dan pengujian.