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.
Von Bedeutung
Auf dieser Seite wird die Verwendung der Agentauswertungsversion 0.22
mit MLflow 2 beschrieben. Databricks empfiehlt die Verwendung von MLflow 3, die in die Agent-Auswertung >1.0
integriert ist. In MLflow 3 sind Die Agentauswertungs-APIs jetzt Teil des mlflow
Pakets.
Informationen zu diesem Thema finden Sie unter Building MLflow Evaluation Datasets.
Um die Qualität eines KI-Agents zu messen, müssen Sie in der Lage sein, einen repräsentativen Satz von Anforderungen zusammen mit Kriterien zu definieren, die hochwertige Antworten kennzeichnen. Dazu stellen Sie einen Auswertungssatz bereit. Dieser Artikel behandelt die verschiedenen Optionen für Ihr Evaluationsset und einige bewährte Verfahren zur Erstellung eines Evaluationssets.
Databricks empfiehlt, einen Humanevaluationssatz zu erstellen, der aus repräsentativen Fragen und echten Antworten besteht. Wenn Ihre Anwendung einen Abrufschritt enthält, können Sie optional die unterstützenden Dokumente bereitstellen, auf denen Sie erwarten, dass die Antwort basiert. Um Ihnen den Einstieg in die Erstellung eines Evaluationsdatensatzes zu erleichtern, stellt Databricks ein SDK bereit, das qualitativ hochwertige synthetische Fragen und Antworten generiert, die direkt in der Agentenevaluation verwendet oder an Fachexperten zur Überprüfung gesendet werden können. Weitere Informationen finden Sie unter Synthetisieren von Auswertungssätzen.
Ein guter Auswertungssatz weist die folgenden Merkmale auf:
- Repräsentativ: er sollte genau den Umfang der Anforderungen widerspiegeln, die die Anwendung in der Produktion findet.
- Herausforderung: Es sollte schwierige und vielfältige Fälle umfassen, um die gesamte Palette der Anwendungsfunktionen effektiv zu testen.
- Kontinuierlich aktualisiert: Er sollte regelmäßig aktualisiert werden, um die Verwendung der Anwendung und die sich ändernden Muster des Produktionsverkehrs widerzuspiegeln.
Informationen zum erforderlichen Schema eines Auswertungssatzes finden Sie unter Agent Evaluation Input Schema (MLflow 2).For the required schema of an evaluation set, see Agent Evaluation input schema (MLflow 2).
Beispielauswertungssätze
Dieser Abschnitt enthält einfache Beispiele für Evaluationssätze.
Beispielauswertungssatz mit nur request
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
}
]
Beispielauswertungssatz mit request
und expected_response
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_response": "There's no significant difference.",
}
]
Beispielauswertungssatz mit request
, expected_response
und expected_retrieved_content
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_retrieved_context": [
{
"doc_uri": "doc_uri_1",
},
{
"doc_uri": "doc_uri_2",
},
],
"expected_response": "There's no significant difference.",
}
]
Beispielauswertungssatz mit nur request
und response
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
}
]
Beispielauswertungssatz mit einem willkürlich formatierten request
und response
eval_set = [
{
"request": {"query": "Difference between", "item_a": "reduceByKey", "item_b": "groupByKey"},
"response": {
"differences": [
"reduceByKey aggregates data before shuffling",
"groupByKey shuffles all data",
"reduceByKey is more efficient",
]
}
}
]
Beispielauswertungssatz mit request
, response
und guidelines
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
]
Beispielauswertungssatz mit request
, response
, und guidelines
expected_facts
eval_set = [
{
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"expected_facts": [
"There's no significant difference.",
],
# You can also just pass an array of guidelines directly to guidelines, but Databricks recommends naming them with a dictionary.
"guidelines": {
"english": ["The response must be in English"],
"clarity": ["The response must be clear, coherent, and concise"],
}
}
]
Beispielauswertungssatz mit request
, response
und retrieved_context
eval_set = [
{
"request_id": "request-id", # optional, but useful for tracking
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Beispielauswertungssatz mit request
, response
, und retrieved_context
expected_facts
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_facts": [
"There's no significant difference.",
],
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Beispielauswertungssatz mit request
, response
, retrieved_context
, und expected_facts
expected_retrieved_context
eval_set = [
{
"request_id": "request-id",
"request": "What is the difference between reduceByKey and groupByKey in Spark?",
"expected_retrieved_context": [
{
"doc_uri": "doc_uri_2_1",
},
{
"doc_uri": "doc_uri_2_2",
},
],
"expected_facts": [
"There's no significant difference.",
],
"response": "reduceByKey aggregates data before shuffling, whereas groupByKey shuffles all data, making reduceByKey more efficient.",
"retrieved_context": [
{
# In `retrieved_context`, `content` is optional, but delivers additional functionality if provided (the Databricks Context Relevance LLM judge runs to check the relevance of the provided content to the request).
"content": "reduceByKey reduces the amount of data shuffled by merging values before shuffling.",
"doc_uri": "doc_uri_2_1",
},
{
"content": "groupByKey may lead to inefficient data shuffling due to sending all values across the network.",
"doc_uri": "doc_uri_6_extra",
},
],
}
]
Bewährte Methoden für die Entwicklung eines Evaluierungssatzes
- Betrachten Sie jede Stichprobe oder eine Gruppe von Stichproben im Auswertungssatz als Komponententest. Das heißt, jedes Beispiel sollte einem bestimmten Szenario mit einem explizit erwarteten Ergebnis entsprechen. Erwägen Sie z. B. das Testen längerer Kontexte, Multi-Hop-Begründungen und die Möglichkeit, Antworten von indirekten Nachweisen abzuleiten.
- Erwägen Sie das Testen von Adversarialszenarien von böswilligen Benutzern.
- Es gibt keine spezifische Richtlinie für die Anzahl der Fragen, die in einen Auswertungssatz aufgenommen werden sollen, aber klare Signale aus qualitativ hochwertigen Daten führen in der Regel besser aus als laute Signale aus schwachen Daten.
- Erwägen Sie die Einbeziehung von Beispielen, die auch für Menschen sehr schwierig zu beantworten sind.
- Ganz gleich, ob Sie eine allgemeine Anwendung erstellen oder auf eine bestimmte Domäne abzielen, ihre App wird wahrscheinlich eine Vielzahl von Fragen haben. Der Auswertungssatz sollte dies widerspiegeln. Wenn Sie beispielsweise eine Anwendung zum Feld bestimmter HR-Fragen erstellen, sollten Sie dennoch andere Domänen (z. B. Vorgänge) testen, um sicherzustellen, dass die Anwendung keine Halluzinationen hervorruft oder schädliche Antworten liefert.
- Qualitativ hochwertige, konsistente, vom Menschen generierte Bezeichnungen sind die beste Möglichkeit, um sicherzustellen, dass die Grundwahrheitswerte, die Sie der Anwendung bereitstellen, das gewünschte Verhalten genau widerspiegeln. Es folgen einige Schritte, um qualitativ hochwertige Humanbezeichnungen zu gewährleisten:
- Aggregierte Antworten (Bezeichnungen) von mehreren menschlichen Bezeichnungen für dieselbe Frage.
- Stellen Sie sicher, dass die Bezeichnungsanweisungen klar sind und dass die Bezeichnungselemente konsistent sind.
- Stellen Sie sicher, dass die Bedingungen für den Prozess der Kennzeichnung mit dem Format der Anforderungen identisch sind, die an die RAG-Anwendung übermittelt werden.
- Menschliche Bezeichnungen sind von Natur aus laut und inkonsistent, z. B. aufgrund unterschiedlicher Interpretationen der Frage. Dies ist ein wichtiger Bestandteil des Prozesses. Die Verwendung von menschlichen Bezeichnungen kann Interpretationen von Fragen offenlegen, die Sie nicht berücksichtigt haben, und dies kann Einblicke in das Verhalten geben, das Sie in Ihrer Anwendung beobachten.