Simuler des conversations avec le SDK Microsoft Foundry (préversion)

Important

Les éléments indiqués comme (aperçu) dans cet article sont en aperçu public. Cette version préliminaire est fournie sans contrat de niveau de service, et nous la déconseillons pour les charges de travail en production. Certaines fonctionnalités peuvent ne pas être prises en charge ou avoir des fonctionnalités contraintes. Pour plus d’informations, consultez Conditions d'utilisation supplémentaires pour les versions préliminaires de Microsoft Azure.

Générez des conversations simulées à partir de descriptions de scénarios et évaluez-les au niveau de la conversation. Utilisez ce scénario pour tester le comportement de votre agent dans des situations contrôlées avant le déploiement. Le service génère des conversations réalistes en fonction de vos descriptions de scénarios, puis les évalue.

Prerequisites

Les exemples utilisent le client sdk configuré dans Configurer le client sdk.

Comprendre la simulation de conversation

Cette approche est utile pour :

  • Test de prédéploiement : validez le comportement de l’agent dans différents scénarios sans trafic utilisateur réel.
  • Couverture des cas limites : scénarios de test qui surviennent rarement, mais qu'il est important de bien gérer.
  • Test de régression : assurez-vous que les mises à jour de l’agent ne dégradent pas les performances dans les scénarios connus.
  • Tests de montée en charge : générez rapidement de nombreuses conversations pour mettre à l’épreuve les capacités de l’agent.

La simulation de conversation suit les étapes suivantes :

  1. Vous fournissez un jeu de données de descriptions de scénarios : chaque ligne décrit une situation que l’utilisateur simulé tente d’accomplir.
  2. Le service utilise un modèle de simulateur pour jouer le rôle de l’utilisateur, en interagissant avec votre agent en fonction du scénario.
  3. Chaque scénario génère une ou plusieurs conversations complètes.
  4. Les évaluateurs au niveau de la conversation évaluent les conversations générées.
  5. Votre projet stocke les conversations et les résultats d’évaluation.

Préparer des données de scénario

Tip

Au lieu de créer manuellement des scénarios, générez-les à l’aide du type de tâche de départ de simulation (multitour). Le jeu de données généré contient le champ requis test_case_description et peut également contenir id, categoryet desired_num_turns. Utilisez l’ID du jeu de données généré comme scenarios_id dans l’exécution de la simulation et ignorez l’étape de chargement. Consultez Générer un jeu de données de départ de simulation.

Créez un fichier JSONL dans lequel chaque ligne décrit un scénario pour l’utilisateur simulé. Chaque ligne doit contenir test_case_description. Les idchamps et desired_num_turns les categorychamps sont facultatifs. Incluez des détails sur l’objectif, le contexte et les contraintes de l’utilisateur. Pour obtenir un exemple complet, consultez les exemples d’évaluation conversation dans le Kit de développement logiciel (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}

Utilisez ces paramètres pour configurer la simulation :

Paramètre Obligatoire Description
num_conversations Non Nombre de conversations à générer par scénario. La valeur par défaut est 5, limite côté serveur de 5.
max_turns Non Nombre maximal de tours (échanges) par conversation. La valeur par défaut est 10, limite côté serveur de 50.
model Oui Déploiement de modèle à utiliser pour simuler l’utilisateur. Par exemple : gpt-4.1. Le routeur de modèles n’est pas pris en charge comme modèle pour le simulateur ; il ne peut être utilisé que comme cible pour l’évaluation.
sampling_params Non Paramètres d’échantillonnage pour le modèle de simulateur, y compris temperature, top_pet max_completion_tokens.
data_mapping Non Mappe les champs de votre scénario JSONL aux paramètres de simulation. Mappages courants : test_case_description, id, desired_num_turns.

Définir des évaluateurs

Sélectionnez les évaluateurs conçus pour l’évaluation au niveau de la conversation. Les conversations simulées sont automatiquement associées aux évaluateurs.

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

Créer l’évaluation et exécuter

Téléchargez 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"},
)

Étapes suivantes