Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Agent Optimizer è attualmente in anteprima limitata ed è disponibile solo tramite un processo di iscrizione. Per accedere al servizio, completare il modulo di assunzione. Questa anteprima viene fornita senza un contratto di servizio e non è consigliabile per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per ulteriori informazioni, vedere Condizioni supplementari per l'uso delle versioni di anteprima di Microsoft Azure.
L'ottimizzatore dell'agente valuta il tuo agente rispetto a un dataset, ovvero una raccolta di attività con criteri di valutazione. È possibile generare automaticamente un set di dati dall'interfaccia della riga di comando o crearne uno manualmente per il controllo completo.
Prerequisiti
- Un progetto Foundry con un agente ospitato distribuito
- L'estensione CLI
azure.ai.agentsinstallata (vedere Guida introduttiva: Ottimizzare un agente ospitato)
Generare un set di dati (scelta consigliata)
Il modo più rapido per creare un set di dati di valutazione è con azd ai agent eval init. Questo comando genera un set di dati e analizzatori adattivi ottimizzati per il dominio dell'agente:
azd ai agent eval init
La procedura guidata interattiva rileva automaticamente l'agente da azure.yaml e richiede un'istruzione di generazione che descrive le operazioni dell'agente e gli scenari da testare.
Output di esempio:
Detecting agent...
Found: my-support-agent (hosted)
Generation prompt
Describe what this agent does and what scenarios to test.
> This agent handles customer support for electronics. Test returns, troubleshooting, and out-of-scope requests.
Generating dataset and evaluators...
Dataset generation: done (registered: my-support-agent-eval-seed/v1)
Evaluator generation: done (registered: my-support-agent-quality/v1)
Eval suite created
Config: eval.yaml
Dataset: .azure/.foundry/datasets/my-support-agent-eval-seed.v1.jsonl
Evaluator: .azure/.foundry/evaluators/my-support-agent-quality.v1.yaml
Review the generated assets, then run:
azd ai agent eval run
Modalità non interattiva
Per i flussi di lavoro con script, passare direttamente gli input:
azd ai agent eval init \
--gen-instruction "Customer support agent. Test refund handling, troubleshooting, and out-of-scope deflection." \
--eval-model gpt-4.1-mini \
--max-samples 50
Usa i tuoi dati con valutatori generati
Se si dispone già di un set di dati di riferimento ma si desiderano valutatori generati automaticamente:
azd ai agent eval init --dataset ./my-golden-dataset.jsonl
Eseguire l'ottimizzazione con la configurazione generata
Dopo il completamento di eval init, azd ai agent optimize rileva automaticamente eval.yaml generato:
azd ai agent optimize
Oppure passarlo in modo esplicito:
azd ai agent optimize --config eval.yaml
Per il flusso di lavoro completo di valutazione nella CLI, vedere Eseguire valutazioni degli agenti con la CLI di azd.
Creare manualmente un set di dati personalizzato (avanzato)
Per il controllo completo sulle attività e i criteri di valutazione, creare un set di dati JSONL a mano. Ciò è utile quando è necessario un controllo preciso sugli scenari di test o avere dati di produzione da usare direttamente.
Per impostazione predefinita, azd ai agent optimize usa un set di dati predefinito con 3 attività di codifica generali e 25 criteri. Per un'ottimizzazione significativa dell'agente specifico, creare un set di dati personalizzato che rifletta i casi d'uso reali dell'agente.
Formato del dataset
I set di dati usano il formato JSONL (json lines). Ogni riga è un oggetto JSON che rappresenta una singola attività di valutazione. Un'attività è un singolo scenario nel set di dati. Contiene un prompt e criteri di valutazione.
{"name": "task_1", "prompt": "Your prompt here", "criteria": [{"name": "criterion_name", "instruction": "What the evaluator checks for"}]}
{"name": "task_2", "prompt": "Another prompt", "criteria": [{"name": "check_1", "instruction": "..."}, {"name": "check_2", "instruction": "..."}]}
Informazioni di riferimento sul campo
| Campo | Obbligatorio | Descrizione |
|---|---|---|
name |
Sì | Identificatore univoco dell'attività (ad esempio, "greeting", "math_test") |
prompt |
Sì | Messaggio inviato all'agente |
criteria |
Sì | Matrice di criteri di valutazione: regole che definiscono l'aspetto "buono" per l'attività |
criteria[].name |
Sì | Nome breve per il criterio (ad esempio, "is_polite") |
criteria[].instruction |
Sì | Che cosa controlla l'analizzatore . Essere specifici e testabili. L'analizzatore predefinito (builtin.task_adherence) assegna punteggi a ogni criterio in modo indipendente come valore binario (0 o 1). |
groundTruth |
No | Risposta prevista (usata da alcuni analizzatori per riferimento) |
Esempio: Agente di supporto clienti
{"name": "refund_policy", "prompt": "What is your refund policy?", "criteria": [{"name": "mentions_30_days", "instruction": "Response must mention the 30-day refund window"}, {"name": "polite_tone", "instruction": "Response must be professional and empathetic"}]}
{"name": "order_status", "prompt": "Where is my order #12345?", "criteria": [{"name": "asks_for_details", "instruction": "Agent should ask for email or order details to look up the order"}, {"name": "no_hallucination", "instruction": "Agent must NOT make up a fake order status"}]}
{"name": "out_of_scope", "prompt": "Can you help me fix my car?", "criteria": [{"name": "polite_decline", "instruction": "Agent should politely explain this is outside its scope"}, {"name": "redirect", "instruction": "Agent should suggest contacting an appropriate service"}]}
Esempio: Assistente per la scrittura del codice
{"name": "python_function", "prompt": "Write a Python function to reverse a linked list", "criteria": [{"name": "correct_algorithm", "instruction": "The function must correctly reverse a singly linked list"}, {"name": "handles_empty", "instruction": "The function must handle an empty list without errors"}, {"name": "includes_docstring", "instruction": "The function should include a descriptive docstring"}]}
{"name": "explain_concept", "prompt": "Explain what a closure is in JavaScript", "criteria": [{"name": "accurate_definition", "instruction": "Must correctly define a closure as a function that captures variables from its enclosing scope"}, {"name": "includes_example", "instruction": "Must include at least one working code example"}]}
Usare un set di dati personalizzato
Fare riferimento al set di dati in un file di configurazione YAML:
# eval.yaml
agent:
name: my-agent
dataset_file: ./my_eval_dataset.jsonl
evaluators:
- builtin.task_adherence
options:
eval_model: gpt-4.1-mini
optimization_model: gpt-5.1
max_iterations: 10
Poi eseguire:
azd ai agent optimize --config eval.yaml
Prima di eseguire il comando, convalidare la sintassi JSONL:
python -c "import json; [json.loads(l) for l in open('my_eval_dataset.jsonl')]"
Suggerimenti per la scrittura di set di dati validi
Essere specifici nei criteri
Scadente:
{"name": "good_answer", "instruction": "The response should be good"}
Buono:
{"name": "mentions_30_days", "instruction": "Response must explicitly mention the 30-day refund window"}
I criteri specifici forniscono all'analizzatore un segnale binario chiaro e chiaro. I criteri vaghi comportano un punteggio incoerente.
Includi casi limite
Prova oltre il percorso felice. Includere:
- Richieste fuori ambito — input che il tuo agente dovrebbe rifiutare o reindirizzare
- Query ambigue : attività in cui l'agente deve richiedere chiarimenti
- Input avversari — Tentativi di indurre l'agente a comportarsi in modo scorretto
- Attività in più passaggi : richieste complesse che richiedono un ragionamento strutturato
Linee guida per le dimensioni
| Dimensioni del set di dati | Compromesso |
|---|---|
| 3-5 attività | Iterazione rapida, segnale limitato |
| 5-10 attività | Buon equilibrio tra velocità e copertura |
| 10-20 attività | Valutazione completa, esecuzioni di maggiore durata |
| 20+ attività | Accurato ma lento: prendere in considerazione la convalida finale |
Ogni attività può avere più criteri. Un set di dati con 5 attività × 4 criteri ogni = 20 segnali di valutazione.
Scrivere richieste come utenti reali
Se possibile, usare i messaggi effettivi degli utenti. I prompt reali racchiudono il vocabolario e il contesto che il tuo agente affronta in produzione.
I criteri vengono valutati indipendentemente
Ogni criterio ottiene un punteggio binario (0 o 1). Il punteggio dell'attività è la media dei punteggi dei criteri. Il punteggio complessivo è la media di tutte le attività. Ciò significa:
- Un'attività con 4 criteri in cui 3 corrispondono a un punteggio di superamento di 0,75
- Un agente che supera tutti i criteri su 2 di 3 attività assegna 0,67
La verità di riferimento è facoltativa
Il groundTruth campo fornisce una risposta di riferimento per gli analizzatori che lo supportano. Questo campo non è obbligatorio. Il valutatore builtin.task_adherence opera esclusivamente sulla base delle istruzioni dei criteri.
{"name": "geography_fact", "prompt": "What is the largest city in France by population?", "groundTruth": "Paris", "criteria": [{"name": "correct_answer", "instruction": "Response must state that Paris is the largest city in France by population"}]}
Risoluzione dei problemi
| Problema | Motivo | Correzione |
|---|---|---|
dataset_file not found |
Percorso errato in eval.yaml |
Usare un percorso relativo al percorso del file di configurazione |
invalid JSON on line N |
JSONL non valido | Verificare che ogni riga sia json valido. Verificare la presenza di virgole finali. |
| I punteggi sono incoerenti tra le esecuzioni | Criteri vaghi | Rendere specifici e verificabili in modo binario i criteri |