Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Führen Sie die Voraussetzungen für die Cloudbewertung und die Clienteinrichtung durch.
- Eine Modellbereitstellung zur Simulation von Benutzern.
- Ein Agentziel, das ausgewertet werden soll.
- Szenariodaten, die die zu simulierenden Interaktionen beschreiben.
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:
- Sie stellen Szenariobeschreibungen als JSONL-Daten oder stark typierte Inlinetestfälle bereit. Jeder Testfall beschreibt eine Situation, die der simulierte Benutzer zu erreichen versucht.
- Der Dienst verwendet ein Simulatormodell, um die Rolle des Benutzers zu spielen und basierend auf dem Szenario mit Ihrem Agent zu interagieren.
- Jedes Szenario generiert eine oder mehrere vollständige Unterhaltungen.
- Bewerter auf der Ebene ganzer Konversationen bewerten die generierten Konversationen.
- Ihr Projekt speichert die Auswertungsergebnisse. Sie können optional alle generierten Unterhaltungen als versionsbasiertes Foundry-Dataset speichern.
Die Ausführung verwendet die azure_ai_user_conversation_simulation Datenquelle. Legen Sie Einstellungen fest, die für jeden Testfall gelten.default_simulation_configuration Ein Testfall kann einzelne Konversationseinstellungen in simulation_configuration überschreiben; Einstellungen, die er nicht überschreibt, verwenden weiterhin die Standardwerte des Durchlaufs.
Vorbereiten von Szenariodaten
Tip
Statt Szenarien manuell zu erstellen, generieren Sie sie mithilfe des Aufgabentyps Simulations-Seed (Multi-Turn). Bevor Sie einen vorhandenen generierten Datensatz mit dieser API verwenden, normalisieren Sie id auf test_case_id und verschieben Sie desired_num_turns nach simulation_configuration. Siehe Ein Seed-Dataset für eine Simulation generieren.
Stellen Sie Testfälle mithilfe eines der folgenden Quelltypen bereit:
-
file_idoderfile_contentfür JSONL-Szenarien. -
inline_user_conversation_simulationfür stark typisierte Testfälle in der Anforderung zum Ausführen. Schließen Sie mindestens einen Testfall ein.
Verwenden Sie für JSONL die kanonischen Eigenschaftennamen, die im folgenden Beispiel gezeigt werden. Schließen Sie das Ziel, den Kontext und die Verhaltenseinschränkungen des Benutzers in test_case_descriptionein. Die Beschreibung kann 1 bis 2.500 Zeichen enthalten.
{"test_case_id":"contoso_refund_timeline","test_case_description":"Customer returned an item five days ago and wants to know when the refund will arrive.","simulation_configuration":{"desired_num_turns":10}}
{"test_case_id":"contoso_store_hours_lookup","test_case_description":"Customer wants today's closing time and might need to clarify the store location.","simulation_configuration":{"desired_num_turns":3,"conversation_repetitions":2}}
Wenn die JSONL-Daten diese kanonischen Namen verwenden, lassen Sie data_mapping weg. Wenn sie unterschiedliche Namen verwendet, ordnen Sie diese Attribute zu test_case_id, test_case_descriptionund simulation_configuration. Verwenden Sie nicht data_mapping mit einer inline_user_conversation_simulation Quelle.
Jeder Inline- oder JSONL-Testfall unterstützt die folgenden Eigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
test_case_id |
Optionaler Bezeichner. Der Dienst generiert einen Bezeichner, wenn Sie ihn weglassen. |
test_case_description |
Szenario, Benutzerziel und Verhaltenseinschränkungen, die die simulierte Unterhaltung leiten. |
simulation_configuration |
Optionale Einstellungen, die die entsprechenden Ausführungsstandards für diesen Testfall außer Kraft setzen. |
Konfigurieren des simulierten Benutzers
Verwenden Sie das model_configuration Objekt, um das Modell zu konfigurieren, das den simulierten Benutzer wiedergibt. Dieses Modell unterscheidet sich vom target zu bewertenden Modell oder Agent.
| Eigenschaft | Erforderlich | Beschreibung |
|---|---|---|
model |
Ja | Bereitstellung des Simulators im {connectionName}/{modelDeploymentName}-Format. Der Modellrouter wird nicht als Simulatormodell unterstützt. es kann nur ein Auswertungsziel sein. |
sampling_params |
No | Sampling-Parameter, die angewendet werden, wenn der Simulator Benutzerdurchgänge generiert. |
voice_model |
No | Konvertiert simulierten Benutzertext mithilfe des Voice-Live-Endpunkts in gesprochene Sprache. Lassen Sie diese Eigenschaft für die Nur-Text-Simulation aus. |
Für die Sprachsimulation muss voice_model.typeazure-standard sein. Festlegen name auf einen Azure standardmäßigen neuralen Sprachnamen. Sie können auch temperature auf einen Wert von 0 bis 1 festlegen; wenn kein Wert angegeben wird, wird der Standardwert des zugrunde liegenden Sprachmodells verwendet.
Konfigurieren von Unterhaltungen
Legen Sie Werte für die gesamte Ausführung in default_simulation_configuration fest. Die Konversationssteuerungen max_num_turns, conversation_repetitions, desired_num_turns, audio_effects und user_behavior können auch im simulation_configuration eines Testfalls enthalten sein, um die entsprechenden Standardwerte für die Ausführung zu überschreiben. Die Eigenschaften zur Datensatzgenerierung enable_conversation_dataset_generation und default_simulation_configuration sind nur in output_conversation_dataset_name gültig und können nicht für jeden Testfall überschrieben werden.
| Eigenschaft | Geltungsbereich | Voreinstellung | Beschreibung |
|---|---|---|---|
max_num_turns |
Ausführungs- oder Testfall | 20 |
Feste Begrenzung der Durchgänge in jeder Unterhaltung. Die Anzahl muss mindestens 1 sein. |
conversation_repetitions |
Ausführungs- oder Testfall | 1 |
Die Anzahl der unabhängigen Unterhaltungen, die für jeden Testfall generiert wurden. Die Anzahl muss mindestens 1 sein. |
desired_num_turns |
Ausführungs- oder Testfall | Nichts | Gewünschte Gesprächslänge. Es kann die effektive max_num_turns nicht überschreiten. Wenn sie weggelassen wird, bestimmt der Simulator die Länge aus dem Szenario. |
audio_effects |
Ausführungs- oder Testfall | Nichts | Effekte, die auf die Sprachsimulation angewendet werden. Wird für die Nur-Text-Simulation ignoriert. |
user_behavior |
Ausführungs- oder Testfall | Nichts | Simuliertes Benutzerverhalten, z. B. Unterbrechungen. |
enable_conversation_dataset_generation |
Run only (Nur ausführen) | false |
Speichert alle generierten Unterhaltungen in einem versionierten Foundry-Dataset. |
output_conversation_dataset_name |
Run only (Nur ausführen) | Vom Dienst generiert | Name des Datensatzes, der verwendet wird, wenn die Generierung von Konversationsdatensätzen aktiviert ist. |
Konfigurieren von Sprachbedingungen und Unterbrechungen
Platzieren audio_effects und user_behavior innen default_simulation_configuration , um sie auf jeden Testfall anzuwenden. Wenn Sie eine der beiden Einstellungen für einen Testfall außer Kraft setzen möchten, platzieren Sie sie stattdessen in diesem Testfall simulation_configuration .
Verwenden Sie audio_effects, um zu testen, wie sich das Prüfobjekt unter realistischen Hörbedingungen verhält. Fügen Sie einen oder mehrere Effekte hinzu: street_traffic, , crowd_chatter, background_tv, , metro_stationoder telephonic_voice. Legen Sie volume_percentage zwischen 1 und 100 fest, um ihr kombiniertes Volumen zu steuern. Der Standardwert lautet 15. Audioeffekte werden in reinen Textsimulationen ignoriert.
Verwenden Sie user_behavior.interruption, um zu testen, wie das Zielsystem damit umgeht, dass ein Benutzer spricht, während das Zielsystem antwortet. Setzen Sie type auf default, um simulierte Unterbrechungen zu aktivieren. Lassen Sie aus interruption , wenn Unterbrechungen nicht Teil des Tests sind.
{
"default_simulation_configuration": {
"audio_effects": {
"effects": ["street_traffic", "telephonic_voice"],
"volume_percentage": 20
},
"user_behavior": {
"interruption": {
"type": "default"
}
}
}
}
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"]
simulator_model = os.environ["AZURE_AI_SIMULATOR_MODEL"]
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"},
"tool_definitions": {"type": "array"},
},
"required": ["messages"],
},
include_sample_schema=False,
)
testing_criteria = [
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="output_quality",
evaluator_name="builtin.output_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="tool_use_quality",
evaluator_name="builtin.tool_use_quality",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="deflection_rate",
evaluator_name="builtin.deflection_rate",
initialization_parameters={"model": model_deployment_name},
data_mapping={
"messages": "{{item.messages}}",
"tool_definitions": "{{item.tool_definitions}}",
},
),
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}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="coherence",
evaluator_name="builtin.coherence",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
TestingCriterionAzureAIEvaluator(
type="azure_ai_evaluator",
name="groundedness",
evaluator_name="builtin.groundedness",
initialization_parameters={"model": model_deployment_name},
data_mapping={"messages": "{{item.messages}}"},
),
]
Erstellen der Auswertung und Ausführung
Speichern Sie die kanonischen JSONL-Zeilen aus "Szenariodaten vorbereiten " als 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="./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. AZURE_AI_SIMULATOR_MODEL uses the format
# {connectionName}/{modelDeploymentName}.
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="conversation-simulation-run",
data_source={
"type": "azure_ai_user_conversation_simulation",
"source": {
"type": "file_id",
"id": scenarios_id,
},
"target": {
"type": "azure_ai_agent",
"name": agent.name,
"version": agent.version,
},
"model_configuration": {
"model": simulator_model,
"sampling_params": {
"temperature": 0.7,
"top_p": 1.0,
"max_completion_tokens": 800,
},
},
"default_simulation_configuration": {
"max_num_turns": 8,
"conversation_repetitions": 2,
"desired_num_turns": 5,
"enable_conversation_dataset_generation": True,
"output_conversation_dataset_name": "support-simulations",
},
},
extra_body={"evaluation_level": "conversation"},
)
Inline-Testfälle verwenden
Wenn Sie Szenarien direkt in der Ausführungsanforderung definieren möchten, legen Sie diese auf eine inline_user_conversation_simulation Quelle festdata_source.source. Inline-Quellen erfordern mindestens einen Testfall und verwenden data_mapping nicht.
inline_source = {
"type": "inline_user_conversation_simulation",
"test_cases": [
{
"test_case_id": "refund-delay",
"test_case_description": "A frustrated customer wants an update on a delayed refund.",
"simulation_configuration": {
"desired_num_turns": 6,
},
}
],
}
# In the run request:
# data_source={..., "source": inline_source}
Generierte Unterhaltungen abrufen
Rufen Sie die Ausführung ab, bis sie einen Terminalstatus erreicht, wie unter "Cloudauswertungsergebnisse abrufen" beschrieben. Wenn enable_conversation_dataset_generation auf true gesetzt ist, enthält ein abgeschlossener Durchlauf einen output_datasets-Eintrag wie diesen hier:
{
"type": "simulated_user_conversations",
"dataset": {
"id": "dataset_123",
"name": "support-simulations",
"version": "1"
}
}
Verwenden Sie den zurückgegebenen Datensatz id, name und version, um die generierten Konversationen abzurufen oder wiederzuverwenden. Wenn die Generierung von Datensätzen deaktiviert ist, wird output_datasets ausgelassen.
Nächste Schritte
- Um den Abschlussstatus abzufragen und die Ergebnisse zu interpretieren, siehe Cloudauswertungsergebnisse abrufen.
- Ein vollständiges, ausführbares Beispiel finden Sie auf GitHub unter sample_multiturn_conversation_simulation.py.
- Informationen zum Auswerten gespeicherter Unterhaltungen finden Sie unter "Auswerten von Unterhaltungsdatensätzen".
- Informationen zum Bewerten von Produktionsablaufverfolgungen finden Sie unter Unterhaltungen mit bereitgestellten Modellen und Agents bewerten.