Ejecuta tus evaluaciones subjetivas con un modelo de juez básico.
Las evaluaciones basadas en reglas pueden verificar si las respuestas son determinísticas. Para evaluar las cualidades subjetivas, usa la técnica de LLM como juez.
En este módulo, aprenderás a compilar tu primer juez etiquetando datos por tu cuenta o con tu equipo y usando métricas estadísticas básicas.
Pasos para compilar tu primer modelo de juez
- Elige un método de personalización del modelo. Decide si deseas ajustar el modelo o diseñar instrucciones.
- Selecciona un modelo. Puede ser un modelo de base o algún otro LLM sin experiencia en el dominio.
- Elige un método de puntuación. Determina si el juez debe usar una escala binaria o numérica para calificar los temas generados por ThemeBuilder.
- Configura el juez. Modifica la configuración del modelo (como la temperatura y el resultado estructurado) para que sea adecuado para las tareas de juicio.
- Escribe la instrucción inicial. Diseña una primera versión de las instrucciones y la instrucción del sistema de jueces, incluida una rúbrica de puntuación y ejemplos.
- Crea un conjunto de datos de alineación. Crea o reúne un conjunto diverso y de alta calidad de resultados buenos y malos de ThemeBuilder, y etiquétalos como tales (por ejemplo, un buen lema, un lema tóxico y una paleta de colores que no coincide con la marca).
- Alinea y prueba el juez. Usa el conjunto de datos de alineación para refinar de forma iterativa la instrucción del evaluador (instrucciones del sistema y la instrucción principal). Repite este proceso hasta que los veredictos del juez coincidan de forma coherente con los de los humanos. Por último, prueba el juez para confirmar que es confiable y puede generalizar su enfoque a nuevas entradas.
Elige un método de personalización
La mayoría de los modelos de base son generalistas. Un modelo de juez debe pensar como un especialista en el dominio.
Estas son las principales opciones para crear un modelo de juez:
- Diseñar instrucciones para un LLM
- Ajusta un modelo.
- Usa un LLM ajustado que esté optimizado para las evaluaciones, por ejemplo, JudgeLM. Esta opción requiere que alojes los pesos del modelo personalizado por tu cuenta o que uses un proveedor de servicios en la nube que admita el alojamiento de modelos de código abierto.
Para las evaluaciones de ThemeBuilder en este curso, te recomendamos la ingeniería de instrucciones. La ingeniería de instrucciones puede generar excelentes resultados con menos esfuerzo de desarrollo que las alternativas.
Seleccionar un modelo
Cuando elijas un modelo para tu juez, busca capacidades de razonamiento sólidas. A medida que ejecutes evaluaciones en tu canalización de CI/CD, la velocidad y el costo también serán fundamentales.
Experimenta con diferentes modelos y técnicas para encontrar la mejor opción.
- Comienza con un modelo más grande y potente para establecer un estándar alto y, luego, reduce la escala progresivamente a modelos más pequeños. O al revés.
- Combinación: Usa un modelo rápido y rentable para las verificaciones diarias de relaciones públicas, y un modelo más potente para las pruebas de la versión final. También puedes combinar un LLM general con un modelo pequeño y especializado para tareas específicas, como la detección de toxicidad, y así aumentar la velocidad.
En este curso, se usa Gemini 3 Flash como modelo de evaluación. Gemini 3 Flash ofrece la velocidad y la profundidad de razonamiento necesarias para el caso de uso de ejemplo de evaluación de los resultados de ThemeBuilder. Dicho esto, los patrones de este curso se pueden aplicar a cualquier modelo que elijas.
Elige un método de puntuación
Puedes calificar los resultados subjetivos con etiquetas binarias PASS y FAIL, o con una calificación numérica, por ejemplo, "En una escala del 1 al 5, ¿qué tan bien se ajusta este lema a la marca?".
Recomendamos usar etiquetas binarias.
| Criterios de evaluación | Método de evaluación | Métrica |
|---|---|---|
| El lema coincide con la marca, el público y el tono. | Juez de LLM | Etiqueta PASS o FAIL |
| La paleta de colores coincide con la marca, el público y el tono. | Juez de LLM | Etiqueta PASS o FAIL |
| El lema no es tóxico | Juez de LLM | Etiqueta PASS o FAIL |
Si bien una puntuación numérica (del 1 al 10) puede parecer intuitiva, las investigaciones demuestran que los LLM (y los humanos) tienden a agrupar sus puntuaciones en el medio o a inflarlas para ser amables.
Las categorías o las etiquetas binarias, como PASS y FAIL, suelen generar mejores resultados porque obligan al modelo a tomar una decisión clara. En el caso de los humanos, esto se conoce como efecto del evaluador.
Configura el juez
Usa parámetros e instrucciones para ayudar a tu evaluador a crear resultados coherentes y estructurados.
- Establece instrucciones del sistema: Dale a tu juez una personificación estricta de experto.
- Establece la temperatura o el nivel de pensamiento: Tu juez debe ser coherente. Si usas un modelo de razonamiento como Gemini Flash, que requiere una ligera aleatoriedad para pasar de un paso lógico a otro, mantén la temperatura predeterminada, pero establece
thinking_levelenHIGH. Si usas otro modelo, establece la temperatura en0o cerca de0. En cualquier caso, usa la técnica de cadena de pensamientos para que el modelo piense antes de decidir un juicio. - Estructura el resultado del juez: Un objeto JSON predecible es mucho más fácil de reutilizar en el resto de tu base de código. Usa un esquema
EvalResultque requiera unlabel(PASSoFAIL) y una cadenarationale.
En tu ejemplo de ThemeBuilder, haz lo siguiente:
Configuración del juez
// 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"
}
Revisa el ejemplo de código completo.
Escribe la instrucción inicial
Ya configuraste las instrucciones del sistema. Ahora diseña la instrucción principal del juez. En esta etapa, solo crearás una primera versión de esta instrucción. La definirás mejor de forma iterativa cuando alinees a tu juez en el siguiente paso.
Tu juez solo es tan eficaz como las instrucciones que le das. Evita hacer preguntas genéricas, como "¿Este lema es bueno?", en las que bueno no está definido. En cambio, proporciona una estructura para obtener resultados claros y coherentes.
- Define tu rúbrica: Proporciona al juez pautas de puntuación detalladas. ¿Qué describe el tono esperado para un resultado ideal? Puedes pedirle a un LLM que te ayude a escribir la rúbrica.
- Usa instrucciones con pocos ejemplos:
Incluye ejemplos de
PASSyFAIL. - Usa la cadena de pensamientos:
Indícale al modelo que escriba su justificación antes de asignar una etiqueta, ya que esto puede mejorar drásticamente la exactitud. En el modo de pensamiento de
HIGH, esto no es tan importante, pero sigue siendo una buena práctica.
Escribe tres instrucciones de calificación independientes para tus tres criterios específicos:
- La marca se ajusta al lema.
- El color se adapta a la marca.
- Toxicidad Tu instrucción de toxicidad se puede iniciar a partir de atributos de toxicidad obtenidos de fuentes externas.
En cada instrucción, incluye una rúbrica de puntuación clara y ejemplos con pocos ejemplos con una explicación. En tus ejemplos de aprendizaje con pocos ejemplos, enumera la explicación antes de la puntuación real para aplicar el patrón de cadena de pensamientos y mostrarle al juez cómo razonar.
Puedes encontrar las instrucciones completas en el repositorio de código. Por ejemplo, la instrucción para el juez de adecuación de la marca al lema se ve de la siguiente manera:
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}"`;
}
Alinea y prueba
Lee cómo configurar un juez básico, parte 2 para terminar de compilar tu juez con alineación y pruebas.