Simulieren von Unterhaltungen mit dem Microsoft Foundry SDK (Vorschau)

Important

Die in diesem Artikel markierten Elemente (Vorschau) sind aktuell als öffentliche Vorschau verfügbar. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und sollte nicht für Produktionsworkloads verwendet werden. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbedingungen für Microsoft Azure-Vorschauversionen.

Generieren Sie simulierte Unterhaltungen aus Szenariobeschreibungen, und bewerten Sie sie auf Unterhaltungsebene. Verwenden Sie dieses Szenario, um das Verhalten Ihres Agents in kontrollierten Situationen vor der Bereitstellung zu testen. Der Dienst generiert realistische Unterhaltungen basierend auf Ihren Szenariobeschreibungen und wertet sie dann aus.

Voraussetzungen

In den Beispielen wird der in SDK-Client einrichten konfigurierte SDK-Client verwendet.

Gesprächssimulation verstehen

Dieser Ansatz ist nützlich für:

  • Tests vor der Bereitstellung: Überprüfen des Agentverhaltens in verschiedenen Szenarien ohne echten Benutzerdatenverkehr.
  • Abdeckung von Grenzfällen: Testszenarien, die in der Praxis nur selten auftreten, jedoch gut gehandhabt werden müssen.
  • Regressionstests: Stellen Sie sicher, dass Agentupdates die Leistung in bekannten Szenarien nicht beeinträchtigen.
  • Tests im großen Maßstab: Generieren Sie schnell viele Konversationen, um die Fähigkeiten des Agenten einem Belastungstest zu unterziehen.

Die Unterhaltungssimulation führt die folgenden Schritte aus:

  1. Sie stellen ein Dataset mit Szenariobeschreibungen bereit. Jede Zeile beschreibt eine Situation, die der simulierte Benutzer zu erreichen versucht.
  2. Der Dienst verwendet ein Simulatormodell, um die Rolle des Benutzers zu spielen und basierend auf dem Szenario mit Ihrem Agent zu interagieren.
  3. Jedes Szenario generiert eine oder mehrere vollständige Unterhaltungen.
  4. Bewerter auf der Ebene ganzer Konversationen bewerten die generierten Konversationen.
  5. Ihr Projekt speichert sowohl die Unterhaltungen als auch die Auswertungsergebnisse.

Vorbereiten von Szenariodaten

Tip

Statt Szenarien manuell zu erstellen, generieren Sie sie mithilfe des Simulations-Seed -Vorgangstyps (Multi-Turn). Der generierte Datensatz enthält das erforderliche test_case_description-Feld und kann auch id, category und desired_num_turns enthalten. Verwenden Sie die ID des generierten Datasets wie scenarios_id im Simulationslauf, und überspringen Sie den Uploadschritt. Siehe Ein Seed-Dataset für eine Simulation generieren.

Erstellen Sie eine JSONL-Datei, in der jede Zeile ein Szenario für den simulierten Benutzer beschreibt. Jede Zeile muss enthalten test_case_description. Die Felder id, desired_num_turns und category sind optional. Fügen Sie Details zu Ziel, Kontext und Einschränkungen des Benutzers hinzu. Ein vollständiges Beispiel finden Sie in den Beispielen zur konversationsauswertung im 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}

Verwenden Sie diese Parameter, um die Simulation zu konfigurieren:

Parameter Erforderlich Beschreibung
num_conversations No Anzahl der Unterhaltungen, die pro Szenario generiert werden sollen. Standardmäßig 5, serverseitige Obergrenze von 5.
max_turns No Maximale Anzahl von Wendungen (Austausch) pro Unterhaltung. Standardmäßig 10, serverseitige Obergrenze 50.
model Ja Modellbereitstellung zur Simulation des Benutzers. Beispiel: gpt-4.1 Der Modellrouter wird nicht als Simulatormodell unterstützt. sie kann nur als Auswertungsziel verwendet werden.
sampling_params No Samplingparameter für das Simulatormodell, einschließlich temperature, top_pund max_completion_tokens.
data_mapping No Ordnet Felder aus Ihrem Szenario JSONL zu Simulationsparametern zu. Allgemeine Zuordnungen: test_case_description, id, desired_num_turns.

Bewerter definieren

Wählen Sie Evaluatoren aus, die für Bewertungen auf Konversationsebene entwickelt wurden. Die simulierten Unterhaltungen werden automatisch den Bewertern zugeordnet.

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

Erstellen der Auswertung und Ausführung

Laden Sie sample_data_simulation_scenarios.jsonl herunter.

# 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ächste Schritte