Simulare conversazioni con Microsoft Foundry SDK (anteprima)

Importante

Gli elementi contrassegnati (anteprima) in questo articolo sono attualmente in anteprima pubblica. 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.

Generare conversazioni simulate dalle descrizioni degli scenari e valutarle a livello di conversazione. Usare questo scenario per testare il comportamento dell'agente in situazioni controllate prima della distribuzione. Il servizio genera conversazioni realistiche in base alle descrizioni degli scenari e quindi le valuta.

Prerequisiti

Gli esempi usano il client SDK configurato in Configurare il client SDK.

Informazioni sulla simulazione della conversazione

Questo approccio è utile per:

  • Test di pre-distribuzione: convalidare il comportamento dell'agente in diversi scenari senza traffico utente reale.
  • Copertura dei casi limite: scenari di test che si verificano raramente, ma che è importante gestire correttamente.
  • Test di regressione: assicurarsi che gli aggiornamenti dell'agente non degradino le prestazioni in scenari noti.
  • Test di scalabilità: generare molte conversazioni rapidamente per le funzionalità dell'agente di test di stress.

La simulazione di conversazioni segue questa procedura:

  1. Viene fornito un set di dati di descrizioni degli scenari: ogni riga descrive una situazione che l'utente simulato tenta di eseguire.
  2. Il servizio usa un modello di simulatore per svolgere il ruolo dell'utente, interagendo con l'agente in base allo scenario.
  3. Ogni scenario genera una o più conversazioni complete.
  4. I valutatori a livello di conversazione valutano le conversazioni generate.
  5. Il progetto archivia sia le conversazioni che i risultati della valutazione.

Preparare i dati dello scenario

Suggerimento

Anziché creare gli scenari manualmente, generarli utilizzando il tipo di attività Seme di simulazione (multi-turn)។ Il set di dati generato contiene il campo obbligatorio test_case_description e può contenere idanche , categorye desired_num_turns. Usare l'ID del set di dati generato come scenarios_id nell'esecuzione della simulazione e ignorare il passaggio di caricamento. Vedere Generare un set di dati di inizializzazione della simulazione.

Creare un file JSONL in cui ogni riga descrive uno scenario per l'utente simulato. Ogni riga deve contenere test_case_description. I idcampi , categorye desired_num_turns sono facoltativi. Includere informazioni dettagliate sull'obiettivo, il contesto e i vincoli dell'utente. Per un esempio completo, consulta gli esempi di valutazione delle conversazioni nell’SDK.

{"id": "contoso_refund_timeline", "test_case_description": "Customer returned an item to Contoso Electronics 5 days ago and hasn't received their refund yet. They want to know how long Contoso refunds take.", "desired_num_turns": 10}
{"id": "contoso_store_hours_lookup", "test_case_description": "Customer wants to know what time the Contoso Electronics store closes today. Simple single-fact question with possibly one clarifying turn about which location.", "desired_num_turns": 3}

Usare questi parametri per configurare la simulazione:

Parametro Obbligatorio Descrizione
num_conversations No Numero di conversazioni da generare per scenario. Il valore predefinito è 5, limite lato server pari a 5.
max_turns No Numero massimo di turni (scambi) per conversazione. Il valore predefinito è 10, limite lato server pari a 50.
model Yes Distribuzione del modello da usare per simulare l'utente. Ad esempio: gpt-4.1. Il router del modello non è supportato come modello di simulatore; può essere usato solo come destinazione di valutazione.
sampling_params No Parametri di campionamento per il modello di simulatore, tra cui temperature, top_pe max_completion_tokens.
data_mapping No Esegue il mapping dei campi dallo scenario JSONL ai parametri di simulazione. Mappature comuni: test_case_description, id, desired_num_turns.

Definire gli analizzatori

Seleziona i valutatori progettati per valutare conversazioni. Le conversazioni simulate vengono automaticamente associate ai valutatori.

import os
from openai.types.eval_create_params import DataSourceConfigCustom
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator, PromptAgentDefinition

endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
agent_name = os.environ.get("FOUNDRY_AGENT_NAME", "")

with (
    DefaultAzureCredential() as credential,
    AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
    project_client.get_openai_client() as openai_client,
):
    # Simulation uses the same "custom" eval group type as dataset evaluation (S1),
    # since the generated conversations follow the same messages schema.
    data_source_config = DataSourceConfigCustom(
        type="custom",
        item_schema={
            "type": "object",
            "properties": {
                "messages": {"type": "array"},
            },
            "required": ["messages"],
        },
        include_sample_schema=False,
    )

    testing_criteria = [
        TestingCriterionAzureAIEvaluator(
            type="azure_ai_evaluator",
            name="customer_satisfaction",
            evaluator_name="builtin.customer_satisfaction",
            initialization_parameters={"model": model_deployment_name},
            data_mapping={"messages": "{{item.messages}}"},
        ),
        TestingCriterionAzureAIEvaluator(
            type="azure_ai_evaluator",
            name="task_completion",
            evaluator_name="builtin.task_completion",
            initialization_parameters={"model": model_deployment_name},
            data_mapping={"messages": "{{item.messages}}"},
        ),
    ]

Creare la valutazione ed eseguire

Scarica sample_data_simulation_scenarios.jsonl.

# Create (or update) an agent to simulate against
agent = project_client.agents.create_version(
    agent_name=agent_name,
    definition=PromptAgentDefinition(
        model=model_deployment_name,
        instructions="You are a helpful customer service agent. Be empathetic and solution-oriented.",
    ),
)

# Upload scenario data
scenarios_id = project_client.datasets.upload_file(
    name="simulation-scenarios",
    version="1",
    file_path="./sample_data_simulation_scenarios.jsonl",
).id

# Create the evaluation
eval_object = openai_client.evals.create(
    name="Multi-turn Conversation Simulation",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

# Create a simulation run
eval_run = openai_client.evals.runs.create(
    eval_id=eval_object.id,
    name="conversation-simulation-run",
    data_source={
        "type": "azure_ai_target_completions",
        "source": {
            "type": "file_id",
            "id": scenarios_id,
        },
        "target": {
            "type": "azure_ai_agent",
            "name": agent.name,
            "version": agent.version,
        },
        "item_generation_params": {
            "type": "conversation_gen_preview",
            "model": model_deployment_name,
            "num_conversations": 2,
            "max_turns": 5,
            "sampling_params": {
                "temperature": 0.7,
                "top_p": 1.0,
                "max_completion_tokens": 800,
            },
            "data_mapping": {
                "test_case_description": "test_case_description",
                "id": "id",
                "desired_num_turns": "desired_num_turns",
            },
        },
    },
    extra_body={"evaluation_level": "conversation"},
)

Passaggi successivi