Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Definizione dei metodi di valutazione
Panoramica di
Scegliete UN metodo di valutazione per modello di prompt o omettete tutti i campi di valutazione opzionali come impostazione predefinita del sistema. Modelli diversi nello stesso job possono utilizzare metodi diversi. La valutazione guida l'ottimizzazione tempestiva, quindi definisci il metodo e i criteri nel modo più preciso possibile.
Suggerimenti sui set di dati
Mescola esempi semplici e concreti: abbina ciò che vedi nel mondo reale. All-easy i dati non spingeranno a migliorare; i dati complessi non lasciano nulla da cui imparare.
Coprite i casi che vi interessano: il sistema generalizza al di là di ciò che vede, ma una distribuzione rappresentativa dei dati lo aiuta a generalizzare meglio agli input del mondo reale.
Dopo una tempestiva ottimizzazione, esegui il test su dati che l'ottimizzatore non ha mai visto con un set di dati esaurito, per confermare che i vantaggi sono reali e non si limitano a memorizzarli.
Valutazione predefinita
Omettete tutti i campi di valutazione opzionali (steeringCriteria,customLLMJConfig,evaluationMetricLambdaArn). Il servizio utilizza un generico integrato LLM-as-judge basato su Anthropic Claude Sonnet 4.6 che valuta tre criteri predefiniti: precisione della risposta, completezza della risposta e qualità dell'espressione. In base al prompt, alla risposta del modello target e a una risposta di riferimento, il giudice assegna un punteggio a ciascuna dimensione. Quindi assegna dinamicamente i pesi appropriati all'attività e produce un punteggio complessivo ponderato.
Ti consigliamo di definire il tuo metodo di valutazione per ottenere i migliori risultati.
Prompt predefinito dell'arbitro fornito dal sistema
Di seguito è riportato il prompt completo fornito dal sistema e utilizzato nella valutazione predefinita di 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:
Criteri di guida
I criteri di orientamento sono brevi descrittori in linguaggio naturale che guidano la direzione dell'ottimizzazione.
Format:
"steeringCriteria": ["string1", "string2"]Cosa possono essere: qualsiasi cosa, da una singola parola a poche frasi con descrizioni qualitative o quantitative di come si desidera che sia la risposta del modello.
Limite: fino a 5 per modello di prompt.
Esempio:
"steeringCriteria": ["PROFESSIONAL", "CONCISE"]
Personalizzato LLM-as-a-judge
Fornisci una rubrica completa con una scala di valutazione da te definita. Il prompt personalizzato dell'arbitro viene unito al sistema judge prompt del servizio e viene attribuito un peso maggiore.
Configurazione
Formato: plus
"customLLMJConfig": {"customLLMJPrompt": "...", "customLLMJModelId": "..."}"customEvaluationMetricLabel": "My Metric"Modelli di giudici disponibili: anthropic.claude-opus-4-6-v1, anthropic.claude-sonnet-4-5-20250929-v 1:0, anthropic.claude-sonnet-4-6
I segnaposti nel tuo arbitro richiedono:
{{prompt}}: il prompt completamente renderizzato (modello di prompt più esempi di valutazione combinati){{response}}: l'output del modello{{referenceResponse}}: la verità fondamentale
Punteggio: definisci la tua scala di valutazione in modo che un numero più alto sia migliore. Il servizio normalizza tutti i punteggi per i risultati finali.
Se hai più rubriche, uniscile in un'unica richiesta del giudice.
Le migliori pratiche per scrivere le istruzioni dei giudici
Usa una rubrica chiaramente definita con criteri di punteggio espliciti ed esempi concreti di ogni livello di punteggio. Ancorate ogni livello di rubrica a descrizioni comportamentali anziché aggettivi soggettivi. Includi almeno un esempio funzionante che mostri un punteggio non perfetto per calibrare il giudice dall'impostazione predefinita ai punteggi alti. Chiedi al modello di fornire una giustificazione scritta prima del punteggio numerico. Valuta la possibilità di valutare dimensioni specifiche in modo indipendente prima di assegnare un punteggio complessivo. I LLM-as-a-judge valutatori più affidabili e disponibili sono in genere quelli in cui concordi con le risposte fornite dal modello arbitrale. Pertanto, può essere utile utilizzare una valutazione già esaminata.
In che modo il prompt del giudice personalizzato viene unito al prompt di sistema in fase di esecuzione
Quando fornite il prompt del LLM-as-a-judge valutatore, questo viene unito a un prompt generico fornito dal servizio. Il prompt contiene istruzioni specifiche sulla formattazione e altre best practice che favoriscono l'avanzamento dell'ottimizzazione. Nel giudizio finale viene attribuito un peso maggiore rispetto ai criteri generici al suggerimento di un giudice personalizzato. Nello specifico, il servizio:
Estrae l'intento dal prompt personalizzato
Normalizza la scala in modo che corrisponda alla rubrica da 0 a 3 del sistema
La inserisce come dimensione denominata all'interno dei tag CUSTOM_CRITERIA_DESCRIPTION
Modifica le istruzioni di ponderazione per attribuire al criterio personalizzato un'importanza elevata (da 0,3 a 0,6)
Aggiunge regole di precedenza in base alle quali i criteri personalizzati prevalgono sui conflitti con altre dimensioni
Conserva la semantica originale della valutazione
Esempio: puoi fornire il seguente LLM-as-a-judge prompt personalizzato per valutare la fedeltà:
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
Questo viene quindi unito al LLM-as-a-judge prompt predefinito e gli viene assegnato un forte peso. L'effetto finale: in una valutazione multidimensionale, il prompt di fedeltà a criterio singolo diventa un asse fortemente ponderato, mentre il sistema aggiunge una struttura (Precisione, Completezza, Espressione) attorno ad esso.
Di seguito è riportato il prompt risultante dalla fusione dei giudici:
"""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:"""
Valutatore Lambda personalizzato
Usa la tua funzione di punteggio come funzione Lambda.
Configurazione
Specificate l'ARN Lambda nel file JSONL di input per ogni modello di prompt che dovrebbe utilizzarlo. Fornisci anche il customEvaluationMetricLabel campo per assegnare un nome alla metrica:
"evaluationMetricLambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:my-eval-function", "customEvaluationMetricLabel": "My Custom Metric"
Quando crei il lavoro tramite l'API, non è necessaria alcuna configurazione di valutazione aggiuntiva nella CreateAdvancedPromptOptimizationJob richiesta stessa. Il metodo di valutazione è determinato per modello dal file JSONL di input.
Requisiti Lambda
Un unico
.pyfile con tutto il codiceHandler impostato su
lambda_function.lambda_handlerDeve implementare
compute_score(preds, golds)la restituzione{"score": float, "scores": [float, ...]}Il
goldsparametro contiene ireferenceResponsevalori. Se non l'hai fornitoreferenceResponsenel set di dati di input, non è necessario inseriregoldslacompute_scorefunzione.Non si blocca mai; restituisce 0,0 in caso di errori invece di generare eccezioni
Preferisci punteggi continui (da 0,0 a 1,0) rispetto a quelli binari 0/1 per una convergenza di ottimizzazione più rapida
Non è necessario che i punteggi siano limitati a [0, 1].
I punteggi devono seguire una scala «più alto è meglio». Questo è un requisito per il corretto funzionamento dell'ottimizzazione.
Imposta il timeout su un massimo di 15 minuti (900 s) per lotti di grandi dimensioni per evitare timeout anticipati
Aggiungi una politica basata sulle risorse che consente di richiamare la tua
bedrock.amazonaws.com.rproxy.govskope.usLambda
Suggerimenti metrici Lambda
Scrivi una docstring chiara su
compute_score: la docstring viene estratta e mostrata al sistema come descrizione della metrica. Spiega cosa significa il punteggio e cosa rende un punteggio alto rispetto a un punteggio basso.Scrivi il codice metrico in modo chiaro: il codice sorgente completo viene letto dal sistema. I commenti, i nomi delle variabili e la logica leggibile lo aiutano a comprendere le tue intenzioni e a generare un feedback migliore.
Preferisci i punteggi continui a quelli binari 0/1: l'ottimizzatore massimizza il punteggio medio tra i campioni. Le gradazioni continue (ad esempio, crediti parziali) forniscono un segnale più uniforme da seguire rispetto ai punteggi «tutto o niente».
Restituisci dettagli strutturati, non solo un numero: la restituzione di un dict con punteggi secondari o campi diagnostici fornisce al sistema più informazioni sul motivo per cui una previsione ha ottenuto un punteggio basso, portando a miglioramenti più mirati.
Restituisci messaggi descrittivi con punteggi di fallback: quando restituisci un punteggio di fallback di 0,0, includi un campo diagnostico nel dict dei risultati (ad esempio,).
{"score": 0.0, "error": "JSON parse failed on line 3"}Il sistema legge questi messaggi per capire perché una previsione ha ottenuto un punteggio basso e genera un feedback più mirato.Verifica il tuo punteggio: segna alcuni risultati palesemente negativi per confermare che la tua metrica li penalizza. Se una risposta banale ottiene un buon risultato, l'ottimizzatore troverà quella scorciatoia.
Modello 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)}
Consulta gli esempi GitHub per AWS esempi più dettagliati, tra cui il codice standard per la gestione degli errori e la convalida dell'input della funzione Lambda.