Simular conversaciones con el SDK de Microsoft Foundry (versión preliminar)

Importante

Los elementos marcados (versión preliminar) de este artículo se encuentran actualmente en versión preliminar pública. Esta versión preliminar se ofrece sin acuerdo de nivel de servicio y no se recomienda para las cargas de trabajo de producción. Es posible que algunas características no se admitan o que tengan funcionalidades restringidas. Para obtener más información, vea Términos de uso complementarios para las versiones preliminares de Microsoft Azure.

Genere conversaciones simuladas a partir de descripciones de escenarios y evalúelas en el nivel de conversación. Use este escenario para probar el comportamiento del agente en situaciones controladas antes de la implementación. El servicio genera conversaciones realistas en función de las descripciones del escenario y, a continuación, las evalúa.

Prerequisites

En los ejemplos se usa el cliente del SDK configurado en Configuración del cliente del SDK.

Comprender la simulación de conversación

Este enfoque es útil para:

  • Pruebas previas a la implementación: valide el comportamiento del agente en diversos escenarios sin tráfico de usuario real.
  • Cobertura de casos límite: escenarios de prueba que rara vez surgen de forma natural, pero que es importante gestionar correctamente.
  • Pruebas de regresión: asegúrese de que las actualizaciones del agente no degradan el rendimiento en escenarios conocidos.
  • Pruebas de escala: Generar muchas conversaciones rápidamente para poner a prueba al límite las capacidades del agente.

La simulación de conversación sigue estos pasos:

  1. Proporcione un conjunto de datos de descripciones de escenarios: cada fila describe una situación que el usuario simulado intenta realizar.
  2. El servicio usa un modelo de simulador para desempeñar el rol del usuario, interactuando con el agente en función del escenario.
  3. Cada escenario genera una o varias conversaciones completas.
  4. Los evaluadores de nivel de conversación evalúan las conversaciones generadas.
  5. El proyecto almacena las conversaciones y los resultados de evaluación.

Preparación de los datos del escenario

Tip

En lugar de crear escenarios manualmente, generelos mediante el tipo de tarea Inicialización de simulación (multiturno). El conjunto de datos generado contiene el campo necesario test_case_description y también puede contener id, categoryy desired_num_turns. Use el identificador del conjunto de datos generado como scenarios_id en la ejecución de simulación y omita el paso de carga. Consulte Generación de un conjunto de datos de inicialización de simulación.

Cree un archivo JSONL donde cada línea describe un escenario para el usuario simulado. Cada fila debe contener test_case_description. Los idcampos , categoryy desired_num_turns son opcionales. Incluya detalles sobre el objetivo, el contexto y las restricciones del usuario. Para obtener un ejemplo completo, consulte los ejemplos de evaluación de conversation en el 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}

Use estos parámetros para configurar la simulación:

Parámetro Obligatorio Descripción
num_conversations No Número de conversaciones que se van a generar por escenario. El valor predeterminado es 5, límite del lado servidor de 5.
max_turns No Número máximo de turnos (intercambios) por conversación. El valor predeterminado es 10, con un límite en el servidor de 50.
model Implementación del modelo que se va a usar para simular al usuario. Por ejemplo: gpt-4.1. El enrutador del modelo no se admite como el modelo del simulador; solo se puede usar como destino de evaluación.
sampling_params No Parámetros de muestreo para el modelo del simulador, incluidos temperature, top_py max_completion_tokens.
data_mapping No Asigna campos de tu JSONL del escenario a los parámetros de simulación. Correspondencias comunes: test_case_description, id, desired_num_turns.

Definir evaluadores

Seleccione evaluadores diseñados para la evaluación de nivel de conversación. Las conversaciones simuladas se asignan automáticamente a los evaluadores.

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}}"},
        ),
    ]

Creación y ejecución de la evaluación

Descargue 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"},
)

Pasos siguientes