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.
Als Entwickler, der GenAI-Anwendungen erstellt, benötigen Sie eine Möglichkeit, Ihre Beobachtungen zur Qualität der Ausgaben Ihrer Anwendung nachzuverfolgen. Mit der MLflow-Ablaufverfolgung können Sie Feedback oder Erwartungen direkt zu Ablaufverfolgungen während der Entwicklung hinzufügen, sodass Sie schnell Qualitätsprobleme aufzeichnen, erfolgreiche Beispiele markieren oder Notizen für zukünftige Verweise hinzufügen können.
Voraussetzungen
- Ihre Anwendung wird mit der MLflow-Ablaufverfolgung instrumentiert.
- Sie haben Ablaufverfolgungen generiert, indem Sie Ihre Anwendung ausführen
Bewertungsbezeichnungen hinzufügen
Einschätzungen versehen Ablaufverfolgungen und Spans mit strukturiertem Feedback, Bewertungen oder Ground Truth zur Qualitätsbewertung und -verbesserung in MLflow.
Databricks UI
MLflow erleichtert das direkte Hinzufügen von Anmerkungen (Labels) zu Spuren über die MLflow-Benutzeroberfläche.
Hinweis
Wenn Sie ein Databricks-Notizbuch verwenden, können Sie diese Schritte auch über die Trace-Oberfläche durchführen, die inline im Notizbuch gerendert wird.
- Navigieren Sie zur Registerkarte "Traces" in der Benutzeroberfläche des MLflow-Experiments.
- Öffne eine einzelne Ablaufverfolgung
- Klicken Sie in der Trace-Benutzeroberfläche auf den konkreten Abschnitt, den Sie beschriften möchten.
- Wenn Sie die Stammspan auswählen, wird Feedback an die gesamte Ablaufverfolgung angefügt.
- Erweitern Sie die Registerkarte "Bewertungen" ganz rechts
- Füllen Sie das Formular aus, um Ihr Feedback hinzuzufügen.
-
Bewertungstyp
- Feedback: Subjektive Bewertung der Qualität (Bewertungen, Kommentare)
- Erwartung: Die erwartete Ausgabe oder der erwartete Wert (was erstellt werden soll)
-
Bewertungsname
- Ein eindeutiger Name für das, worum es im Feedback geht
-
Datentyp
- Zahl
- Boolescher Wert
- Schnur
-
Wert
- Ihre Bewertung
-
Begründung
- Optionale Hinweise zum Wert
-
Bewertungstyp
- Klicken Sie auf "Erstellen ", um Ihre Bezeichnung zu speichern.
- Wenn Sie zur Registerkarte "Traces" zurückkehren, wird Ihr Label als neue Spalte angezeigt.
MLflow SDK
Mit dem SDK von MLflow können Sie programmgesteuert Labels zu Traces hinzufügen. Dies ist nützlich für die automatisierte Kennzeichnung basierend auf Ihrer Anwendungslogik oder für die Batchverarbeitung von Traces.
MLflow stellt zwei APIs bereit:
-
mlflow.log_feedback()– Protokolliert Feedback, das die tatsächlichen Ausgaben oder Zwischenschritte Ihrer App auswertet (z. B. "War die Antwort gut?", Bewertungen, Kommentare). -
mlflow.log_expectation()– Protokolliert Erwartungen, die das gewünschte oder richtige Ergebnis (Bodenwahrheit) definieren, das Ihre App erstellt haben sollte.
import mlflow
from mlflow.entities.assessment import (
AssessmentSource,
AssessmentSourceType,
AssessmentError,
)
@mlflow.trace
def my_app(input: str) -> str:
return input + "_output"
# Create a sample trace to demonstrate assessment logging
my_app(input="hello")
trace_id = mlflow.get_last_active_trace_id()
# Handle case where trace_id might be None
if trace_id is None:
raise ValueError("No active trace found. Make sure to run a traced function first.")
print(f"Using trace_id: {trace_id}")
# =============================================================================
# LOG_FEEDBACK - Evaluating actual outputs and performance
# =============================================================================
# Example 1: Human rating (integer scale)
# Use case: Domain experts rating response quality on a 1-5 scale
mlflow.log_feedback(
trace_id=trace_id,
name="human_rating",
value=4, # int - rating scale feedback
rationale="Human evaluator rating",
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="evaluator@company.com",
),
)
# Example 2: LLM judge score (float for precise scoring)
# Use case: Automated quality assessment using LLM-as-a-judge
mlflow.log_feedback(
trace_id=trace_id,
name="llm_judge_score",
value=0.85, # float - precise scoring from 0.0 to 1.0
rationale="LLM judge evaluation",
source=AssessmentSource(
source_type=AssessmentSourceType.LLM_JUDGE,
source_id="gpt-4o-mini",
),
metadata={"temperature": "0.1", "model_version": "2024-01"},
)
# Example 3: Binary feedback (boolean for yes/no assessments)
# Use case: Simple thumbs up/down or correct/incorrect evaluations
mlflow.log_feedback(
trace_id=trace_id,
name="is_helpful",
value=True, # bool - binary assessment
rationale="Boolean assessment of helpfulness",
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="reviewer@company.com",
),
)
# Example 4: Multi-category feedback (list for multiple classifications)
# Use case: Automated categorization or multi-label classification
mlflow.log_feedback(
trace_id=trace_id,
name="automated_categories",
value=["helpful", "accurate", "concise"], # list - multiple categories
rationale="Automated categorization",
source=AssessmentSource(
source_type=AssessmentSourceType.CODE,
source_id="classifier_v1.2",
),
)
# Example 5: Complex analysis with metadata (when you need structured context)
# Use case: Detailed automated analysis with multiple dimensions stored in metadata
mlflow.log_feedback(
trace_id=trace_id,
name="response_analysis_score",
value=4.2, # single score instead of dict - keeps value simple
rationale="Analysis: 150 words, positive sentiment, includes examples, confidence 0.92",
source=AssessmentSource(
source_type=AssessmentSourceType.CODE,
source_id="analyzer_v2.1",
),
metadata={ # Use metadata for structured details
"word_count": "150",
"sentiment": "positive",
"has_examples": "true",
"confidence": "0.92",
},
)
# Example 6: Error handling when evaluation fails
# Use case: Logging when automated evaluators fail due to API limits, timeouts, etc.
mlflow.log_feedback(
trace_id=trace_id,
name="failed_evaluation",
source=AssessmentSource(
source_type=AssessmentSourceType.LLM_JUDGE,
source_id="gpt-4o",
),
error=AssessmentError( # Use error field when evaluation fails
error_code="RATE_LIMIT_EXCEEDED",
error_message="API rate limit exceeded during evaluation",
),
metadata={"retry_count": "3", "error_timestamp": "2024-01-15T10:30:00Z"},
)
# =============================================================================
# LOG_EXPECTATION - Defining ground truth and desired outcomes
# =============================================================================
# Example 1: Simple text expectation (most common pattern)
# Use case: Defining the ideal response for factual questions
mlflow.log_expectation(
trace_id=trace_id,
name="expected_response",
value="The capital of France is Paris.", # Simple string - the "correct" answer
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="content_curator@example.com",
),
)
# Example 2: Complex structured expectation (advanced pattern)
# Use case: Defining detailed requirements for response structure and content
mlflow.log_expectation(
trace_id=trace_id,
name="expected_response_structure",
value={ # Complex dict - detailed specification of ideal response
"entities": {
"people": ["Marie Curie", "Pierre Curie"],
"locations": ["Paris", "France"],
"dates": ["1867", "1934"],
},
"key_facts": [
"First woman to win Nobel Prize",
"Won Nobel Prizes in Physics and Chemistry",
"Discovered radium and polonium",
],
"response_requirements": {
"tone": "informative",
"length_range": {"min": 100, "max": 300},
"include_examples": True,
"citations_required": False,
},
},
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="content_strategist@example.com",
),
metadata={
"content_type": "biographical_summary",
"target_audience": "general_public",
"fact_check_date": "2024-01-15",
},
)
# Example 3: Multiple acceptable answers (list pattern)
# Use case: When there are several valid ways to express the same fact
mlflow.log_expectation(
trace_id=trace_id,
name="expected_facts",
value=[ # List of acceptable variations of the correct answer
"Paris is the capital of France",
"The capital city of France is Paris",
"France's capital is Paris",
],
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="qa_team@example.com",
),
)
Databricks-REST-API
Erstellen Sie Bewertungen mithilfe der Databricks-REST-API, um Rückmeldungen und Bewertungen zu Ablaufverfolgungen aus jeder Umgebung programmgesteuert zu protokollieren.
Weitere Informationen finden Sie in der Dokumentation zur Databricks-REST-API.
REST-API-Endpunkt
POST https://<workspace-host>.databricks.com/api/3.0/mlflow/traces/{trace_id}/assessments
Beispielanforderung:
curl -X POST \
"https://<workspace-host>.databricks.com/api/3.0/mlflow/traces/<trace-id>/assessments" \
-H "Authorization: Bearer <databricks-token>" \
-H "Content-Type: application/json" \
-d '{
"assessment": {
"assessment_name": "string",
"create_time": "2019-08-24T14:15:22Z",
"expectation": {
"serialized_value": {
"serialization_format": "string",
"value": "string"
},
"value": {}
},
"feedback": {
"error": {
"error_code": "string",
"error_message": "string",
"stack_trace": "string"
},
"value": {}
},
"last_update_time": "2019-08-24T14:15:22Z",
"metadata": {
"property1": "string",
"property2": "string"
},
"overrides": "string",
"rationale": "string",
"source": {
"source_id": "string",
"source_type": "HUMAN"
},
"span_id": "string",
"valid": true
}
}'
Beispielantwort:
{
"assessment": {
"assessment_id": "string",
"assessment_name": "string",
"create_time": "2019-08-24T14:15:22Z",
"expectation": {
"serialized_value": {
"serialization_format": "string",
"value": "string"
},
"value": {}
},
"feedback": {
"error": {
"error_code": "string",
"error_message": "string",
"stack_trace": "string"
},
"value": {}
},
"last_update_time": "2019-08-24T14:15:22Z",
"metadata": {
"property1": "string",
"property2": "string"
},
"overrides": "string",
"rationale": "string",
"source": {
"source_id": "string",
"source_type": "HUMAN"
},
"span_id": "string",
"trace_id": "string",
"valid": true
}
}
Nächste Schritte
Fahren Sie mit diesen empfohlenen Aktionen und Lernprogrammen fort.
- Feedback von Domänenexperten sammeln – Strukturiertes Einrichten von Kennzeichnungssitzungen
- Erstellen von Auswertungsdatensätzen – Verwenden Sie Ihre gekennzeichneten Abläufe, um Testdatensätze zu erstellen
- Sammeln von Endbenutzerfeedback – Erfassen von Feedback aus bereitgestellten Anwendungen
Referenzhandbücher
In dieser Anleitung finden Sie ausführliche Dokumentation zu Konzepten und Features.
- Etikettierungsschemata – Erfahren Sie mehr über die strukturierte Feedbacksammlung