Simulera konversationer med Microsoft Foundry SDK (förhandsversion)

Important

Objekt markerade (förhandsversion) i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Generera simulerade konversationer från scenariobeskrivningar och utvärdera dem på konversationsnivå. Använd det här scenariot för att testa agentens beteende i kontrollerade situationer före distributionen. Tjänsten genererar realistiska konversationer baserat på dina scenariobeskrivningar och utvärderar dem sedan.

Förutsättningar

I exemplen används SDK-klienten som konfigurerats i Konfigurera SDK-klienten.

Förstå konversationssimulering

Den här metoden är användbar för:

  • Testning före distribution: Verifiera agentbeteendet i olika scenarier utan verklig användartrafik.
  • Täckning av gränsfall: Testscenarier som sällan uppstår naturligt men är viktiga att hantera väl.
  • Regressionstestning: Se till att agentuppdateringar inte försämrar prestanda i kända scenarier.
  • Skaltestning: Generera många konversationer snabbt för att belastningstesta agentens kapacitet.

Konversationssimulering följer dessa steg:

  1. Du anger en datauppsättning med scenariobeskrivningar – varje rad beskriver en situation som den simulerade användaren försöker utföra.
  2. Tjänsten använder en simulatormodell för att spela rollen som användare och interagerar med din agent baserat på scenariot.
  3. Varje scenario genererar en eller flera fullständiga konversationer.
  4. Utvärderare på konversationsnivå utvärderar de genererade konversationerna.
  5. Projektet lagrar både konversationer och utvärderingsresultat.

Förbereda scenariodata

Tips/Råd

I stället för att skapa scenarier för hand, generera dem med hjälp av uppgiftstypen Simulation seed (multi-turn). Den genererade datamängden innehåller det obligatoriska test_case_description fältet och kan även innehålla id, categoryoch desired_num_turns. Använd den genererade datamängdens ID som scenarios_id i simuleringskörningen och hoppa över uppladdningssteget. Se Generera en startdatauppsättning för simulering.

Skapa en JSONL-fil där varje rad beskriver ett scenario för den simulerade användaren. Varje rad måste innehålla test_case_description. Fälten id, categoryoch desired_num_turns är valfria. Inkludera information om användarens mål, kontext och begränsningar. Ett fullständigt exempel finns i utvärderingsexemplen conversation i 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}

Använd dessa parametrar för att konfigurera simuleringen:

Parameter Obligatoriskt Beskrivning
num_conversations No Antal konversationer som ska genereras per scenario. Standardvärdet är 5, med en serversidesgräns på 5.
max_turns No Maximalt antal svängar (utbyten) per konversation. Standardvärdet är 10, och maxgränsen på serversidan är 50.
model Yes Modelldriftsättning för användarsimulering. Till exempel gpt-4.1. Modellroutern stöds inte som simulatormodell. Det kan bara användas som utvärderingsmål.
sampling_params No Samplingsparametrar för simulatormodellen, inklusive temperature, top_poch max_completion_tokens.
data_mapping No Mappar fält från scenariots JSONL till simuleringsparametrar. Vanliga mappningar: test_case_description, id, desired_num_turns.

Definiera utvärderare

Välj utvärderare som är utformade för utvärdering på konversationsnivå. De simulerade konversationerna mappas automatiskt till utvärderarna.

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

Skapa utvärderingen och kör

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

Nästa steg