Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Important
Elementy oznaczone jako (wersja zapoznawcza) w tym artykule są aktualnie dostępne w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą nie być obsługiwane lub mogą mieć ograniczone możliwości. Aby uzyskać więcej informacji, zobacz Warunki dodatkowe korzystania z testowych wersji Microsoft Azure.
Generowanie symulowanych konwersacji na podstawie opisów scenariuszy i ocenianie ich na poziomie konwersacji. Użyj tego scenariusza, aby przetestować zachowanie agenta w kontrolowanych sytuacjach przed wdrożeniem. Usługa generuje realistyczne konwersacje na podstawie opisów scenariuszy, a następnie je ocenia.
Wymagania wstępne
- Ukończ wymagania wstępne dotyczące oceny chmury i konfigurację klienta.
- Wdrożenie modelu w celu symulowania użytkowników.
- Obiekt docelowy agenta do oceny.
- Dane scenariusza opisujące interakcje do symulowania.
W przykładach użyto klienta zestawu SDK skonfigurowanego w temacie Konfigurowanie klienta zestawu SDK.
Omówienie symulacji konwersacji
Takie podejście jest przydatne w następujących celach:
- Testowanie przed wdrożeniem: zweryfikuj zachowanie agenta w różnych scenariuszach bez rzeczywistego ruchu użytkowników.
- Uwzględnienie przypadków brzegowych: scenariusze testowe, które rzadko zdarzają się w praktyce, ale ważne jest, aby były prawidłowo obsługiwane.
- Testowanie regresji: Upewnij się, że aktualizacje agenta nie obniżają wydajności w znanych scenariuszach.
- Testowanie skalowalności: Szybko generuj wiele rozmów, aby przetestować możliwości agenta pod obciążeniem.
Symulacja konwersacji jest zgodna z następującymi krokami:
- Podajesz opisy scenariuszy jako dane JSONL lub ściśle typowane przypadki testowe osadzone bezpośrednio w kodzie. Każdy przypadek testowy opisuje sytuację, w której symulowany użytkownik próbuje osiągnąć określony cel.
- Usługa używa modelu symulatora do odgrywania roli użytkownika, interakcji z agentem w oparciu o scenariusz.
- Każdy scenariusz generuje co najmniej jedną pełną konwersację.
- Ewaluatorzy na poziomie konwersacji oceniają wygenerowane konwersacje.
- Projekt przechowuje wyniki oceny. Opcjonalnie możesz zapisywać wszystkie wygenerowane rozmowy jako wersjonowany zbiór danych Foundry.
Uruchomienie korzysta ze źródła danych azure_ai_user_conversation_simulation_preview. Umieść ustawienia, które mają zastosowanie do każdego przypadku testowego w pliku default_simulation_configuration. Przypadek testowy może nadpisać ustawienia poszczególnych rozmów w swoim elemencie simulation_configuration; ustawienia, których nie nadpisuje, nadal korzystają z domyślnych ustawień uruchomienia.
Przygotowywanie danych scenariusza
Napiwek
Zamiast tworzyć scenariusze ręcznie, generuj je za pomocą typu zadania Ziarno symulacji (wieloturowe). Przed użyciem istniejącego wygenerowanego zestawu danych z użyciem tego interfejsu API znormalizuj id do test_case_id i przenieś desired_num_turns do simulation_configuration. Zobacz Wygeneruj początkowy zestaw danych symulacji.
Podaj przypadki testowe przy użyciu jednego z następujących typów źródeł:
-
file_idlubfile_contentw przypadku scenariuszy JSONL. -
inline_user_conversation_simulationdla ściśle typowanych przypadków testowych w żądaniu uruchomienia. Uwzględnij co najmniej jeden przypadek testowy.
W przypadku formatu JSONL użyj nazw właściwości kanonicznych pokazanych w poniższym przykładzie. Uwzględnij ograniczenia dotyczące celu, kontekstu i zachowania użytkownika w programie test_case_description. Opis może zawierać od 1 do 2500 znaków.
{"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}}
Gdy dane JSONL używają tych nazw kanonicznych, pomiń element data_mapping. Jeśli używa różnych nazw, zamapuj te atrybuty na test_case_id, test_case_descriptioni simulation_configuration. Nie używaj data_mapping z inline_user_conversation_simulation źródłem.
Każdy wbudowany przypadek testowy lub przypadek testowy w formacie JSONL obsługuje następujące właściwości:
| Majątek | Opis |
|---|---|
test_case_id |
Opcjonalny identyfikator. Usługa generuje identyfikator, gdy go pominiesz. |
test_case_description |
Scenariusz, cel użytkownika i ograniczenia behawioralne prowadzące do symulowanej konwersacji. |
simulation_configuration |
Opcjonalne ustawienia, które zastępują odpowiadające im domyślne ustawienia uruchomienia dla tego przypadku testowego. |
Konfigurowanie symulowanego użytkownika
model_configuration Użyj obiektu , aby skonfigurować model, który odtwarza symulowanego użytkownika. Ten model jest oddzielony od ocenianego target modelu lub agenta.
| Majątek | Required | Opis |
|---|---|---|
model |
Yes | Wdrożenie symulatora w formacie {connectionName}/{modelDeploymentName}.
Router modeli nie jest obsługiwany w roli modelu symulatora; może być jedynie celem oceny. |
sampling_params |
No | Parametry próbkowania stosowane podczas generowania tur użytkownika przez symulator. |
voice_model |
No | Konwertuje symulowany tekst użytkownika na mowę za pośrednictwem punktu końcowego Voice Live. Pomiń tę właściwość dla symulacji tylko tekstu. |
W przypadku symulacji głosowej voice_model.type musi mieć wartość azure-standard. Ustaw name na standardową nazwę neuronowego głosu Azure. Można również ustawić temperature na wartość od 0 do 1; jeśli parametr zostanie pominięty, zastosowana zostanie wartość domyślna bazowego modelu głosu.
Konfigurowanie konwersacji
Ustaw wartości dla całego przebiegu w pliku default_simulation_configuration. Elementy sterujące konwersacją max_num_turns, conversation_repetitions, desired_num_turns, audio_effects i user_behavior mogą również pojawić się w elemencie simulation_configuration przypadku testowego, aby zastąpić odpowiednie domyślne ustawienia uruchomienia. Właściwości generowania zestawu danych enable_conversation_dataset_generation i output_conversation_dataset_name są prawidłowe tylko w default_simulation_configuration i nie można ich przesłonić w poszczególnych przypadkach testowych.
| Majątek | Scope | Wartość domyślna | Opis |
|---|---|---|---|
max_num_turns |
Uruchamianie lub przypadek testowy | 20 |
Sztywny limit liczby wypowiedzi w każdej konwersacji. Musi być co najmniej 1. |
conversation_repetitions |
Uruchomienie lub przypadek testowy | 1 |
Liczba niezależnych konwersacji generowanych dla każdego przypadku testowego. Musi być co najmniej 1. |
desired_num_turns |
Uruchomienie lub przypadek testowy | Żadne | Długość konwersacji docelowej. Nie może ono przekraczać obowiązującego max_num_turns. Jeśli zostanie pominięty, symulator określi długość na podstawie scenariusza. |
audio_effects |
Uruchomienie lub przypadek testowy | Żadne | Efekty stosowane do symulacji głosowej. Ignorowane w symulacji tekstowej. |
user_behavior |
Uruchomienie lub przypadek testowy | Żadne | Symulowane zachowanie użytkownika, takie jak przerwa. |
enable_conversation_dataset_generation |
Uruchom tylko | false |
Zapisuje wszystkie wygenerowane rozmowy do wersjonowanego zbioru danych Foundry. |
output_conversation_dataset_name |
Tylko uruchom | Wygenerowane przez usługę | Nazwa zestawu danych używana, gdy generowanie zestawu danych konwersacji jest włączone. |
Konfigurowanie warunków i przerw w działaniu głosu
Umieść audio_effects i user_behavior wewnątrz default_simulation_configuration , aby zastosować je do każdego przypadku testowego. Aby nadpisać dowolne z tych ustawień dla konkretnego przypadku testowego, umieść je zamiast tego wewnątrz znacznika simulation_configuration tego przypadku testowego.
Użyj audio_effects, aby sprawdzić, jak urządzenie docelowe działa w rzeczywistych warunkach odsłuchowych. Dodaj co najmniej jeden efekt: street_traffic, , background_tvcrowd_chatter, metro_stationlub telephonic_voice. Ustaw volume_percentage od 1 do 100, aby kontrolować ich łączny wolumin. Wartość domyślna to 15. Efekty dźwiękowe są ignorowane w symulacjach tylko tekstowych.
Użyj user_behavior.interruption, aby sprawdzić, jak obiekt docelowy radzi sobie z sytuacją, gdy użytkownik mówi, podczas gdy obiekt docelowy odpowiada. Ustaw element type na default, aby włączyć symulowane przerwania. Pomiń interruption , gdy przerwy nie są częścią testu.
{
"default_simulation_configuration": {
"audio_effects": {
"effects": ["street_traffic", "telephonic_voice"],
"volume_percentage": 20
},
"user_behavior": {
"interruption": {
"type": "default"
}
}
}
}
Definiowanie ewaluatorów
Wybierz ewaluatory przeznaczone do oceny całych konwersacji. Symulowane rozmowy są automatycznie przypisywane do ewaluatorów.
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"},
},
"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}}"},
),
]
Utwórz ocenę i uruchom
Zapisz kanoniczne wiersze JSONL z sekcji Przygotowywanie danych scenariusza jako 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_preview",
"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"},
)
Używanie wbudowanych przypadków testowych
Aby zdefiniować scenariusze bezpośrednio w żądaniu uruchomienia, ustaw inline_user_conversation_simulation jako źródło data_source.source. Źródła wbudowane wymagają co najmniej jednego przypadku testowego i nie używają znacznika data_mapping.
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}
Pobieranie wygenerowanych konwersacji
Sonduj przebieg, dopóki nie osiągnie stanu terminalu zgodnie z opisem w temacie Uzyskiwanie wyników oceny chmury. Gdy parametr enable_conversation_dataset_generation ma wartość true, zakończone uruchomienie zawiera wpis output_datasets, taki jak ten:
{
"type": "simulated_user_conversations",
"dataset": {
"id": "dataset_123",
"name": "support-simulations",
"version": "1"
}
}
Użyj zwróconego zestawu danych id, namei version , aby pobrać lub ponownie użyć wygenerowanych konwersacji. Jeśli generowanie zestawu danych jest wyłączone, output_datasets zostanie pominięte.
Następne kroki
- Aby sprawdzać stan ukończenia i interpretować wyniki, zobacz Pobieranie wyników oceny w chmurze.
- Aby zobaczyć kompletny przykład gotowy do uruchomienia, zobacz plik sample_multiturn_conversation_simulation.py w serwisie GitHub.
- Aby ocenić przechowywane konwersacje, zobacz Ocena zestawów danych konwersacji.
- Aby ocenić ślady z środowiska produkcyjnego, zobacz Ocenianie wdrożonego modelu i konwersacji agenta.