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.
Bewerten Sie vollständige Konversationen aus Datensätzen auf Turn- oder Konversationsebene.
Voraussetzungen
- Schließen Sie die Voraussetzungen für die Cloudbewertung und die -Clienteinrichtung ab.
- Konversationsdaten mit einem
messages-Array. - Evaluatoren, die die ausgewählte Bewertungsebene unterstützen, z. B. Kohärenz und Faktenbezug.
In den Beispielen wird der in SDK-Client einrichten konfigurierte SDK-Client verwendet.
Konversationsdatensätze auswerten
Bewerten Sie vollständige Unterhaltungen, um die Agentqualität über ganze Benutzerinteraktionen hinweg zu bewerten – nicht nur einzelne Antworten. Verwenden Sie die Evaluierung auf Konversationsebene, um Qualitätsprobleme wie unvollständige Aufgabenlösung, Benutzerfrustration und Regressionen bei Tool-Aufrufen zu identifizieren, die bei der Bewertung auf Turn-Ebene übersehen werden.
Betrachten Sie beispielsweise einen Support-Agenten, bei dem der Benutzer im Verlauf mehrerer Gesprächsrunden zunehmend frustriert wird:
Turn 1 — User: "Ich muss mein Kennwort zurücksetzen." Agent: "Ich habe Ihr Konto gefunden. Ich schicke einen Link zum Zurücksetzen.
Turn 2 — User: "Ich habe die E-Mail nicht erhalten." Agent: "Ich habe den Link erneut gesendet. Bitte überprüfen Sie Spam."
Turn 3 — Benutzer: "Immer noch nichts. „Können Sie es nicht einfach direkt zurücksetzen?“ Agent: „Ich habe einen weiteren Link zum Zurücksetzen gesendet.“
Ein Evaluator auf Durchlaufebene bewertet nur die letzte Antwort – die höflich ist und Aktionen ausführt – und vergibt daher eine gute Bewertung. Ein Evaluator auf Gesprächsebene, der die Kundenzufriedenheit über den gesamten Gesprächsverlauf hinweg bewertet, stellt fest, dass der Agent dieselbe erfolglose Maßnahme dreimal wiederholt hat, ohne eine Alternative zu versuchen, sodass das Problem des Nutzers ungelöst blieb.
Die Bewertung auf Konversationsebene unterscheidet sich in mehreren Punkten von der Bewertung auf Turn-Ebene:
| Aspect | Durchlaufebene | Konversationsebene |
|---|---|---|
| Umfang | Einzelne Abfrageantwortpaare | Vollständige Konversationen mit mehreren Nachrichten |
| Metrics | Qualität und Sicherheit pro Reaktion | Ergebnisse auf Konversationsebene und Benutzerzufriedenheit |
| Datenformat | JSONL mit query und response Feldern |
JSONL mit einem messages Array, das die vollständige Unterhaltung enthält |
| Anwendungsfall | Testen einzelner Modellantworten | Testen der End-to-End-Agent-Erfahrungen |
Wählen Sie den Unterhaltungsworkflow aus, der Ihrer Datenquelle entspricht:
| Workflow | Wann verwenden? | Datenquellentyp |
|---|---|---|
| Aus Datensatz oder Inline | Sie haben lokale Gesprächsprotokolle oder Testdaten. |
jsonl mit file_id oder file_content |
| Bereitgestellte Konversationen | Sie möchten bestimmte Unterhaltungen oder stichprobenbasierten Produktionsdatenverkehr aus Application Insights auswerten. |
azure_ai_trace_data_source_preview mit trace_source |
| Simulierte Unterhaltungen | Sie möchten synthetische Testgespräche generieren | azure_ai_user_conversation_simulation |
Auswählen einer Auswertungsstufe
Der evaluation_level-Parameter für die Ausführung bestimmt, ob Evaluatoren einzelne Durchläufe oder vollständige Unterhaltungen bewerten sollen:
| Wert | Behavior |
|---|---|
"turn" |
Die Evaluatoren bewerten jeden Durchlauf einzeln. |
"conversation" |
Evaluatoren bewerten die gesamte Unterhaltung als Ganzes. |
| (weggelassen) | Wird standardmäßig auf "turn" festgelegt. |
Important
Evaluatorkompatibilität: Jeder Evaluator unterstützt bestimmte Auswertungsstufen. Überprüfen Sie das Feld des supported_evaluation_levels Auswertenden in Bewertungsebenen.
Evaluatoren nur für Durchläufe (z. B.
builtin.fluency,builtin.relevance) werden nicht mitevaluation_level="conversation"ausgeführt. Wenn ein Evaluator die Auswertung auf Unterhaltungsebene nicht unterstützt, überspringt der Dienst diesen Evaluator, anstatt den Auswertungslauf fehlschlagen zu lassen.Evaluator, die die Bewertung auf Unterhaltungsebene unterstützen: Die folgenden integrierten Auswerter unterstützen sowohl die Bewertung auf Turn-Ebene (single-turn) als auch die Auswertung auf Unterhaltungsebene (Multi-Turn):
builtin.output_qualitybuiltin.tool_use_qualitybuiltin.deflection_ratebuiltin.customer_satisfactionbuiltin.task_completionbuiltin.coherencebuiltin.groundedness
builtin.output_qualityundbuiltin.tool_use_qualitysind zusammengesetzte Evaluatoren, die mehrere Qualitätsdimensionen bewerten.Für die Bewertung auf Turn-Ebene unterstützen alle integrierten Evaluatoren außer
messagesund dem veraltetenbuiltin.document_retrievaldas Eingabeformatbuiltin.quality_grader. Die Azure OpenAI-Bewerterlabel_model,python_grader,score_model,string_checkundtext_similarityunterstützen das Eingabeformatmessagesnicht.
Häufige Fehler
| Fehler | Ursache | Lösung |
|---|---|---|
| Der Evaluator wird übersprungen. | Verwendung von evaluation_level="conversation" mit einem Evaluator, der die Auswertung auf Unterhaltungsebene nicht unterstützt |
Verwenden Sie einen Evaluator auf Unterhaltungsebene, oder wechseln Sie zu evaluation_level="turn", wenn Sie diesen Evaluator benötigen. |
Gesprächsdaten vorbereiten
Erstellen Sie eine JSONL-Datei, in der jede Zeile eine vollständige Unterhaltung im messages Feld enthält. Jede Nachricht sollte ein role (Benutzer, Assistent oder System) und ein content enthalten. Ein vollständiges Beispiel finden Sie in den Beispielen zur konversationsauswertung im 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?"}]}
Sie können auch Tooldefinitionen und Toolaufrufe einschließen, wenn Ihr Agent Tools verwendet:
{"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."}]}
Definieren des Datenschemas und der Auswerter
Geben Sie das Schema für Ihre Unterhaltungsdaten an und wählen Sie Evaluatoren aus, die für Auswertungen auf Unterhaltungsebene ausgelegt sind. Ordnen Sie jedem Evaluator messages zu. Für Evaluatoren, die das Toolverhalten bewerten, ordnen Sie auch tool_definitions zu. Evaluatoren auf Unterhaltungsebene bewerten die gesamte Interaktion, nicht nur einzelne Durchläufe.
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="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}}"},
),
]
Auswertung erstellen und ausführen
Laden Sie sample_data_multiturn_conversations.jsonl herunter, bevor Sie das Beispiel ausführen.
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"},
)
Weitere Informationen zum Abfragen der Beendigung und zum Interpretieren der Ergebnisse finden Sie unter Ergebnisse der Cloudbewertung abrufen.
Ein vollständiges, ausführbares Beispiel finden Sie auf GitHub unter sample_multiturn_conversation_evaluation.py.
Nächste Schritte
- Weitere Informationen zum Abfragen der Beendigung und zum Interpretieren der Ergebnisse finden Sie unter Ergebnisse der Cloudbewertung abrufen.
- Informationen zu Produktionsprotokollen finden Sie unter Bereitgestellte Modell- und Agentkonversationen auswerten.
- Informationen zum Generieren synthetischer Unterhaltungen aus Testfällen finden Sie unter "Simulieren von Agent-Unterhaltungen".
- Informationen zum Generieren synthetischer Unterhaltungen aus einer Agent-Eingabeaufforderung finden Sie unter Generieren synthetischer Unterhaltungen.