Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Definición de los métodos de evaluación
Descripción general de
Elija UN método de evaluación por plantilla de solicitud u omita todos los campos de evaluación opcionales como valores predeterminados del sistema. Las distintas plantillas del mismo trabajo pueden utilizar métodos diferentes. La evaluación orienta la optimización rápida, así que defina su método y criterios con la mayor precisión posible.
Consejos sobre conjuntos de datos
Combine ejemplos fáciles y difíciles: combine lo que ve en el mundo real. All-easy los datos no impulsan la necesidad de mejorar; los datos completos no dejan nada de lo que aprender.
Cubra los casos que le interesen: el sistema generaliza más allá de lo que ve, pero una distribución de datos representativa le ayuda a generalizar mejor las entradas del mundo real.
Tras una optimización inmediata, pruebe los datos que el optimizador no haya visto con un conjunto de datos retenido. De este modo, confirme que las ganancias son reales y no solo se han memorizado.
Evaluación predeterminada
Omita todos los campos de evaluación opcionales (steeringCriteria,customLLMJConfig,evaluationMetricLambdaArn). El servicio utiliza un genérico integrado LLM-as-judge desarrollado por Anthropic Claude Sonnet 4.6 que evalúa tres criterios predeterminados: precisión de la respuesta, integridad de la respuesta y calidad de la expresión. Teniendo en cuenta el mensaje, la respuesta del modelo objetivo y una respuesta de referencia, el juez puntúa cada dimensión. Luego, asigna dinámicamente las ponderaciones apropiadas a la tarea y produce una puntuación general ponderada.
Le recomendamos que defina su propio método de evaluación para obtener los mejores resultados.
Mensaje de juez predeterminado proporcionado por el sistema
El siguiente es el mensaje de juez completo proporcionado por el sistema que se utiliza en la evaluación predeterminada con Anthropic Claude Sonnet 4.6:
Please act as an impartial judge and evaluate the quality of an answer to a user question, with the help of a reference answer. You will be given: (1) a user question, enclosed in <user_question></user_question> tags (2) an answer, enclosed in <answer></answer> tags (3) a reference answer, enclosed in <reference_answer></reference_answer> tags ## Universal Evaluation Dimensions Evaluate the answer across these core dimensions: **(1) Answer Accuracy:** examines correctness, consistency, and factuality alignment between the <answer> and the <user_question>; examines if the <answer> contains irrelevant or wrongful information/hallucination. **(2) Answer Completeness:** examines if the <answer> is fully addressing the <user_question>; examines if the <answer> is good at relevance/informativeness: selection of important/key content from <user_question> **(3) Expression Quality:** examines if the <answer> is concise at answering the <user_question>. NOTE that unless there is special instruction, more concise <answer> is always better, and explanation or rational is strictly NOT needed - THIS IS THE MOST IMPORTANT! examines the alignment on instruction following, e.g., if the <answer> adheres to both explicit guidelines and implicit guidelines (like few-shot examples) in the <user_question>; ## Scoring Rubric For each dimension, assign one score: - **3 points**: Fully satisfies the dimension requirements - **2 points**: Mostly satisfies with minor issues or gaps - **1 point**: Partially satisfies but has notable limitations - **0 points**: Does not satisfy the dimension requirements ## Evaluation Process 1. First, identify the task type from the user question 2. Consider any additional criteria provided 3. Score each dimension independently 4. Determine appropriate weights and calculate final weighted score ## Dimension Weighting and Final Scoring **Weight Determination Process:** Assign weights (must sum to 1.0) based on: - Explicit weights in evaluation_criteria (if provided) - Task analysis and question requirements (if no explicit weights) - Default weights (Answer Accuracy: 0.35, Answer Completeness: 0.30, Expression Quality: 0.35) as fallback **Weight Guidelines:** - **High Accuracy Weight (0.4-0.6)**: Factual questions, multiple choice, technical problems - **High Completeness Weight (0.4-0.6)**: Complex explanatory tasks, multi-part questions - **High Expression Weight (0.4-0.6)**: Creative tasks, presentation-focused questions, format-specific requirements {custom_eval_weight_guideline} **Overall Score Calculation:** Overall = (Answer_Accuracy x Weight_A) + (Answer_Completeness x Weight_C) + (Expression_Quality x Weight_E) ## Output Format Provide your evaluation in this exact format: <Task_Analysis>Brief analysis of task type and appropriate weight rationale</Task_Analysis> <Weights>Answer Accuracy: 0.XX, Answer Completeness: 0.XX, Expression Quality: 0.XX</Weights> <Answer Accuracy>X</Answer Accuracy> <Answer Completeness>X</Answer Completeness> <Expression Quality>X</Expression Quality> <Calculation>(X x 0.XX) + (X x 0.XX) + (X x 0.XX) = X.XX</Calculation> <Overall>X.XX</Overall> <Justification> **Answer Accuracy**: [Evaluate factual accuracy, alignment with reference answer, absence of errors/hallucinations, and logical consistency] **Answer Completeness**: [Assess whether all aspects of the question are addressed, necessary information is included, and content stays relevant] **Expression Quality**: [Examine formatting/style adherence, appropriate detail level, communication clarity, and instruction following] **Weight Application**: [Explain how the chosen weights reflect the task requirements and impact the final score] </Justification> --- ## Current Evaluation Task <user_question> {prompt} </user_question> <answer> {prediction} </answer> <reference_answer> {gold} </reference_answer> Based on the above guidelines and criteria, provide your evaluation:
Criterios de dirección
Los criterios orientativos son descriptores breves en lenguaje natural que guían la dirección de la optimización.
Formato:
"steeringCriteria": ["string1", "string2"]Qué pueden ser: desde una sola palabra hasta unas pocas oraciones con descripciones cualitativas o cuantitativas de cómo desea que sea la respuesta del modelo.
Límite: hasta 5 por plantilla de mensaje.
Ejemplo:
"steeringCriteria": ["PROFESSIONAL", "CONCISE"]
Personalizado LLM-as-a-judge
Proporcione una rúbrica completa con una escala de calificación que usted defina. Su solicitud de juez personalizada se fusiona con la solicitud de juez del sistema del servicio y recibe una mayor ponderación.
Configuración
Formato: plus
"customLLMJConfig": {"customLLMJPrompt": "...", "customLLMJModelId": "..."}"customEvaluationMetricLabel": "My Metric"Modelos de jueces disponibles: anthropic.claude-opus-4-6-v1, anthropic.claude-sonnet-4-5-20250929-v 1:0, anthropic.claude-sonnet-4-6
Marcadores de posición en su mensaje de juez:
{{prompt}}: el mensaje completamente renderizado (combinación de la plantilla del formulario y las muestras de evaluación){{response}}: la salida del modelo{{referenceResponse}}: la verdad fundamental
Puntuación: defina su escala de calificación para que un número más alto sea mejor. El servicio normaliza todas las puntuaciones para los resultados finales.
Si tiene varias rúbricas, combínelas en una sola solicitud para el juez.
Mejores prácticas para redactar las instrucciones de los jueces
Utilice una rúbrica claramente definida con criterios de puntuación explícitos y ejemplos concretos de cada nivel de puntuación. Fije cada nivel de rúbrica con descripciones de comportamiento en lugar de adjetivos subjetivos. Incluya al menos un ejemplo práctico que muestre una puntuación no perfecta para evitar que el juez se quede con calificaciones altas por defecto. Indique al modelo que proporcione una justificación por escrito antes de la puntuación numérica. Considere la posibilidad de evaluar dimensiones específicas de forma independiente antes de asignar una puntuación general. Los LLM-as-a-judge evaluadores más confiables y útiles suelen ser aquellos en los que usted está de acuerdo con las respuestas que proporciona el modelo de juez. Por lo tanto, puede ser útil utilizar una evaluación que ya haya examinado.
Cómo se fusiona su mensaje de juez personalizado con el mensaje del sistema en tiempo de ejecución
Cuando proporciona su propio mensaje de LLM-as-a-judge evaluador, se fusiona con un mensaje de juez genérico proporcionado por el servicio. El mensaje contiene instrucciones específicas sobre el formato y otras prácticas recomendadas que ayudan a avanzar en la optimización. En la sentencia final, se da más importancia a su petición de juez personalizada que a los criterios genéricos. En concreto, el servicio:
Extrae la intención de tu mensaje personalizado
Normaliza la escala para que coincida con la rúbrica de 0 a 3 del sistema
La inyecta como una dimensión con nombre dentro de las etiquetas CUSTOM_CRITERIA_DESCRIPTION
Define las instrucciones de ponderación para dar al criterio personalizado una importancia elevada (de 0,3 a 0,6)
Añade reglas de prioridad que indican que los criterios personalizados anulan los conflictos con otras dimensiones
Conserva la semántica original de la evaluación
Ejemplo: puede proporcionar el siguiente LLM-as-a-judge mensaje personalizado que evalúe la fidelidad:
You are given a task in some context (Input), and a candidate answer. Is the candidate answer faithful to the task description and context? A response is unfaithful only when (1) it clearly contradicts the context, or (2) the task implies that the response must be based on the context, like in a summarization task. If the task does not ask to respond based on the context, the model is allowed to use its own knowledge to provide a response, even if its claims are not verifiable. Task: {{prompt}} Candidate Response: {{response}} First provide your explanation, then state your final answer. Use the following format: Explanation: [Explanation], Answer: [Answer], where '[Answer]' must be one of: none is faithful some is faithful approximately half is faithful most is faithful all is faithful
A continuación, se fusiona con la LLM-as-a-judge solicitud predeterminada y se le da una fuerte ponderación. El efecto neto: la solicitud de fidelidad basada en un único criterio se convierte en un eje muy ponderado en una evaluación multidimensional, mientras que el sistema añade una estructura (precisión, integridad, expresión) a su alrededor.
La siguiente es la solicitud de juez combinada resultante:
"""Please act as an impartial judge and evaluate the quality of an answer to a user question, with the help of a reference answer. You will be given: (1) a user question, enclosed in <user_question></user_question> tags (2) an answer, enclosed in <answer></answer> tags (3) a reference answer, enclosed in <reference_answer></reference_answer> tags (4) custom evaluation criteria that have been integrated into the evaluation dimensions below **IMPORTANT**: - Custom criteria requirements take absolute precedence over user requirements specified inside <user_question> </user_question> **IMPORTANT**: - If there is any conflict between custom criteria and user question requirements, prioritize custom criteria ## Universal Evaluation Dimensions Evaluate the answer across these core dimensions: **(1) Answer Accuracy:** examines correctness, consistency, and factuality alignment between the <answer> and the <user_question>; examines if the <answer> contains irrelevant or wrongful information/hallucination. **(2) Answer Completeness:** examines if the <answer> is fully addressing the <user_question>; examines if the <answer> is good at relevance/informativeness: selection of important/key content from <user_question> **(3) Expression Quality:** examines if the <answer> is concise at answering the <user_question>. NOTE that unless there is special instruction, more concise <answer> is always better, and explanation or rational is strictly NOT needed - THIS IS THE MOST IMPORTANT! examines the alignment on instruction following, e.g., if the <answer> adheres to both explicit guidelines and implicit guidelines (like few-shot examples) in the <user_question>; <CUSTOM_CRITERIA_DESCRIPTION> **(4) Faithfulness to Context:** examines whether the candidate answer is faithful to the task description and context provided in the user question. A response is unfaithful only when (1) it clearly contradicts the context, or (2) the task implies that the response must be based on the context (like in a summarization task). If the task does not ask to respond based on the context, the model is allowed to use its own knowledge to provide a response, even if its claims are not verifiable. Evaluate the degree of faithfulness on the following scale: - **3 points**: All content is faithful (no contradictions, fully grounded when required) - **2 points**: Most content is faithful (minor deviations or unverifiable claims when context-grounding is required) - **1 point**: Some content is faithful or approximately half is faithful (notable contradictions or significant departures from context when required) - **0 points**: None or minimal content is faithful (clear contradictions or complete disregard of context when grounding is required) </CUSTOM_CRITERIA_DESCRIPTION> ## Dimension Weighting and Final Scoring **Weight Determination Process:** Assign weights (must sum to 1.0) based on: - Explicit weights in evaluation_criteria (if provided) - Task analysis and question requirements (if no explicit weights) - Default weights (Answer Accuracy: 0.25, Answer Completeness: 0.25, Expression Quality: 0.25, Faithfulness to Context: 0.25) as fallback **Weight Guidelines:** - **High Accuracy Weight (0.3-0.5)**: Factual questions, multiple choice, technical problems - **High Completeness Weight (0.3-0.5)**: Complex explanatory tasks, multi-part questions - **High Expression Weight (0.3-0.5)**: Creative tasks, presentation-focused questions, format-specific requirements - [*IMPORTANT*] **High Custom Criteria Weight**: The custom criteria (Faithfulness to Context) should always be *prioritized*. Assign it significant weight (0.3-0.6) and adjust other weights accordingly. **Overall Score Calculation:** Overall = (Answer_Accuracy x Weight_A) + (Answer_Completeness x Weight_C) + (Expression_Quality x Weight_E) + (Faithfulness_to_Context x Weight_F) ## Current Evaluation Task <user_question> {prompt} </user_question> <answer> {prediction} </answer> <reference_answer> {gold} </reference_answer> Based on the above guidelines and criteria, provide your evaluation:"""
Evaluador Lambda personalizado
Utilice su propia función de puntuación como función Lambda.
Configuración
Especifique el ARN de Lambda en el archivo JSONL de entrada para cada plantilla de solicitud que lo utilice. También debe proporcionar el customEvaluationMetricLabel campo para asignar un nombre a la métrica:
"evaluationMetricLambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:my-eval-function", "customEvaluationMetricLabel": "My Custom Metric"
Al crear el trabajo a través de la API, no es necesaria ninguna configuración de evaluación adicional en la propia CreateAdvancedPromptOptimizationJob solicitud. El método de evaluación se determina por plantilla a partir del archivo JSONL de entrada.
Requisitos de Lambda
.pyArchivo único con todo el códigoControlador configurado en
lambda_function.lambda_handlerDebe implementar
compute_score(preds, golds)la devolución{"score": float, "scores": [float, ...]}El
goldsparámetro contiene losreferenceResponsevalores. Si no lo proporcionastereferenceResponseen tu conjunto de datos de entrada, no necesitas transferirgoldstucompute_scorefunción.Nunca se bloquee; devuelva 0.0 en caso de errores en lugar de generar excepciones
Prefiera las puntuaciones continuas (de 0.0 a 1.0) a las binarias 0/1 para lograr una convergencia de optimización más rápida
No es necesario que las puntuaciones estén limitadas a [0, 1].
Las puntuaciones deben seguir una escala de «cuanto más alto, mejor». Este es un requisito para que la optimización funcione correctamente.
Establezca el tiempo de espera en un máximo de 15 minutos (900 s) para lotes grandes a fin de evitar tiempos de espera anticipados
Agregue una política basada en recursos que permita
bedrock.amazonaws.com.rproxy.govskope.usinvocar su Lambda
Consejos sobre métricas Lambda
Escriba una cadena de documentación clara
compute_score: la cadena de documentación se extrae y se muestra al sistema como la descripción de la métrica. Explica qué significa la puntuación y qué diferencia a una puntuación alta de una baja.Escriba el código métrico con claridad: el sistema lee el código fuente completo. Los comentarios, los nombres de las variables y la lógica legible le ayudan a entender su intención y a generar mejores comentarios.
Prefiera las puntuaciones continuas a las binarias 0/1: el optimizador maximiza la puntuación media en todas las muestras. Las gradaciones continuas (por ejemplo, el crédito parcial) proporcionan una señal de seguimiento más uniforme que las puntuaciones de «todo o nada».
Devuelve detalles estructurados, no solo un número: al devolver un dictado con subpuntuaciones o campos de diagnóstico, el sistema tiene más información sobre por qué una predicción ha obtenido una puntuación baja, lo que se traduce en mejoras más específicas.
Devuelve mensajes descriptivos con puntuaciones alternativas: cuando devuelva una puntuación alternativa de 0,0, incluya un campo de diagnóstico en el diccionario de resultados (por ejemplo,).
{"score": 0.0, "error": "JSON parse failed on line 3"}El sistema lee estos mensajes para entender por qué una predicción obtuvo una puntuación baja y generar comentarios más específicos.Verifica tu puntuación: puntúa algunos resultados obviamente malos para confirmar que tu métrica los penaliza. Si una respuesta trivial obtiene una buena puntuación, el optimizador encontrará ese atajo.
Plantilla Lambda
""" APO Custom Metric Lambda - Minimal Template Handler: lambda_function.lambda_handler """ import logging from typing import List, Dict, Any logger = logging.getLogger() logger.setLevel(logging.INFO) def compute_score(preds: List[str], golds: List[str]) -> Dict[str, Any]: """ Score predictions against ground truths. Args: preds: Model outputs (one per sample) golds: Expected answers (one per sample) Returns: Must contain: "score": float - aggregate score (higher is better) "scores": list[float] - per-instance scores """ # --- REPLACE THIS with your scoring logic --- scores = [] for pred, gold in zip(preds, golds): # Example: exact match (case-insensitive) scores.append(1.0 if pred.strip().lower() == gold.strip().lower() else 0.0) return { "score": sum(scores) / len(scores) if scores else 0.0, "scores": scores, } def lambda_handler(event, context): """ Lambda entry point. APO service sends: event = {"preds": ["output1", ...], "golds": ["truth1", ...]} """ logger.info(f"Received {len(event.get('preds', []))} predictions") try: preds = event.get("preds", []) golds = event.get("golds", []) if not preds: return {"score": 0.0, "scores": []} return compute_score(preds, golds) except Exception as e: logger.error(f"Error: {e}", exc_info=True) return {"score": 0.0, "scores": [0.0] * len(event.get("preds", [])), "error": str(e)}
Consulte los AWS ejemplos GitHub para ver ejemplos más detallados, incluido el código repetitivo para el manejo de errores y la validación de entradas de funciones Lambda.