Monitoramento da qualidade da produção (execução automática de marcadores)
Beta
Esse recurso está na versão beta.
MLflow permite que o senhor execute automaticamente scorers em uma amostra de seus traços de produção para monitorar continuamente a qualidade.
Principais benefícios:
- Avaliação automatizada da qualidade sem intervenção manual
- Amostragem flexível para equilibrar a cobertura com o custo computacional
- Avaliação consistente usando os mesmos pontuadores do desenvolvimento
- Monitoramento contínuo com execução periódica em segundo plano
Pré-requisitos
-
Instale o site MLflow e o pacote necessário
Bashpip install --upgrade "mlflow[databricks]>=3.1.0" openai
-
Crie um experimento MLflow seguindo o início rápido de configuração do ambiente.
-
Instrumentou seu aplicativo de produção com o rastreamento do MLflow
-
Acesso a um esquema do Unity Catalog com permissões
CREATE TABLE
para armazenar as saídas de monitoramento.
Etapa 1: teste os pontuadores em seus traços de produção
Primeiro, precisamos testar se os marcadores que você usará na produção podem avaliar seus traços.
Se você usou seu aplicativo de produção como predict_fn
em mlflow.genai.evaluate()
durante o desenvolvimento, seus marcadores provavelmente já são compatíveis.
Atualmente, o MLflow só suporta o uso de avaliadores predefinidos para o monitoramento da produção. Entre em contato com seu representante Databricks account se precisar executar scorers personalizados baseados em código ou LLMna produção.
-
Use
mlflow.genai.evaluate()
para testar os marcadores em uma amostra de seus traçosPythonimport mlflow
from mlflow.genai.scorers import (
Guidelines,
RelevanceToQuery,
RetrievalGroundedness,
RetrievalRelevance,
Safety,
)
# Get a sample of up to 10 traces from your experiment
traces = mlflow.search_traces(max_results=10)
# Run evaluation to test the scorers
mlflow.genai.evaluate(
data=traces,
scorers=[
RelevanceToQuery(),
RetrievalGroundedness(),
RetrievalRelevance(),
Safety(),
Guidelines(
name="mlflow_only",
# Guidelines can refer to the request and response.
guidelines="If the request is unrelated to MLflow, the response must refuse to answer.",
),
# You can have any number of guidelines.
Guidelines(
name="customer_service_tone",
guidelines="""The response must maintain our brand voice which is:
- Professional yet warm and conversational (avoid corporate jargon)
- Empathetic, acknowledging emotional context before jumping to solutions
- Proactive in offering help without being pushy
Specifically:
- If the customer expresses frustration, anger, or disappointment, the first sentence must acknowledge their emotion
- The response must use "I" statements to take ownership (e.g., "I understand" not "We understand")
- The response must avoid phrases that minimize concerns like "simply", "just", or "obviously"
- The response must end with a specific next step or open-ended offer to help, not generic closings""",
),
],
) -
Use a UI do MLflow Trace para verificar a execução dos marcadores
Nesse caso, notamos que, apesar de termos executado os marcadores
RetrievalGroundedness()
eRetrievalRelevance()
, eles não apareceram na UI MLflow. Isso indica que esses marcadores não funcionam com nossos rastreamentos e, portanto, não devemos habilitá-los na próxima etapa.
Etapa 2: Ativar o monitoramento
Agora, vamos ativar o serviço de monitoramento. Uma vez ativado, o serviço de monitoramento sincronizará uma cópia dos traços avaliados do MLflow Experiment com uma tabela Delta no esquema do Unity Catalog que o senhor especificar.
Uma vez definido, o esquema do Unity Catalog não pode ser alterado.
- Using the UI
- Using the SDK
Siga a gravação abaixo para usar a interface do usuário e ativar os avaliadores que foram executados com sucesso na etapa 1. A seleção de uma taxa de amostragem só executa os avaliadores nessa porcentagem de traços (por exemplo, inserir 1.0
executará os avaliadores em 100% de seus traços e .2
executará em 20%, etc.).
Se quiser definir a taxa de amostragem por avaliador, o senhor deve usar o SDK.
Use o trecho de código abaixo para ativar os avaliadores que foram executados com êxito na etapa 1. A seleção de uma taxa de amostragem só executa os avaliadores nessa porcentagem de traços (por exemplo, inserir 1.0
executará os avaliadores em 100% de seus traços e .2
executará em 20%, etc.). Opcionalmente, você pode configurar a taxa de amostragem por marcador.
# These packages are automatically installed with mlflow[databricks]
from databricks.agents.monitoring import create_external_monitor, AssessmentsSuiteConfig, BuiltinJudge, GuidelinesJudge
external_monitor = create_external_monitor(
# Change to a Unity Catalog schema where you have CREATE TABLE permissions.
catalog_name="workspace",
schema_name="default",
assessments_config=AssessmentsSuiteConfig(
sample=1.0, # sampling rate
assessments=[
# Predefined scorers "safety", "groundedness", "relevance_to_query", "chunk_relevance"
BuiltinJudge(name="safety"), # or {'name': 'safety'}
BuiltinJudge(
name="groundedness", sample_rate=0.4
), # or {'name': 'groundedness', 'sample_rate': 0.4}
BuiltinJudge(
name="relevance_to_query"
), # or {'name': 'relevance_to_query'}
BuiltinJudge(name="chunk_relevance"), # or {'name': 'chunk_relevance'}
# Guidelines can refer to the request and response.
GuidelinesJudge(
guidelines={
# You can have any number of guidelines, each defined as a key-value pair.
"mlflow_only": [
"If the request is unrelated to MLflow, the response must refuse to answer."
], # Must be an array of strings
"customer_service_tone": [
"""The response must maintain our brand voice which is:
- Professional yet warm and conversational (avoid corporate jargon)
- Empathetic, acknowledging emotional context before jumping to solutions
- Proactive in offering help without being pushy
Specifically:
- If the customer expresses frustration, anger, or disappointment, the first sentence must acknowledge their emotion
- The response must use "I" statements to take ownership (e.g., "I understand" not "We understand")
- The response must avoid phrases that minimize concerns like "simply", "just", or "obviously"
- The response must end with a specific next step or open-ended offer to help, not generic closings"""
],
}
),
],
),
)
print(external_monitor)
Etapa 3. Atualizando seu monitor
Para alterar a configuração dos marcadores, use update_external_monitor()
. A configuração não tem estado, ou seja, é completamente substituída pela atualização. Para recuperar uma configuração existente para modificar, use get_external_monitor()
.
- Using the UI
- Using the SDK
Siga a gravação abaixo para usar a interface do usuário para atualizar os marcadores.
# These packages are automatically installed with mlflow[databricks]
from databricks.agents.monitoring import update_external_monitor, get_external_monitor
import os
config = get_external_monitor(experiment_id=os.environ["MLFLOW_EXPERIMENT_ID"])
print(config)
external_monitor = update_external_monitor(
# You must pass the experiment_id of the experiment you want to update.
experiment_id=os.environ["MLFLOW_EXPERIMENT_ID"],
# Change to a Unity Catalog schema where you have CREATE TABLE permissions.
assessments_config=AssessmentsSuiteConfig(
sample=1.0, # sampling rate
assessments=[
# Predefined scorers "safety", "groundedness", "relevance_to_query", "chunk_relevance"
BuiltinJudge(name="safety"), # or {'name': 'safety'}
BuiltinJudge(
name="groundedness", sample_rate=0.4
), # or {'name': 'groundedness', 'sample_rate': 0.4}
BuiltinJudge(
name="relevance_to_query"
), # or {'name': 'relevance_to_query'}
BuiltinJudge(name="chunk_relevance"), # or {'name': 'chunk_relevance'}
# Guidelines can refer to the request and response.
GuidelinesJudge(
guidelines={
# You can have any number of guidelines, each defined as a key-value pair.
"mlflow_only": [
"If the request is unrelated to MLflow, the response must refuse to answer."
], # Must be an array of strings
"customer_service_tone": [
"""The response must maintain our brand voice which is:
- Professional yet warm and conversational (avoid corporate jargon)
- Empathetic, acknowledging emotional context before jumping to solutions
- Proactive in offering help without being pushy
Specifically:
- If the customer expresses frustration, anger, or disappointment, the first sentence must acknowledge their emotion
- The response must use "I" statements to take ownership (e.g., "I understand" not "We understand")
- The response must avoid phrases that minimize concerns like "simply", "just", or "obviously"
- The response must end with a specific next step or open-ended offer to help, not generic closings"""
],
}
),
],
),
)
print(external_monitor)
Etapa 4. Usar os resultados do monitoramento
O trabalho de monitoramento levará de 15 a 30 minutos para ser executado pela primeira vez. Após a execução inicial, ele é executado a cada 15 minutos. Observe que, se o senhor tiver um grande volume de tráfego de produção, o trabalho poderá levar mais tempo para ser concluído.
Cada vez que o trabalho é executado, ele:
-
execução de cada avaliador na amostra de traços
- Se o senhor tiver taxas de amostragem diferentes por marcador, o trabalho de monitoramento tentará marcar o maior número possível de traços iguais. Por exemplo, se o pontuador A tiver uma taxa de amostragem de 20% e o pontuador B tiver uma taxa de amostragem de 40%, os mesmos 20% de traços serão usados para A e B.
-
Anexa o feedback do avaliador a cada traço no MLflow Experiment
-
Grava uma cópia de TODOS os traços (não apenas os amostrados) na tabela Delta configurada na Etapa 1.
O senhor pode view os resultados do monitoramento usando o Trace tab no Experimento MLflow. Como alternativa, o senhor pode consultar os rastreamentos usando SQL ou Spark na tabela Delta gerada.
Próximas etapas
Continue sua jornada com estas ações recomendadas e o tutorial.
- Use traços de produção para melhorar a qualidade do seu aplicativo - Crie uma avaliação semântica usando LLMs
- Criar conjunto de dados de avaliação - Use os resultados do monitoramento para selecionar traços de baixo desempenho no conjunto de dados de avaliação para melhorar sua qualidade.
Guia de referência
Explore a documentação detalhada dos conceitos e recursos mencionados neste guia.
- Monitoramento de produção - Mergulho profundo nos SDKs de monitoramento de produção