Esegui valutazioni soggettive con un modello di giudice di base.
Le valutazioni basate su regole possono verificare le risposte deterministiche. Per valutare le qualità soggettive, utilizza la tecnica LLM-as-a-judge.
In questo modulo imparerai a creare il tuo primo giudice etichettando i dati da solo o con il tuo team, utilizzando metriche statistiche di base.
Crea il tuo primo modello di giudice
- Scegli un metodo di personalizzazione del modello. Puoi eseguire l'ottimizzazione o il prompt engineering.
- Seleziona un modello. Può trattarsi di un foundation model o di un altro LLM senza competenze specifiche del dominio.
- Scegli un metodo di assegnazione del punteggio. Determina se il giudice deve utilizzare una scala binaria o numerica per assegnare un punteggio ai temi generati da ThemeBuilder.
- Configura il giudice. Modifica le impostazioni del modello (ad esempio temperatura e output strutturato) per renderlo adatto alle attività di giudizio.
- Scrivi il prompt iniziale. Progetta una prima versione delle istruzioni del sistema di giudizio e del prompt, inclusi una griglia di punteggio ed esempi.
- Crea un set di dati di allineamento. Crea o assembla un insieme diversificato e di alta qualità di output di ThemeBuilder buoni e non buoni ed etichettali di conseguenza, ad esempio un motto efficace, un motto tossico e una tavolozza di colori fuori brand.
- Allinea e testa il giudice. Utilizza il set di dati di allineamento per perfezionare in modo iterativo il prompt del giudice (istruzioni di sistema e prompt principale). Ripeti questo processo finché i verdetti del giudice non corrispondono costantemente ai verdetti umani. Infine, testa il giudice per confermarne l'affidabilità e la capacità di generalizzare il suo approccio a nuovi input.
Scegli un metodo di personalizzazione
La maggior parte dei foundation model sono generalisti. Un modello di giudice funge da specialista del dominio.
Le opzioni principali per creare un modello di giudice includono:
- Prompt engineering di un LLM.
- Ottimizzazione di un modello.
- Utilizzo di un LLM ottimizzato per le valutazioni, ad esempio, JudgeLM. Questa opzione richiede di ospitare i pesi del modello personalizzato o di utilizzare un provider di servizi cloud che supporti l'hosting di modelli open source.
Per le valutazioni di ThemeBuilder in questo corso, consigliamo il prompt engineering. Il prompt engineering può fornire risultati eccellenti con uno sforzo di sviluppo inferiore rispetto alle alternative.
Seleziona un modello
Quando selezioni un modello per il giudice, cerca funzionalità di ragionamento avanzate. Poiché esegui le valutazioni nella pipeline CI/CD, anche la velocità e il costo sono fondamentali.
Sperimenta diversi modelli e tecniche per trovare la soluzione ottimale.
- Inizia con un modello più grande e potente per stabilire un livello elevato, quindi riduci gradualmente le dimensioni dei modelli. In alternativa, inizia con modelli più piccoli e fai lo scale up.
- Combina e abbina: utilizza un modello rapido ed economico per i controlli giornalieri delle richieste di pull e un modello più potente per i test di rilascio finali. In alternativa, combina un LLM generale con un modello piccolo e specializzato per attività specifiche come il rilevamento della tossicità per la velocità.
Questo corso utilizza Gemini 3 Flash come modello di giudice. Gemini 3 Flash offre la velocità e la profondità di ragionamento richieste per il caso d'uso di esempio della valutazione degli output di ThemeBuilder. Tuttavia, i pattern di questo corso possono essere applicati a qualsiasi modello tu scelga.
Scegli un metodo di assegnazione del punteggio
Puoi assegnare un punteggio agli output soggettivi con le etichette binarie PASS e FAIL o con un punteggio numerico, ad esempio "Su una scala da 1 a 5, quanto bene questo motto aderisce al brand?"
Ti consigliamo di utilizzare le etichette binarie.
| Criteri di valutazione | Metodo di valutazione | Metrica |
|---|---|---|
| Il motto corrisponde al brand, al pubblico e al tono | Giudice LLM | Etichetta PASS o FAIL |
| La tavolozza dei colori corrisponde al brand, al pubblico e al tono | Giudice LLM | Etichetta PASS o FAIL |
| Il motto non è tossico | Giudice LLM | Etichetta PASS o FAIL |
Sebbene un punteggio numerico possa sembrare intuitivo,
la ricerca mostra che gli LLM (e gli esseri umani)
tendono a raggruppare i punteggi al centro o a gonfiarli per essere educati.
Le categorie o le etichette binarie come
PASS e FAIL
spesso producono risultati migliori perché costringono il modello a prendere una decisione chiara. Per gli esseri umani, questo è chiamato effetto di valutazione.
Configura il giudice
Utilizza parametri e istruzioni per aiutare il giudice a creare output coerenti e strutturati.
- Imposta le istruzioni di sistema: assegna al giudice una personalità esperta e rigorosa.
- Imposta la temperatura o il livello di ragionamento: il giudice deve essere coerente. Se
utilizzi un modello di ragionamento come Gemini Flash, che richiede una leggera
casualità per passare da un passaggio logico all'altro,
mantieni la temperatura predefinita
ma imposta
thinking_levelsuHIGH. Se utilizzi un altro modello, imposta la temperatura su0o su un valore vicino a0. In ogni caso, utilizza la tecnica della chain-of-thought, in modo che il modello rifletta prima di decidere un giudizio. - Struttura l'output del giudice: un oggetto JSON prevedibile è molto più facile da
riutilizzare nel resto della codebase. Utilizza uno schema
EvalResultche richieda un'etichettalabel(PASSoFAIL) e una stringarationale.
Nell'esempio di ThemeBuilder:
Configurazione del giudice
// 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"
}
Esamina l' esempio di codice completo.
Scrivi il prompt iniziale
Hai già configurato le istruzioni di sistema, ora progetta il prompt principale del giudice. In questa fase, crea la prima versione di questo prompt. Lo perfezionerai in modo iterativo quando allineerai il giudice nel passaggio successivo.
L'efficacia del giudice dipende dalle istruzioni fornite. Evita di porre una domanda generica, ad esempio "Questo motto è efficace?", dove efficace non è definito. Invece, fornisci una struttura per ottenere output chiari e coerenti.
- Definisci la griglia: fornisci al giudice linee guida dettagliate per l'assegnazione del punteggio. Cosa descrive il tono previsto tone per un output ideale? Un LLM può aiutarti a scrivere la griglia.
- Utilizza il prompting few-shot:
includi esempi di
PASSeFAIL. - Utilizza il prompting chain-of-thought:
chiedi al modello di scrivere la motivazione prima di assegnare un'etichetta, in quanto
ciò può migliorare drasticamente l'accuratezza. Nella modalità di ragionamento
HIGH, questo non è così importante, ma è comunque una buona pratica.
Scrivi tre prompt di valutazione separati per i tre criteri specifici:
- Idoneità del motto per il brand.
- Idoneità del colore per il brand.
- Tossicità. Il prompt di tossicità può essere avviato da attributi di tossicità di crowdsourcing.
In ogni prompt, includi una griglia di punteggio chiara ed esempi few-shot con una motivazione. Negli esempi few-shot, elenca la motivazione prima del punteggio effettivo per applicare il pattern della catena di pensiero e dimostrare come ragiona il giudice.
Puoi trovare i prompt completi nel repository di codice. Ad esempio, il prompt del giudice per l'idoneità del motto per il brand è il seguente:
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}"`;
}
Allinea e testa
Leggi Configurare un giudice di base, parte 2 per completare la creazione del giudice con l'allineamento e il test.