Konfigurowanie podstawowego modelu oceniającego (część 1)

Uruchamianie ocen subiektywnych za pomocą podstawowego modelu oceniającego

Oceny oparte na regułach mogą sprawdzać odpowiedzi deterministyczne. Aby ocenić subiektywne cechy, użyj techniki LLM jako oceniającego.

W tym module dowiesz się, jak utworzyć pierwszego oceniającego, samodzielnie lub z zespołem oznaczając dane za pomocą podstawowych danych statystycznych.

Tworzenie pierwszego modelu oceniającego

Model oceniający ma LLM, ustawienia, prompt systemowy i prompt oceniania.

  1. Wybierz metodę dostosowywania modelu. Możesz dostroić model lub zastosować inżynierię promptów.
  2. Wybierz model. Może to być model podstawowy lub inny model LLM bez wiedzy specjalistycznej.
  3. Wybierz metodę oceniania. Określ, czy oceniający ma używać skali binarnej czy numerycznej do oceniania motywów wygenerowanych przez ThemeBuilder.
  4. Skonfiguruj oceniającego. Zmodyfikuj ustawienia modelu (np. temperaturę i dane wyjściowe w postaci uporządkowanej), aby dostosować go do zadań oceniania.
  5. Napisz początkowy prompt. Zaprojektuj pierwszą wersję instrukcji systemu oceniającego i promptu, w tym kryteria oceniania i przykłady.
  6. Utwórz zbiór danych do dopasowania. Utwórz lub zbierz różnorodny, wysokiej jakości zbiór dobrych i złych danych wyjściowych ThemeBuilder i odpowiednio je oznacz, np. dobre motto, toksyczne motto i paleta kolorów niezgodna z marką.
  7. Dopasuj i przetestuj oceniającego. Użyj zbioru danych do dopasowania, aby iteracyjnie udoskonalać prompt oceniającego (instrukcje systemowe i główny prompt). Powtarzaj ten proces, aż werdykty oceniającego będą spójne z werdyktami ludzi. Na koniec przetestuj oceniającego, aby potwierdzić jego niezawodność i zdolność do uogólniania podejścia do nowych danych wejściowych.

Model oceniający ma LLM, ustawienia, prompt systemowy i prompt oceniania.

Wybieranie metody dostosowywania

Większość modeli podstawowych to modele ogólne. Model oceniający działa jako specjalista w danej dziedzinie.

Główne opcje tworzenia modelu oceniającego:

  1. Inżynieria promptów LLM.
  2. Dostrajanie modelu.
  3. Używanie dostrojonego modelu LLM zoptymalizowanego pod kątem ocen, np. JudgeLM. Ta opcja wymaga hostowania niestandardowych wag modelu lub korzystania z dostawcy chmury, który obsługuje hostowanie modeli open source.

W przypadku ocen ThemeBuilder w tym kursie zalecamy inżynierię promptów. Inżynieria promptów może zapewnić doskonałe wyniki przy mniejszym nakładzie pracy niż inne rozwiązania.

Wybieranie modelu

Podczas wybierania modelu dla oceniającego szukaj modeli o dużych możliwościach rozumowania. Ponieważ oceny są przeprowadzane w potoku CI/CD, szybkość i koszt są również bardzo ważne.

Eksperymentuj z różnymi modelami i technikami, aby znaleźć optymalne rozwiązanie.

  • Zacznij od większego, bardziej wydajnego modelu , aby ustalić wysoki standard, a następnie stopniowo skaluj w dół do mniejszych modeli. Możesz też zacząć od mniejszych modeli i skalować je w górę.
  • Łącz i dopasowuj: używaj szybkiego i niedrogiego modelu do codziennych sprawdzeń żądań pull oraz bardziej wydajnego modelu do testów wersji ostatecznej. Możesz też połączyć ogólny model LLM z małym, wyspecjalizowanym modelem do konkretnych zadań, takich jak wykrywanie toksyczności, aby zwiększyć szybkość.

W tym kursie jako model oceniający używamy modelu Gemini 3 Flash. Model Gemini 3 Flash zapewnia szybkość i głębokość rozumowania wymagane w przykładowym przypadku użycia, czyli ocenianiu danych wyjściowych ThemeBuilder. Wzorce w tym kursie można jednak stosować do dowolnego wybranego modelu.

Wybieranie metody oceniania

Subiektywne dane wyjściowe możesz oceniać za pomocą etykiet binarnych PASS i FAIL lub za pomocą wyniku numerycznego, np. „Jak dobrze to motto pasuje do marki w skali od 1 do 5?”.

Zalecamy używanie etykiet binarnych.

Kryteria oceny Metoda oceny Dane
Motto pasuje do marki, odbiorców i tonu Oceniający LLM Etykieta PASS lub FAIL
Paleta kolorów pasuje do marki, odbiorców i tonu Oceniający LLM Etykieta PASS lub FAIL
Motto nie jest toksyczne Oceniający LLM Etykieta PASS lub FAIL

Wynik numeryczny może wydawać się intuicyjny, badania pokazują że modele LLM (i ludzie) mają tendencję do grupowania wyników w środku lub zawyżania ich, aby być uprzejmym. Kategorie lub etykiety binarne, takie jak PASS i FAIL często dają lepsze wyniki, ponieważ zmuszają model do podjęcia jasnej decyzji. W przypadku ludzi nazywa się to efektem oceniającego.

Konfigurowanie oceniającego

Użyj parametrów i instrukcji, aby pomóc oceniającemu w tworzeniu spójnych, uporządkowanych danych wyjściowych.

  • Ustaw instrukcje systemowe: nadaj oceniającemu ścisłą osobowość eksperta.
  • Ustaw temperaturę lub poziom myślenia: oceniający musi być spójny. Jeśli używasz modelu rozumowania, takiego jak Gemini Flash, który wymaga niewielkiej losowości, aby przechodzić między krokami logicznymi, pozostaw temperaturę domyślną ale ustaw thinking_level na HIGH. Jeśli używasz innego modelu, ustaw temperaturę na 0 lub bliską 0. W każdym przypadku użyj techniki łańcucha myśli, aby model zastanowił się przed podjęciem decyzji.
  • Uporządkuj dane wyjściowe oceniającego: przewidywalny obiekt JSON jest znacznie łatwiejszy do ponownego użycia w pozostałej części bazy kodu. Użyj schematu EvalResult, który wymaga ciągu label (PASS lub FAIL) i rationale.

W przykładzie ThemeBuilder:

Konfiguracja oceniającego

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

Zapoznaj się z pełnym przykładem kodu.

Napisz początkowy prompt

Instrukcje systemowe zostały już skonfigurowane. Teraz zaprojektuj główny prompt oceniającego. Na tym etapie utwórz pierwszą wersję tego promptu. W następnym kroku będziesz go iteracyjnie udoskonalać podczas dopasowywania oceniającego.

Skuteczność oceniającego zależy od podanych instrukcji. Unikaj zadawania ogólnych pytań, takich jak „Czy to motto jest dobre?”, gdzie dobre jest niezdefiniowane. Zamiast tego zapewnij strukturę, aby uzyskać jasne i spójne dane wyjściowe.

  • Zdefiniuj kryteria oceniania: podaj oceniającemu szczegółowe wytyczne dotyczące oceniania. Co opisuje oczekiwany ton idealnych danych wyjściowych? Model LLM może pomóc Ci w napisaniu kryteriów oceniania.
  • Użyj tworzenia promptów few-shot: uwzględnij przykłady PASS i FAIL.
  • Wykorzystaj w prompcie łańcuch myśli: poproś model, aby przed przypisaniem etykiety napisał uzasadnienie, ponieważ może to znacznie zwiększyć dokładność. W trybie myślenia HIGH nie jest to tak ważne, ale nadal jest to dobra praktyka.

Napisz 3 oddzielne prompty oceniania dla 3 konkretnych kryteriów:

W każdym prompcie uwzględnij jasne kryteria oceniania i przykłady typu „few-shot” z uzasadnieniem. W przykładach typu „few-shot” podaj uzasadnienie przed rzeczywistym wynikiem, aby zastosować wzorzec łańcucha myśli i pokazać, jak oceniający rozumuje.

Pełne prompty znajdziesz w repozytorium kodu. Na przykład prompt oceniającego dopasowanie motta do marki wygląda tak:

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

Dopasowywanie i testowanie

Aby dokończyć tworzenie oceniającego za pomocą dopasowywania i testowania, przeczytaj artykuł Konfigurowanie podstawowego oceniającego, część 2.