Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När du skapar din GenAI-app kan du med MLflow Tracing lägga till feedback eller förväntningar direkt i spårningar. Du kan registrera kvalitetsproblem, markera lyckade exempel eller lägga till anteckningar för framtida referens. På så sätt kan du spåra kvaliteten under utvecklingen innan du konfigurerar en formell utvärdering.
Förutsättningar
- Ditt program instrumenteras med MLflow Tracing
- Du har genererat spårningar genom att köra programmet
Lägga till utvärderingsetiketter
Utvärderingar bifogar strukturerad feedback, poäng eller korrekta data till spår och tidsintervall för kvalitetsutvärdering och förbättring av MLflow.
Databricks-användargränssnitt
Du kan lägga till anteckningar (etiketter) direkt till spårningar via MLflow-användargränssnittet.
Anmärkning
Om du använder en Databricks-notebook kan du också utföra de här stegen från Trace-UI som integreras i notebooken.
- Gå till fliken Spårningar i användargränssnittet för MLflow-experiment.
- Öppna ett individuellt spår.
- I spårningsgränssnittet klickar du på det specifika intervall som du vill märka.
- Att välja rotspannet bifogar återkoppling till hela spåret.
- Expandera fliken Utvärderingar längst till höger.
- Fyll i formuläret för att lägga till din feedback.
-
Utvärderingstyp
- Feedback: Subjektiv utvärdering av kvalitet (betyg, kommentarer)
- Förväntan: Förväntade utdata eller värden (vad som borde ha producerats)
-
Utvärderingsnamn
- Ett unikt namn för vad feedbacken handlar om
-
Datatyp
- Nummer
- Boolesk
- Sträng
-
Värde
- Din utvärdering
-
Motivering
- Valfria anteckningar om värdet
-
Utvärderingstyp
- Spara etiketten genom att klicka på Skapa .
- När du återgår till fliken Spårningar visas etiketten som en ny kolumn.
MLflow SDK
Du kan programmatiskt lägga till etiketter i spårningar med MLflows SDK. Detta är användbart för automatiserad etikettering baserat på din programlogik eller för batchbearbetning av spårningar.
MLflow innehåller två API:er:
-
mlflow.log_feedback()– Loggar feedback som utvärderar appens faktiska utdata eller mellanliggande steg (till exempel "Var svaret bra?", betyg, kommentarer). -
mlflow.log_expectation()– Loggar förväntningar som definierar önskat eller korrekt resultat (grundsanning) som din app ska ha skapat.
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
Skapa utvärderingar med databricks REST API för att programmatiskt logga feedback och utvärderingar på spårningar från valfri miljö.
Se Dokumentation om Databricks REST API.
REST API-slutpunkt
POST https://<workspace-host>.databricks.com/api/3.0/mlflow/traces/{trace_id}/assessments
Exempelbegäran:
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
}
}'
Exempelsvar:
{
"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
}
}
Ytterligare resurser
- Samla in feedback från domänexperter – Anordna strukturerade etiketteringssessioner
- Skapa utvärderingsdatauppsättningar – Använd dina märkta spårningar för att skapa testdatauppsättningar
- Samla in feedback från slutanvändare – Samla in feedback från distribuerade program
Referensguider
Utforska detaljerad dokumentation för begrepp och funktioner som nämns i den här guiden.
- Etiketteringsscheman – Läs mer om strukturerad feedbackinsamling