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.
Oceniaj pełne rozmowy w zbiorach danych na poziomie tury lub całej rozmowy.
Wymagania wstępne
- Ukończ wymagania wstępne dotyczące oceny chmury i konfigurację klienta.
- Dane konwersacji z tablicą
messages. - Ewaluatory obsługujące wybrany poziom oceny, taki jak spójność i oparcie na źródłach.
W przykładach użyto klienta zestawu SDK skonfigurowanego w temacie Konfigurowanie klienta zestawu SDK.
Ocena zestawów danych konwersacji
Oceń pełne konwersacje, aby ocenić jakość agenta w obrębie całej interakcji użytkownika — nie tylko poszczególnych odpowiedzi. Ocena na poziomie całej konwersacji pozwala identyfikować problemy z jakością, takie jak niepełna realizacja zadań, frustracja użytkowników i regresje w wywołaniach narzędzi, których nie wychwytuje ocena na poziomie pojedynczych tur.
Rozważmy na przykład agenta wsparcia, podczas interakcji z którym użytkownik coraz bardziej się frustruje po kilku wymianach:
Turn 1 — Użytkownik: "Muszę zresetować moje hasło". Agent: "Znalazłem twoje konto. Wyślem link resetowania."
Turn 2 — Użytkownik: "Nie otrzymałem e-maila." Agent: "Wysłałem link ponownie." Sprawdź spam".
Turn 3 — Użytkownik: "Nadal nic. Czy można go zresetować bezpośrednio?" Agent: "Wysłałem inny link resetowania".
Ewaluator na poziomie pojedynczej tury ocenia tylko ostatnią odpowiedź — która jest uprzejma i podejmuje działanie — dlatego uzyskuje ona wysoką ocenę. Ewaluator oceniający całą rozmowę pod kątem satysfakcji klienta wskazuje, że agent trzykrotnie powtórzył to samo nieskuteczne działanie, nie próbując zastosować alternatywnego rozwiązania, przez co problem użytkownika pozostał nierozwiązany.
Ocena na poziomie całej konwersacji różni się od oceny na poziomie pojedynczej tury na kilka sposobów:
| Aspect | Na poziomie tury | Poziom konwersacji |
|---|---|---|
| Scope | Pojedyncze pary odpowiedzi na zapytania | Prowadzenie rozmów z wieloma wymianami zdań |
| Metrics | Jakość i bezpieczeństwo poszczególnych odpowiedzi | Wyniki na poziomie konwersacji i zadowolenie użytkowników |
| Format danych | JSONL z polami query i response |
JSONL z tablicą messages zawierającą całą rozmowę |
| Przypadek użycia | Testowanie poszczególnych odpowiedzi modelu | Testowanie doświadczeń end-to-end agenta |
Wybierz przepływ pracy konwersacji zgodny ze źródłem danych:
| Workflow | Kiedy stosować | Typ źródła danych |
|---|---|---|
| Z zestawu danych lub w tekście | Masz lokalne ślady konwersacji lub dane testowe |
jsonl z file_id lub file_content |
| Wdrożone konwersacje | Chcesz ocenić określone konwersacje lub próbkowany ruch produkcyjny z usługi Application Insights |
azure_ai_trace_data_source_preview Z trace_source |
| Symulowane konwersacje | Chcesz wygenerować syntetyczne konwersacje testowe |
azure_ai_target_completions Z conversation_gen_preview |
Wybieranie poziomu oceny
Parametr evaluation_level w uruchomieniu określa, czy ewaluatorzy oceniają poszczególne tury, czy całe rozmowy:
| Value | Behavior |
|---|---|
"turn" |
Ewaluatorzy oceniają każdy obrót niezależnie. |
"conversation" |
Ewaluatorzy oceniają całą rozmowę jako całość. |
| (pominięto) | Wartość domyślna to "turn". |
Ważna
Zgodność ewaluatora: każdy ewaluator obsługuje określone poziomy oceny. Sprawdź pole ewaluatora supported_evaluation_levels w katalogu ewaluatora.
-
Ewaluatory tylko dla jednej tury (na przykład
fluency,relevance) nie mogą być używane zevaluation_level="conversation". - Obecnie wszystkie ewaluatory konwersacji obsługują zarówno poziom
"turn", jak i"conversation".
Typowe błędy
| Error | Przyczyna | Rozwiązanie |
|---|---|---|
| Niezgodny poziom oceny | Używanie evaluation_level="conversation" z ewaluatorem tylko dla tur |
Usuń moduł oceniający tylko dla tury lub zmień na evaluation_level="turn" |
Przygotowywanie danych konwersacji
Utwórz plik JSONL, w którym każdy wiersz zawiera całą konwersację w polu messages. Każdy komunikat powinien zawierać role (użytkownika, asystenta lub system) i content. Pełny przykład znajdziesz w przykładach oceny konwersacji w pakiecie SDK.
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": "Your current balance is $1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}]}
Możesz również uwzględnić definicje narzędzi i wywołania narzędzi, jeśli agent używa narzędzi:
{"messages": [{"role": "user", "content": "What is the capital/major city of France?"}, {"role": "assistant", "content": "Paris"}]}
{"messages": [{"role": "user", "content": "How do I reverse a string in Python?"}, {"role": "assistant", "content": "You can reverse a string in Python by using slicing: string[::-1]"}]}
{"messages": [{"role": "user", "content": "What are the main causes of climate change?"}, {"role": "assistant", "content": "The main causes of climate change are the increase in greenhouse gases in the atmosphere, primarily due to human activities such as burning fossil fuels and deforestation."}]}
{"messages": [{"role": "user", "content": "What's my account balance?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_account_balance", "arguments": "{\"account_id\": \"ACCT-7890\"}"}}]}, {"role": "tool", "tool_call_id": "call_abc123", "content": "{ \"balance\": 1234.56, \"currency\": \"USD\" }"}, {"role": "assistant", "content": "Your current balance is 1,234.56."}, {"role": "user", "content": "Thanks!"}, {"role": "assistant", "content": "You're welcome! Is there anything else?"}], "tool_definitions": [{"name": "get_account_balance", "description": "Retrieves the current balance for a customer account", "parameters": {"type": "object", "properties": {"account_id": {"type": "string"}}, "required": ["account_id"]}}]}
{"messages": [{"role": "user", "content": "Explain the theory of relativity in simple terms."}, {"role": "assistant", "content": "Einstein's theory of relativity shows that space and time are interconnected and relative to the observer's frame of reference."}]}
{"messages": [{"role": "user", "content": "What's the weather in Seattle?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_002", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Seattle, WA\"}"}}]}, {"role": "tool", "tool_call_id": "call_002", "content": "{ \"temperature\": 55, \"condition\": \"Cloudy\" }"}, {"role": "assistant", "content": "It's currently 55F and cloudy in Seattle."}], "tool_definitions": [{"name": "get_weather", "description": "Get the current weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}, "required": ["location"]}}]}
{"messages": [{"role": "user", "content": "What is the tallest mountain in the world?"}, {"role": "assistant", "content": "Mount Everest is the tallest mountain in the world."}]}
{"messages": [{"role": "user", "content": "Is 4 x 2 = 16?"}, {"role": "assistant", "content": "No, 4 x 2 = 8."}]}
{"messages": [{"role": "user", "content": "What is the best Italian desert?"}, {"role": "assistant", "content": "Tiramisu is a popular Italian dessert."}]}
{"messages": [{"role": "user", "content": "What is the chemical formula for water?"}, {"role": "assistant", "content": "The chemical formula for water is H2O."}]}
Definiowanie schematu danych i ewaluatorów
Określ schemat danych rozmowy, przypisz pole messages do każdego ewaluatora i wybierz ewaluatory przeznaczone do oceny całej rozmowy. Ewaluatorzy na poziomie konwersacji oceniają całą interakcję, a nie poszczególne zwroty.
pip install "azure-ai-projects>=2.2.0"
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
endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment_name = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project_client,
project_client.get_openai_client() as openai_client,
):
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="conversation_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}}"},
),
]
Utwórz ewaluację i uruchom
Pobierz plik sample_data_multiturn_conversations.jsonl przed uruchomieniem przykładu.
from openai.types.evals.create_eval_jsonl_run_data_source_param import (
CreateEvalJSONLRunDataSourceParam,
SourceFileID,
)
# Upload conversation data
data_id = project_client.datasets.upload_file(
name="multiturn-conversation-data",
version="1",
file_path="./sample_data_multiturn_conversations.jsonl",
).id
# Create the evaluation
eval_object = openai_client.evals.create(
name="Multi-turn Conversation Evaluation",
data_source_config=data_source_config,
testing_criteria=testing_criteria,
)
# Create a run with evaluation_level set to "conversation"
eval_run = openai_client.evals.runs.create(
eval_id=eval_object.id,
name="multiturn-conversation-run",
data_source=CreateEvalJSONLRunDataSourceParam(
type="jsonl",
source=SourceFileID(
type="file_id",
id=data_id,
),
),
extra_body={"evaluation_level": "conversation"},
)
Aby sprawdzać, czy proces został ukończony, i interpretować wyniki, zobacz Pobieranie wyników oceny w chmurze.
Aby zobaczyć kompletny działający przykład, zobacz plik sample_multiturn_conversation_evaluation.py na GitHubie.
Następne kroki
- Aby sprawdzać, czy proces został ukończony, i interpretować wyniki, zobacz Pobieranie wyników oceny w chmurze.
- Aby ocenić ślady z środowiska produkcyjnego, zobacz Ocenianie wdrożonego modelu i konwersacji agenta.
- Aby wygenerować konwersacje syntetyczne, zobacz Symulowanie konwersacji agenta.