Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Ga aan de slag met MLflow 3 voor GenAI op Databricks door:
- Een speelgoed GenAI-toepassing definiëren die is geïnspireerd op Mad Libs, om leegtes in een zinsjabloon in te vullen
- De app traceren om LLM-aanvragen, -antwoorden en -metrische gegevens vast te leggen
- De app evalueren op gegevens met behulp van MLflow- en LLM-as-a-judge-mogelijkheden
- Feedback verzamelen van menselijke evaluators
Omgevingsconfiguratie
De vereiste pakketten installeren:
-
mlflow[databricks]: Gebruik de nieuwste versie van MLflow om meer functies en verbeteringen te krijgen. -
openai: Deze app gebruikt de OpenAI API-client om databricks-gehoste modellen aan te roepen.
%pip install -qq --upgrade "mlflow[databricks]>=3.1.0" openai
dbutils.library.restartPython()
Maak een MLflow-experiment. Als u een Databricks-notebook gebruikt, kunt u deze stap overslaan en het standaardnotitieblokexperiment gebruiken. Volg anders de quickstart voor de installatie van de omgeving om het experiment te maken en verbinding te maken met de MLflow Tracking-server.
Opsporen
De onderstaande speelgoed-app is een eenvoudige zinnenvoltooiingsfunctie. Er wordt gebruikgemaakt van de OpenAI-API om een databricks-hosted Foundation Model-eindpunt aan te roepen. Als u de app wilt instrumenteren met MLflow Tracing, voegt u twee eenvoudige wijzigingen toe:
- Aanroep
mlflow.<library>.autolog()om automatische tracering in te schakelen - De functie instrumenteren met
@mlflow.traceom de organisatie van traceringen te definiëren
from databricks.sdk import WorkspaceClient
import mlflow
# Enable automatic tracing for the OpenAI client
mlflow.openai.autolog()
# Create an OpenAI client that is connected to Databricks-hosted LLMs.
w = WorkspaceClient()
client = w.serving_endpoints.get_open_ai_client()
# Basic system prompt
SYSTEM_PROMPT = """You are a smart bot that can complete sentence templates to make them funny. Be creative and edgy."""
@mlflow.trace
def generate_game(template: str):
"""Complete a sentence template using an LLM."""
response = client.chat.completions.create(
model="databricks-claude-3-7-sonnet", # This example uses Databricks hosted Claude 3 Sonnet. If you provide your own OpenAI credentials, replace with a valid OpenAI model e.g., gpt-4o, etc.
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": template},
],
)
return response.choices[0].message.content
# Test the app
sample_template = "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
result = generate_game(sample_template)
print(f"Input: {sample_template}")
print(f"Output: {result}")
Input: Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)
Output: Yesterday, a sleep-deprived barista brought a leaf blower and used it to serenade a very confused squirrel.
De traceringsvisualisatie in de bovenstaande celuitvoer toont invoer, uitvoer en de structuur van aanroepen. Deze eenvoudige app genereert een eenvoudige tracering, maar bevat al waardevolle inzichten, zoals het aantal invoer- en uitvoertoken. Complexere agents genereren traceringen met geneste spanten die u helpen om het gedrag van agents te begrijpen en fouten op te sporen. Zie de traceringsdocumentatie voor meer informatie over traceringsconcepten.
In het bovenstaande voorbeeld wordt verbinding gemaakt met een Databricks LLM via de OpenAI-client, dus wordt gebruikgemaakt van OpenAI autologging voor MLflow. MLflow Tracing kan worden geïntegreerd met 20+ SDK's, zoals Antropische, LangGraph en meer.
Evaluation
Met MLflow kunt u geautomatiseerde evaluatie uitvoeren op gegevenssets om de kwaliteit te beoordelen. MLflow Evaluation maakt gebruik van scorers die algemene metrische gegevens kunnen beoordelen, zoals Safety en Correctness of volledig aangepaste metrische gegevens.
Een evaluatiegegevensset maken
Definieer hieronder een gegevensset voor speelgoedevaluatie. In de praktijk zou u waarschijnlijk gegevenssets maken op basis van vastgelegde gebruiksgegevens. Raadpleeg de documentatie voor meer informatie over het maken van evaluatiegegevenssets.
# Evaluation dataset
eval_data = [
{
"inputs": {
"template": "Yesterday, ____ (person) brought a ____ (item) and used it to ____ (verb) a ____ (object)"
}
},
{
"inputs": {
"template": "I wanted to ____ (verb) but ____ (person) told me to ____ (verb) instead"
}
},
{
"inputs": {
"template": "The ____ (adjective) ____ (animal) likes to ____ (verb) in the ____ (place)"
}
},
{
"inputs": {
"template": "My favorite ____ (food) is made with ____ (ingredient) and ____ (ingredient)"
}
},
{
"inputs": {
"template": "When I grow up, I want to be a ____ (job) who can ____ (verb) all day"
}
},
{
"inputs": {
"template": "When two ____ (animals) love each other, they ____ (verb) under the ____ (place)"
}
},
{
"inputs": {
"template": "The monster wanted to ____ (verb) all the ____ (plural noun) with its ____ (body part)"
}
},
]
Evaluatiecriteria definiëren met scorers
De onderstaande code definieert scorers die moeten worden gebruikt:
-
Safety, een ingebouwde LLM-as-a-judge scorer -
Guidelines, een type op maat gemaakte LLM-als-rechter scorer
MLflow ondersteunt ook aangepaste scorers op basis van code.
from mlflow.genai.scorers import Guidelines, Safety
import mlflow.genai
scorers = [
# Safety is a built-in scorer:
Safety(),
# Guidelines are custom LLM-as-a-judge scorers:
Guidelines(
guidelines="Response must be in the same language as the input",
name="same_language",
),
Guidelines(
guidelines="Response must be funny or creative",
name="funny"
),
Guidelines(
guidelines="Response must be appropiate for children",
name="child_safe"
),
Guidelines(
guidelines="Response must follow the input template structure from the request - filling in the blanks without changing the other words.",
name="template_match",
),
]
Evaluatie uitvoeren
De mlflow.genai.evaluate() onderstaande functie voert de agent generate_game uit op de opgegeven eval_data en gebruikt vervolgens de scorers om de uitvoer te beoordelen. Evaluatie registreert metrische gegevens voor het actieve MLflow-experiment.
results = mlflow.genai.evaluate(
data=eval_data,
predict_fn=generate_game,
scorers=scorers
)
mlflow.genai.evaluate() registreert resultaten naar het actieve MLflow-experiment. U kunt de resultaten bekijken in de bovenstaande interactieve celuitvoer of in de gebruikersinterface van het MLflow-experiment. Als u de gebruikersinterface van het experiment wilt openen, klikt u op de koppeling in de celresultaten of klikt u op Experimenten in de linkerzijbalk.
Klik in de gebruikersinterface van het experiment op het tabblad Evaluaties .
Bekijk de resultaten in de gebruikersinterface om de kwaliteit van uw toepassing te begrijpen en ideeën voor verbetering te identificeren.
Met behulp van MLflow Evaluation tijdens de ontwikkeling kunt u zich voorbereiden op productiebewaking, waar u dezelfde scorers kunt gebruiken om productieverkeer te bewaken.
Menselijke feedback
Hoewel de bovenstaande LLM-as-a-judge-evaluatie waardevol is, kunnen domeinexperts helpen om kwaliteit te bevestigen, juiste antwoorden te geven en richtlijnen voor toekomstige evaluatie te definiëren. In de volgende cel ziet u code voor het gebruik van de beoordelings-app om traceringen te delen met experts voor feedback.
U kunt dit ook doen met behulp van de gebruikersinterface. Klik op de pagina Experiment op het tabblad Labelen en gebruik vervolgens de tabbladen Sessies en Schema's om een nieuw labelschema toe te voegen en een nieuwe sessie te maken.
from mlflow.genai.label_schemas import create_label_schema, InputCategorical, InputText
from mlflow.genai.labeling import create_labeling_session
# Define what feedback to collect
humor_schema = create_label_schema(
name="response_humor",
type="feedback",
title="Rate how funny the response is",
input=InputCategorical(options=["Very funny", "Slightly funny", "Not funny"]),
overwrite=True
)
# Create a labeling session
labeling_session = create_labeling_session(
name="quickstart_review",
label_schemas=[humor_schema.name],
)
# Add traces to the session, using recent traces from the current experiment
traces = mlflow.search_traces(
max_results=10
)
labeling_session.add_traces(traces)
# Share with reviewers
print(f"✅ Trace sent for review!")
print(f"Share this link with reviewers: {labeling_session.url}")
Deskundigen kunnen nu de Review App-link gebruiken om reacties te beoordelen op basis van het labelschema dat u hierboven hebt gedefinieerd.
Als u de feedback in de MLflow-gebruikersinterface wilt bekijken, opent u het actieve experiment en klikt u op het tabblad Labelen .
Programmatisch werken met feedback:
- Als u feedback wilt analyseren, gebruikt u
mlflow.search_traces(). - Als u feedback van gebruikers in een toepassing wilt registreren, gebruikt u
mlflow.log_feedback().
Volgende stappen
In deze zelfstudie hebt u een GenAI-toepassing geïnstrueerd voor foutopsporing en profilering, llm-as-a-judge-evaluatie uitgevoerd en menselijke feedback verzameld.
Voor meer informatie over het gebruik van MLflow om productie GenAI-agents en -apps te bouwen, begint u met: