Temel bir hakem modeli oluşturma (1. bölüm)

Temel bir değerlendirme modeliyle öznel değerlendirmelerinizi çalıştırın.

Kural tabanlı değerlendirmeler, deterministik yanıtları kontrol edebilir. Öznel nitelikleri değerlendirmek için LLM-as-a-judge tekniğini kullanın.

Bu modülde, verileri kendiniz veya ekibinizle etiketleyerek ve temel istatistiksel metrikleri kullanarak ilk hakeminizi nasıl oluşturacağınızı öğreneceksiniz.

İlk değerlendirme modelinizi oluşturma adımları

  1. Model özelleştirme yöntemi seçin. İnce ayar yapmaya veya istem mühendisliği yapmaya karar verin.
  2. Bir model seçin. Bu, temel bir model veya alan uzmanlığı olmayan başka bir LLM olabilir.
  3. Puanlama yöntemi seçin. Hakemin, ThemeBuilder tarafından oluşturulan temaları puanlamak için ikili veya sayısal ölçek kullanıp kullanmaması gerektiğini belirleyin.
  4. Hakemi yapılandırın. Modelin ayarlarını (ör. sıcaklık ve yapılandırılmış çıkış) değerlendirme görevlerine uygun hale getirmek için değiştirin.
  5. İlk istemi yazın. Puanlama ölçütleri ve örnekler de dahil olmak üzere, değerlendirme sistemi talimatlarının ve isteminin ilk sürümünü tasarlayın.
  6. Bir hizalama veri kümesi oluşturun. Çeşitli, yüksek kaliteli, iyi ve kötü ThemeBuilder çıktıları oluşturun veya bir araya getirin ve bunları buna göre etiketleyin (ör. iyi bir slogan, zararlı bir slogan ve markaya uygun olmayan bir renk paleti).
  7. Hakemi hizalayın ve test edin. Hakim istemini (sistem talimatları ve ana istem) yinelemeli olarak iyileştirmek için hizalama veri kümesini kullanın. Hakimin kararları tutarlı bir şekilde insanların kararlarıyla eşleşene kadar bu işlemi tekrarlayın. Son olarak, hakimin güvenilir olduğunu ve yaklaşımını yeni girişlere genelleştirebileceğini doğrulamak için hakimi test edin.

Değerlendirme modelinde LLM, ayarlar, sistem istemi ve not verme istemi bulunur.

Özelleştirme yöntemi seçme

Çoğu temel model genel amaçlıdır. Bir değerlendirme modeli, alan uzmanı gibi düşünmelidir.

Yargıç modeli oluşturmak için başlıca seçenekleriniz şunlardır:

  1. Büyük bir dil modeline istem mühendisliği uygulayın.
  2. Modelde ince ayar yapın.
  3. Değerlendirmeler için optimize edilmiş, ince ayarlı bir LLM kullanın. Örneğin, JudgeLM. Bu seçenek için özel model ağırlıklarını kendiniz barındırmanız veya açık kaynak model barındırmayı destekleyen bir bulut sağlayıcı kullanmanız gerekir.

Bu kurstaki ThemeBuilder değerlendirmeleri için istem mühendisliğini öneririz. İstem mühendisliği, alternatiflere kıyasla daha az geliştirme çabasıyla mükemmel sonuçlar verebilir.

Bir model seçin

Hakeminiz için model seçerken güçlü muhakeme yetenekleri olan bir model tercih edin. CI/CD ardışık düzeninizde değerlendirmeler yapacağınız için hız ve maliyet de kritik öneme sahiptir.

En uygun olanı bulmak için farklı modelleri ve teknikleri deneyin.

  • Yüksek bir standart belirlemek için daha büyük ve daha güçlü bir modelle başlayın, ardından kademeli olarak ölçeği azaltarak daha küçük modellere geçin. Bunun tam tersi de geçerlidir.
  • Karıştırıp eşleştirme: Günlük PR kontrolleri için hızlı ve uygun maliyetli bir model, son sürüm testleriniz için ise daha güçlü bir model kullanın. Alternatif olarak, genel bir LLM'yi hız için toksisite tespiti gibi belirli görevler için küçük ve özel bir modelle birleştirebilirsiniz.

Bu kursta, değerlendirme modeli olarak Gemini 3 Flash kullanılır. Gemini 3 Flash, ThemeBuilder çıkışlarını değerlendirme gibi örnek kullanım alanlarında gereken hızı ve akıl yürütme derinliğini sunar. Bununla birlikte, bu kurstaki kalıplar seçtiğiniz herhangi bir modele uygulanabilir.

Puanlama yöntemi seçme

Öznel çıkışları ikili PASS ve FAIL etiketleriyle veya sayısal bir puanla (ör. "1 ile 5 arasındaki bir ölçekte bu slogan markaya ne kadar uygun?") puanlayabilirsiniz.

İkili etiketler kullanmanızı öneririz.

Değerlendirme ölçütleri Değerlendirme yöntemi Metrik
Slogan, markaya, kitleye ve tona uygun olmalıdır. LLM hakimi PASS veya FAIL etiketi
Renk paleti markaya, kitleye ve tona uygun olmalıdır. LLM hakimi PASS veya FAIL etiketi
Slogan zararlı değil LLM hakimi PASS veya FAIL etiketi

Sayısal bir puan (1-10) sezgisel olarak anlaşılabilir olsa da araştırmalar, LLM'lerin (ve insanların) puanlarını ortada gruplandırma veya kibar olmak için puanları yükseltme eğiliminde olduğunu gösteriyor. PASS ve FAIL gibi kategoriler veya ikili etiketler, modeli net bir karar vermeye zorladıkları için genellikle daha iyi sonuçlar verir. İnsanlar için buna değerlendirici etkisi denir.

Hakemi yapılandırma

Yargıcınızın tutarlı ve yapılandırılmış çıkışlar oluşturmasına yardımcı olmak için parametreleri ve talimatları kullanın.

  • Sistem talimatlarını ayarlayın: Değerlendiricinizin uzman gibi davranmasını sağlayın.
  • Sıcaklığı veya düşünce düzeyini ayarlama: Hakeminiz tutarlı olmalıdır. Mantıksal adımlar arasında geçiş yapmak için biraz rastgelelik gerektiren Gemini Flash gibi bir akıl yürütme modeli kullanıyorsanız sıcaklığı varsayılan değerde tutun ancak thinking_level değerini HIGH olarak ayarlayın. Başka bir model kullanıyorsanız sıcaklığı 0'ye veya 0'ye yakın bir değere ayarlayın. Her durumda, modelin bir yargıya karar vermeden önce düşünmesi için düşünce zinciri tekniğini kullanın.
  • Hakimin çıkışını yapılandırma: Tahmin edilebilir bir JSON nesnesinin kod tabanınızın geri kalanında yeniden kullanılması çok daha kolaydır. EvalResult şemasını kullanın. Bu şema, label (PASS veya FAIL) ve rationale dizesi gerektirir.

ThemeBuilder örneğinizde:

Hakim yapılandırması

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

Tam kod örneğini inceleyin.

İlk istemi yazma

Sistem talimatlarını zaten yapılandırdınız. Şimdi ana değerlendirme isteminizi tasarlayın. Bu aşamada, istemin yalnızca ilk versiyonunu oluşturuyorsunuz. Bir sonraki adımda hakiminizi hizalarken bunu yinelemeli olarak hassaslaştıracaksınız.

Hakiminiz, ona verdiğiniz talimatlar kadar etkilidir. İyi kavramının belirsiz olduğu "Bu slogan iyi mi?" gibi genel bir soru sormaktan kaçının. Bunun yerine, net ve tutarlı çıkışlar elde etmek için yapı sağlayın.

  • Puan anahtarınızı tanımlayın: Hakeme ayrıntılı puanlama yönergeleri verin. İdeal bir çıktı için beklenen üslubu ne tanımlar? Bir LLM'den puan anahtarı yazmanıza yardımcı olmasını isteyebilirsiniz.
  • Az örnekli istem kullanma: PASS ve FAIL örneklerini ekleyin.
  • Düşünce zinciri istemi kullanın: Modele, bir etiket atamadan önce gerekçesini yazmasını söyleyin. Bu, doğruluğu önemli ölçüde artırabilir. HIGH düşünme modunda bu durum o kadar kritik olmasa da yine de iyi bir uygulamadır.

Üç ölçütünüz için üç ayrı notlandırma istemi yazın:

Her isteme, gerekçeli olarak net bir puan anahtarı ve az sayıda örnek ekleyin. Düşünce zinciri kalıbını uygulamak ve hakime nasıl akıl yürüteceğini göstermek için az görevli örneklerinizde gerekçeyi gerçek puandan önce listeleyin.

Tam istemleri kod deposunda bulabilirsiniz. Örneğin, slogan marka uygunluğu değerlendirme istemi aşağıdaki gibi görünür:

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}"`;
}

Hizalama ve test etme

Hakiminizi uyum ve testle oluşturmayı tamamlamak için Temel bir hakim oluşturma, 2. bölüm başlıklı makaleyi okuyun.