Esegui le 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 personalmente o con il tuo team e utilizzando metriche statistiche di base.
Passaggi per creare il tuo primo modello di giudice
- Scegli un metodo di personalizzazione del modello. Decidi se eseguire il fine-tuning o l'ingegneria dei prompt.
- Seleziona un modello. Può essere un foundation model o 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 e del prompt del sistema di valutazione, inclusi una rubrica di valutazione ed esempi.
- Crea un set di dati di allineamento. Crea o assembla un insieme diversificato e di alta qualità di output buoni e cattivi di ThemeBuilder e contrassegnali come tali (ad esempio un motto positivo, 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 a quelli degli esseri umani. Infine, testa il giudice per verificare che sia affidabile e che possa generalizzare il suo approccio a nuovi input.
Scegliere un metodo di personalizzazione
La maggior parte dei foundation model sono generalisti. Un modello di giudice dovrebbe pensare come uno specialista del dominio.
Le opzioni principali per creare un modello di giudice includono:
- Progetta prompt per un LLM.
- Ottimizza un modello.
- Utilizza un LLM ottimizzato e messo a punto per le valutazioni, ad esempio JudgeLM. Questa opzione richiede l'hosting di pesi del modello personalizzati in autonomia o utilizzando un provider cloud che supporti l'hosting di modelli open source.
Per le valutazioni di ThemeBuilder in questo corso, ti consigliamo l'ingegneria dei prompt. L'ingegneria del prompt può fornire risultati eccellenti con meno sforzo di sviluppo rispetto alle alternative.
Seleziona un modello
Quando scegli un modello per il tuo giudice, cerca solide capacità di ragionamento. Poiché eseguirai le valutazioni nella pipeline CI/CD, anche velocità e costi sono fondamentali.
Sperimenta modelli diversi e tecniche per trovare la soluzione migliore.
- Inizia con un modello più grande e potente per stabilire un livello elevato, poi fai lo scale down a modelli più piccoli. O viceversa.
- Combinazione: utilizza un modello rapido ed economico per i controlli PR giornalieri e un modello più potente per i test della release finale. Oppure combina un LLM generico 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 giudice. Gemini 3 Flash offre la velocità e la profondità di ragionamento necessarie per il caso d'uso di esempio della valutazione degli output di ThemeBuilder. Detto questo, i pattern di questo corso possono essere applicati a qualsiasi modello tu scelga.
Scegliere un metodo di assegnazione del punteggio
Puoi assegnare un punteggio agli output soggettivi con etichette binarie PASS e FAIL o con un punteggio numerico, ad esempio "Su una scala da 1 a 5, quanto è fedele al brand questo motto?".
Ti consigliamo di utilizzare etichette binarie.
| Criteri di valutazione | Metodo di valutazione | Metrica |
|---|---|---|
| Il motto è in linea con il brand, il pubblico e il tono | LLM Judge | Etichetta PASS o FAIL |
| La tavolozza dei colori corrisponde al brand, al pubblico e al tono | LLM Judge | Etichetta PASS o FAIL |
| Il motto non è tossico | LLM Judge | Etichetta PASS o FAIL |
Sebbene un punteggio numerico (1-10) possa sembrare intuitivo,
la ricerca mostra che i 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 fenomeno è chiamato effetto valutatore.
Configurare il giudice
Utilizza parametri e istruzioni per aiutare il giudice a creare output coerenti e strutturati.
- Imposta istruzioni di sistema: assegna al giudice un ruolo di esperto rigoroso.
- Imposta la temperatura o il livello di pensiero: 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 un valore vicino a0. In ogni caso, utilizza la tecnica della chain-of-thought, in modo che il modello pensi prima di decidere un giudizio. - Struttura l'output del giudice: un oggetto JSON prevedibile è molto più facile da riutilizzare nel resto della base di codice. Utilizza uno schema
EvalResultche richiede unlabel(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"
}
Rivedi 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, stai creando solo una prima versione di questo prompt. Lo perfezionerai in modo iterativo quando allineerai il giudice nel passaggio successivo.
Il giudice è efficace solo se le istruzioni che gli fornisci sono valide. Evita di porre una domanda generica, ad esempio "Questo motto è buono?", in cui buono non è definito. Fornisci invece una struttura per ottenere risultati chiari e coerenti.
- Definisci la griglia: fornisci al giudice linee guida dettagliate per l'assegnazione del punteggio. Quale opzione descrive il tono previsto per un output ideale? Puoi chiedere a un LLM di aiutarti a scrivere la griglia.
- Utilizza il prompt few-shot:
includi esempi di
PASSeFAIL. - Utilizza il prompting chain-of-thought:
chiedi al modello di scrivere la sua motivazione prima di assegnare un'etichetta, in quanto ciò può migliorare drasticamente l'accuratezza. Nella modalità di pensiero
HIGH, questo non è così importante, ma è comunque una buona pratica.
Scrivi tre prompt di valutazione separati per i tre criteri specifici:
- Motto brand fit.
- Adattamento al colore del brand.
- Tossicità. Il prompt sulla tossicità può essere avviato da attributi di tossicità crowdsourcing.
In ogni prompt, includi una rubrica di valutazione chiara ed esempi few-shot con una motivazione. Negli esempi few-shot, elenca la motivazione prima del punteggio effettivo per applicare il pattern di ragionamento a catena e mostrare al giudice come ragionare.
Puoi trovare i prompt completi nel repository di codice. Ad esempio, il prompt per valutare l'idoneità del brand allo slogan ha il seguente aspetto:
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}"`;
}
Allineare e testare
Leggi Configurare un giudice di base, parte 2 per completare la creazione del giudice con l'allineamento e il test.