Colete feedback de especialistas do domínio
Uma das maneiras mais eficazes de aprimorar seu aplicativo GenAI é fazer com que os especialistas no domínio revisem e rotulem os traços existentes. O aplicativo de revisão do MLflow oferece um processo estruturado para coletar esse feedback de especialistas sobre interações reais com seu aplicativo.
Pré-requisitos
-
Seu ambiente de desenvolvimento está conectado à ExperiênciaMLflow, onde os traços do aplicativo GenAI são registros.
- Siga o guia de início rápido do rastreamento para conectar seu ambiente de desenvolvimento.
-
Seus especialistas de domínio devem ter acesso ao site Databricks workspace que contém a Experiência MLflow.
O recurso descrito neste guia requer o site MLflow versão 3.1.0 ou superior.
Execute o seguinte comando para instalar ou atualizar o MLflow SDK, incluindo os extras necessários para a integração do Databricks:
pip install --upgrade "mlflow[databricks]>=3.1.0" openai
Visão geral
Etapa 1: criar um aplicativo com o Tracing
Antes de coletar feedback, o senhor precisa ter registros de rastreamento do seu aplicativo GenAI. Esses rastreamentos capturam as entradas, saídas e etapas intermediárias da execução do seu aplicativo, incluindo qualquer chamada de ferramenta ou ação de recuperação.
abaixo é um exemplo de como o senhor pode log traces. Este exemplo inclui um recuperador falso para que possamos ilustrar como os documentos recuperados nos rastreamentos são renderizados no aplicativo Review. Consulte a visão geral do Review App para obter mais informações sobre como o Review App renderiza traces.
import os
import mlflow
from openai import OpenAI
from mlflow.entities import Document
from typing import List, Dict
# Enable auto instrumentation for OpenAI SDK
mlflow.openai.autolog()
# Connect to a Databricks LLM via OpenAI using the same credentials as MLflow
# Alternatively, you can use your own OpenAI credentials here
mlflow_creds = mlflow.utils.databricks_utils.get_databricks_host_creds()
client = OpenAI(
api_key=mlflow_creds.token,
base_url=f"{mlflow_creds.host}/serving-endpoints"
)
# Spans of type RETRIEVER are rendered in the Review App as documents.
@mlflow.trace(span_type="RETRIEVER")
def retrieve_docs(query: str) -> List[Document]:
normalized_query = query.lower()
if "john doe" in normalized_query:
return [
Document(
id="conversation_123",
page_content="John Doe mentioned issues with login on July 10th. Expressed interest in feature X.",
metadata={"doc_uri": "http://domain.com/conversations/123"},
),
Document(
id="conversation_124",
page_content="Follow-up call with John Doe on July 12th. Login issue resolved. Discussed pricing for feature X.",
metadata={"doc_uri": "http://domain.com/conversations/124"},
),
]
else:
return [
Document(
id="ticket_987",
page_content="Acme Corp raised a critical P0 bug regarding their main dashboard on July 15th.",
metadata={"doc_uri": "http://domain.com/tickets/987"},
)
]
# Sample app that we will review traces from
@mlflow.trace
def my_app(messages: List[Dict[str, str]]):
# 1. Retrieve conversations based on the last user message
last_user_message_content = messages[-1]["content"]
retrieved_documents = retrieve_docs(query=last_user_message_content)
retrieved_docs_text = "\n".join([doc.page_content for doc in retrieved_documents])
# 2. Prepare messages for the LLM
messages_for_llm = [
{"role": "system", "content": "You are a helpful assistant!"},
{
"role": "user",
"content": f"Additional retrieved context:\n{retrieved_docs_text}\n\nNow, please provide the one-paragraph summary based on the user's request {last_user_message_content} and this retrieved context.",
},
]
# 3. Call LLM to generate the summary
return client.chat.completions.create(
model="databricks-claude-3-7-sonnet", # This example uses Databricks hosted Claude-3-7-Sonnet. If you provide your own OpenAI credentials, replace with a valid OpenAI model e.g., gpt-4o, etc.
messages=messages_for_llm,
)
Etapa 2: Definir esquemas de rótulos
Os esquemas de rótulo definem as perguntas e os tipos de entrada que os especialistas de domínio usarão para fornecer feedback sobre seus traços. O senhor pode usar os esquemas integrados do MLflow ou criar esquemas personalizados adaptados aos seus critérios de avaliação específicos.
Há dois tipos principais de esquemas de rótulos:
- Tipo de expectativa (
type="expectation"
) : Usado quando o especialista fornece uma verdade básica " " ou uma resposta correta. Por exemplo, fornecer oexpected_facts
para a resposta de um sistema RAG. Esses rótulos geralmente podem ser usados diretamente no conjunto de dados de avaliação. - Tipo de feedback (
type="feedback"
) : usado para avaliações, classificações ou classificações subjetivas. Por exemplo, classificar uma resposta em uma escala de 1 a 5 quanto à polidez, ou classificar se uma resposta atende a determinados critérios.
Consulte a documentação do rótulo Schemas para entender os vários métodos de entrada para seus esquemas, como opções categóricas (botões de opção), escala numérica ou texto de forma livre.
from mlflow.genai.label_schemas import create_label_schema, InputCategorical, InputText
# Collect feedback on the summary
summary_quality = create_label_schema(
name="summary_quality",
type="feedback",
title="Is this summary concise and helpful?",
input=InputCategorical(options=["Yes", "No"]),
instruction="Please provide a rationale below.",
enable_comment=True,
overwrite=True,
)
# Collect a ground truth summary
expected_summary = create_label_schema(
name="expected_summary",
type="expectation",
title="Please provide the correct summary for the user's request.",
input=InputText(),
overwrite=True,
)
Etapa 3: Criar uma sessão de rótulo
Um rótulo Session é um tipo especial de MLflow execução que organiza um conjunto de traços para revisão por especialistas específicos usando esquemas de rótulos selecionados. Ele funciona como uma fila para o processo de revisão.
Consulte a documentação do rótulo Session para obter mais detalhes.
Veja como criar uma sessão de rótulo:
from mlflow.genai.labeling import create_labeling_session
# Create the Labeling Session with the schemas we created in the previous step
label_summaries = create_labeling_session(
name="label_summaries",
assigned_users=[],
label_schemas=[summary_quality.name, expected_summary.name],
)
Etapa 4: Gerar traços e adicionar ao rótulo Session
Depois que a sessão do rótulo for criada, o senhor precisará adicionar traços a ela. Os rastros são copiados para a sessão de rótulo, portanto, qualquer rótulo ou modificação feita durante o processo de revisão não afeta os rastros originais dos registros.
O senhor pode adicionar qualquer traço em seu experimento MLflow. Consulte a documentação do rótulo Session para obter mais detalhes.
Depois que os traços forem gerados, o senhor também poderá adicioná-los ao rótulo Session selecionando os traços no site Trace tab, clicando em Export Traces e, em seguida, selecionando o rótulo Session que criou acima.
import mlflow
# Use verison tracking to be able to easily query for the traces
tracked_model = mlflow.set_active_model(name="my_app")
# Run the app to generate traces
sample_messages_1 = [
{"role": "user", "content": "what issues does john doe have?"},
]
summary1_output = my_app(sample_messages_1)
sample_messages_2 = [
{"role": "user", "content": "what issues does acme corp have?"},
]
summary2_output = my_app(sample_messages_2)
# Query for the traces we just generated
traces = mlflow.search_traces(model_id=tracked_model.model_id)
# Add the traces to the session
label_summaries.add_traces(traces)
# Print the URL to share with your domain experts
print(f"Share this Review App with your team: {label_summaries.url}")
Etapa 5: compartilhe o aplicativo de avaliação com especialistas
Depois que a sessão de rótulo for preenchida com traços, o senhor poderá compartilhar o URL com os especialistas do domínio. Eles podem usar esse URL para acessar o Review App, view os traços atribuídos a eles (ou escolher entre os não atribuídos) e fornecer feedback usando os esquemas de rótulo que o senhor configurou.
Seus especialistas de domínio precisam ter acesso ao Databricks Workspace e WRITE
permissões para o MLflow Experiment.
Etapa 6: visualizar e usar o rótulo coletado
Depois que os especialistas de domínio concluírem suas análises, o feedback coletado será anexado aos traços na sessão de rótulo. O senhor pode recuperar esses rótulos programaticamente para analisá-los ou usá-los para criar um conjunto de dados de avaliação.
rótulo são armazenados como objetos Assessment
em cada Trace dentro da rótulo Session.
Usar a interface de usuário do MLflow
Para analisar os resultados, navegue até o experimento MLflow.
Use o SDK do MLflow
O código a seguir busca todos os rastros da execução da sessão do rótulo e extrai as avaliações (rótulo) em um Pandas DataFrame para facilitar a análise.
labeled_traces_df = mlflow.search_traces(run_id=label_summaries.mlflow_run_id)
Exemplo de notebook
O Notebook a seguir inclui todo o código desta página.
Coletar feedback de especialistas no domínio Notebook
Próximas etapas
Conversão para o conjunto de dados de avaliação
O rótulo do tipo "expectation" (como o expected_summary
do nosso exemplo) é particularmente útil para criar o conjunto de dados de avaliação. Esses conjuntos de dados podem ser usados com o site mlflow.genai.evaluate()
para testar sistematicamente novas versões do seu aplicativo GenAI em relação à verdade básica definida por especialistas.