Gesprekken simuleren met de Microsoft Foundry SDK (preview)

Important

Items die in dit artikel zijn gemarkeerd (preview) zijn momenteel beschikbaar als openbare preview. Deze preview wordt aangeboden zonder een service level agreement en we raden deze niet aan voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.

Genereer gesimuleerde gesprekken op basis van scenariobeschrijvingen en evalueer deze op gespreksniveau. Gebruik dit scenario om het gedrag van uw agent te testen in gecontroleerde situaties vóór de implementatie. De service genereert realistische gesprekken op basis van uw scenariobeschrijvingen en evalueert deze vervolgens.

Prerequisites

In de voorbeelden wordt de SDK-client gebruikt die is geconfigureerd in de SDK-client instellen.

Informatie over gesprekssimulatie

Deze methode is handig voor:

  • Testen vóór de implementatie: Valideer het gedrag van agents in diverse scenario's zonder echt gebruikersverkeer.
  • Dekking van randgevallen: Testscenario's die zich in de praktijk zelden voordoen, maar die wel goed moeten worden afgehandeld.
  • Regressietests: Zorg ervoor dat agentupdates de prestaties van bekende scenario's niet verminderen.
  • Testen op schaal: Genereer snel veel gesprekken om de mogelijkheden van de agent op de proef te stellen.

Gesprekssimulatie volgt deze stappen:

  1. U geeft een gegevensset met scenariobeschrijvingen op. Elke rij beschrijft een situatie waarin de gesimuleerde gebruiker probeert te bereiken.
  2. De service maakt gebruik van een simulatormodel om de rol van de gebruiker te spelen, waarbij interactie met uw agent wordt uitgevoerd op basis van het scenario.
  3. Elk scenario genereert een of meer volledige gesprekken.
  4. Evaluators op gespreksniveau beoordelen de gegenereerde gesprekken.
  5. In uw project worden zowel de gesprekken als de evaluatieresultaten opgeslagen.

Scenariogegevens voorbereiden

Tip

In plaats van scenario's handmatig te ontwerpen, genereer ze met het taaktype simulatiezaad (multi-turn). De gegenereerde gegevensset bevat het vereiste test_case_description veld en kan ook id, categoryen desired_num_turns. Gebruik de id van de gegenereerde gegevensset zoals scenarios_id in de simulatieuitvoering en sla de uploadstap over. Zie Een seedgegevensset voor simulatie genereren.

Maak een JSONL-bestand waarin elke regel een scenario beschrijft voor de gesimuleerde gebruiker. Elke rij moet bevatten test_case_description. De idvelden , categoryen desired_num_turns velden zijn optioneel. Voeg details toe over het doel, de context en de beperkingen van de gebruiker. Zie de conversation evaluation samples in de SDK voor een volledig voorbeeld.

{"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}

Gebruik deze parameters om de simulatie te configureren:

Parameter Required Beschrijving
num_conversations No Aantal gesprekken dat per scenario moet worden gegenereerd. De standaardwaarde is 5, een limiet aan de serverzijde van 5.
max_turns No Maximum aantal beurten (uitwisselingen) per gesprek. De standaardwaarde is 10, met een serverzijdige limiet van 50.
model Ja Modelimplementatie die moet worden gebruikt voor het simuleren van de gebruiker. Bijvoorbeeld: gpt-4.1. De modelrouter wordt niet ondersteund als het simulatormodel; het kan alleen worden gebruikt als evaluatiedoel.
sampling_params No Samplingparameters voor het simulatormodel, waaronder temperature, top_pen max_completion_tokens.
data_mapping No Hiermee worden velden van uw scenario-JSONL toegewezen aan simulatieparameters. Veelvoorkomende toewijzingen: test_case_description, id, desired_num_turns.

Evaluatoren definiëren

Selecteer evaluators die zijn ontworpen voor evaluatie op gespreksniveau. De gesimuleerde gesprekken worden automatisch gekoppeld aan de beoordelaars.

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

De evaluatie maken en uitvoeren

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

Volgende stappen