Monitore a qualidade e o uso de token de aplicativos de fluxo de prompt implantados
Importante
Os itens marcados (visualização) neste artigo estão atualmente em visualização pública. Essa visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
O monitoramento de aplicativos implantados na produção é uma parte essencial do ciclo de vida do aplicativo de IA generativo. Mudanças nos dados e no comportamento do consumidor podem influenciar seu aplicativo ao longo do tempo, resultando em sistemas desatualizados que afetam negativamente os resultados dos negócios e expõem as organizações a riscos de conformidade, econômicos e de reputação.
Nota
Para obter uma maneira aprimorada de executar o monitoramento contínuo de aplicativos implantados (diferente do fluxo de prompt), considere usar a avaliação online da IA do Azure.
O monitoramento de IA do Azure para aplicativos de IA generativa permite que você monitore seus aplicativos em produção quanto ao uso de tokens, qualidade de geração e métricas operacionais.
As integrações para monitorar uma implantação de fluxo rápido permitem:
- Colete dados de inferência de produção do seu aplicativo de fluxo de prompt implantado.
- Aplique métricas de avaliação de IA responsável, como fundamentação, coerência, fluência e relevância, que são interoperáveis com métricas de avaliação de fluxo rápido.
- Monitore prompts, conclusão e uso total de token em cada implantação de modelo em seu fluxo de prompt.
- Monitore métricas operacionais, como contagem de solicitações, latência e taxa de erro.
- Use alertas e padrões pré-configurados para executar o monitoramento de forma recorrente.
- Consuma visualizações de dados e configure o comportamento avançado no portal do Azure AI Foundry.
Pré-requisitos
Antes de seguir as etapas neste artigo, verifique se você tem os seguintes pré-requisitos:
Uma subscrição do Azure com um método de pagamento válido. As subscrições gratuitas ou de avaliação do Azure não têm suporte para este cenário. Se você não tiver uma assinatura do Azure, crie uma conta paga do Azure para começar.
Um projeto do Azure AI Foundry.
Um fluxo de prompt pronto para implantação. Se você não tiver um, consulte Desenvolver um fluxo de prompt.
Os controles de acesso baseados em função do Azure (Azure RBAC) são usados para conceder acesso a operações no portal do Azure AI Foundry. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de Desenvolvedor do Azure AI no grupo de recursos. Para obter mais informações sobre permissões, consulte Controle de acesso baseado em função no portal do Azure AI Foundry.
Requisitos para monitoramento de métricas
As métricas de monitoramento são geradas por certos modelos de linguagem GPT de última geração configurados com instruções de avaliação específicas (modelos de prompt). Estes modelos funcionam como modelos avaliadores para tarefas seqüenciais. O uso dessa técnica para gerar métricas de monitoramento mostra fortes resultados empíricos e alta correlação com o julgamento humano quando comparado às métricas padrão de avaliação de IA generativa. Para obter mais informações sobre avaliação de fluxo imediata, consulte enviar teste em massa e avaliar um fluxo e métricas de avaliação e monitoramento para IA generativa.
Os modelos GPT que geram métricas de monitoramento são os seguintes. Esses modelos GPT são suportados com monitoramento e configurados como seu recurso do Azure OpenAI:
- GPT-3.5 Turbo
- GPT-4
- GPT-4-32K
Métricas suportadas para monitoramento
As seguintes métricas são suportadas para monitoramento:
Métrico | Description |
---|---|
Fundamentação | Mede o quão bem as respostas geradas pelo modelo se alinham com as informações dos dados de origem (contexto definido pelo usuário). |
Relevância | Mede até que ponto as respostas geradas pelo modelo são pertinentes e diretamente relacionadas com as perguntas dadas. |
Coerência | Mede até que ponto as respostas geradas pelo modelo são logicamente consistentes e conectadas. |
Fluência | Mede a proficiência gramatical da resposta prevista de uma IA generativa. |
Mapeamento de nome de coluna
Ao criar seu fluxo, você precisa garantir que os nomes das colunas sejam mapeados. Os seguintes nomes de colunas de dados de entrada são usados para medir a segurança e a qualidade da geração:
Nome da coluna de entrada | Definição | Obrigatório/Opcional |
---|---|---|
Pergunta | O prompt original fornecido (também conhecido como "entradas" ou "pergunta") | Necessário |
Resposta | A conclusão final da chamada de API que é retornada (também conhecida como "saídas" ou "resposta") | Necessário |
Contexto | Todos os dados de contexto enviados para a chamada da API, juntamente com o prompt original. Por exemplo, se você espera obter resultados de pesquisa apenas de determinadas fontes de informação certificadas ou site, você pode definir esse contexto nas etapas de avaliação. | Opcional |
Parâmetros necessários para métricas
Os parâmetros configurados em seu ativo de dados ditam quais métricas você pode produzir, de acordo com esta tabela:
Métrica | Pergunta | Resposta | Contexto |
---|---|---|---|
Coerência | Obrigatório | Obrigatório | - |
Fluência | Obrigatório | Obrigatório | - |
Fundamentação | Obrigatório | Obrigatório | Obrigatório |
Relevância | Obrigatório | Obrigatório | Obrigatório |
Para obter mais informações sobre os requisitos específicos de mapeamento de dados para cada métrica, consulte Requisitos de métricas de consulta e resposta.
Configurar o monitoramento para fluxo de prompt
Para configurar o monitoramento para seu aplicativo de fluxo de prompt, primeiro você precisa implantar seu aplicativo de fluxo de prompt com coleta de dados de inferência e, em seguida, pode configurar o monitoramento para o aplicativo implantado.
Implante seu aplicativo de fluxo de prompt com coleta de dados de inferência
Nesta seção, você aprenderá a implantar seu fluxo de prompt com a coleta de dados de inferência habilitada. Para obter informações detalhadas sobre como implantar seu fluxo de prompt, consulte Implantar um fluxo para inferência em tempo real.
Entre no Azure AI Foundry.
Se ainda não estiver no seu projeto, selecione-o.
Selecione Fluxo de prompt na barra de navegação esquerda.
Selecione o fluxo de prompt que você criou anteriormente.
Nota
Este artigo pressupõe que você já criou um fluxo de prompt pronto para implantação. Se você não tiver um, consulte Desenvolver um fluxo de prompt.
Confirme se o fluxo é executado com êxito e se as entradas e saídas necessárias estão configuradas para as métricas que você deseja avaliar.
O fornecimento dos parâmetros mínimos exigidos (pergunta/entradas e respostas/saídas) fornece apenas duas métricas: coerência e fluência. Você deve configurar seu fluxo conforme descrito na seção Requisitos para monitoramento de métricas. Este exemplo usa
question
(Question) echat_history
(Context) como as entradas de fluxo eanswer
(Answer) como a saída de fluxo.Selecione Implantar para começar a implantar seu fluxo.
Na janela de implantação, verifique se a coleta de dados de inferência está habilitada, o que coletará perfeitamente os dados de inferência do seu aplicativo para o Armazenamento de Blobs. Esta recolha de dados é necessária para a monitorização.
Prossiga com as etapas na janela de implantação para concluir as configurações avançadas.
Na página "Revisão", revise a configuração de implantação e selecione Criar para implantar seu fluxo.
Nota
Por padrão, todas as entradas e saídas do aplicativo de fluxo de prompt implantado são coletadas para o Armazenamento de Blobs. À medida que a implantação é invocada pelos usuários, os dados são coletados para serem usados pelo monitor.
Selecione a guia Teste na página de implantação e teste sua implantação para garantir que ela esteja funcionando corretamente.
Nota
O monitoramento requer que pelo menos um ponto de dados venha de uma fonte diferente da guia Teste na implantação. Recomendamos usar a API REST disponível na guia Consumir para enviar solicitações de exemplo para sua implantação. Para obter mais informações sobre como enviar solicitações de exemplo para sua implantação, consulte Criar uma implantação online.
Configurar a monitorização
Nesta seção, você aprenderá a configurar o monitoramento para seu aplicativo de fluxo de prompt implantado.
Na barra de navegação esquerda, vá para Meus ativos>Modelos + pontos de extremidade.
Selecione a implantação de fluxo de prompt que você criou.
Selecione Ativar na caixa Ativar monitoramento de qualidade de geração.
Comece a configurar o monitoramento selecionando as métricas desejadas.
Confirme se os nomes das colunas estão mapeados a partir do fluxo, conforme definido em Mapeamento de nomes de coluna.
Selecione a Conexão e Implantação do Azure OpenAI que você gostaria de usar para executar o monitoramento para seu aplicativo de fluxo de prompt.
Selecione Opções avançadas para ver mais opções para configurar.
Ajuste a taxa de amostragem, os limites para suas métricas configuradas e especifique os endereços de e-mail que devem receber alertas quando a pontuação média de uma determinada métrica ficar abaixo do limite.
Nota
Se sua implantação não tiver a coleta de dados habilitada, a criação de um monitor habilitará a coleta de dados de inferência para seu Armazenamento de Blob do Azure, o que colocará a implantação offline por alguns minutos.
Selecione Criar para criar o monitor.
Consumir resultados de monitoramento
Depois de criar seu monitor, ele será executado diariamente para calcular as métricas de uso e qualidade de geração do token.
Vá para a guia Monitoramento (visualização) de dentro da implantação para exibir os resultados do monitoramento. Aqui, você vê uma visão geral dos resultados do monitoramento durante a janela de tempo selecionada. Você pode usar o seletor de data para alterar a janela de tempo dos dados que está monitorando. As seguintes métricas estão disponíveis nesta visão geral:
- Contagem total de solicitações: o número total de solicitações enviadas para a implantação durante a janela de tempo selecionada.
- Contagem total de tokens: o número total de tokens usados pela implantação durante a janela de tempo selecionada.
- Contagem de tokens de prompt: o número de tokens de prompt usados pela implantação durante a janela de tempo selecionada.
- Contagem de tokens de conclusão: o número de tokens de conclusão usados pela implantação durante a janela de tempo selecionada.
Exiba as métricas na guia Uso de token (essa guia é selecionada por padrão). Aqui, você pode visualizar o uso de token do seu aplicativo ao longo do tempo. Você também pode visualizar a distribuição de tokens de prompt e conclusão ao longo do tempo. Você pode alterar o escopo da Linha de tendência para monitorar todos os tokens em todo o aplicativo ou o uso do token para uma implantação específica (por exemplo, gpt-4) usada em seu aplicativo.
Vá para a guia Qualidade de geração para monitorar a qualidade do seu aplicativo ao longo do tempo. As seguintes métricas são mostradas no gráfico de tempo:
- Contagem de violações: A contagem de violações para uma determinada métrica (por exemplo, Fluência) é a soma das violações ao longo da janela de tempo selecionada. Uma violação ocorre para uma métrica quando as métricas são calculadas (o padrão é diário) se o valor computado para a métrica cair abaixo do valor limite definido.
- Pontuação média: a pontuação média de uma determinada métrica (por exemplo, Fluência) é a soma das pontuações de todas as instâncias (ou solicitações) dividida pelo número de instâncias (ou solicitações) ao longo da janela de tempo selecionada.
O cartão de violações de qualidade de geração mostra a taxa de violação ao longo da janela de tempo selecionada. A taxa de violação é o número de violações dividido pelo número total de possíveis violações. Você pode ajustar os limites para métricas nas configurações. Por padrão, as métricas são calculadas diariamente; Esta frequência também pode ser ajustada nas configurações.
Na guia Monitoramento (Visualização), você também pode exibir uma tabela abrangente de todas as solicitações de amostra enviadas para a implantação durante a janela de tempo selecionada.
Nota
O monitoramento define a taxa de amostragem padrão em 10%. Isso significa que, se 100 solicitações forem enviadas para sua implantação, 10 serão amostradas e usadas para calcular as métricas de qualidade de geração. Você pode ajustar a taxa de amostragem nas configurações.
Selecione o botão Rastrear no lado direito de uma linha na tabela para ver os detalhes de rastreamento de uma determinada solicitação. Esta vista fornece detalhes de rastreio abrangentes para o pedido à sua aplicação.
Feche o modo de exibição Rastreamento.
Vá para a guia Operacional para visualizar as métricas operacionais para a implantação quase em tempo real. Suportamos as seguintes métricas operacionais:
- Contagem de pedidos
- Latência
- Taxa de erro
Os resultados na guia Monitoramento (visualização) de sua implantação fornecem informações para ajudá-lo a melhorar proativamente o desempenho do seu aplicativo de fluxo de prompt.
Configuração avançada de monitoramento com SDK v2
O monitoramento também suporta opções de configuração avançadas com o SDK v2. Os seguintes cenários são suportados:
Habilitar o monitoramento para uso de token
Se você estiver interessado apenas em habilitar o monitoramento de uso de token para seu aplicativo de fluxo de prompt implantado, poderá adaptar o seguinte script ao seu cenário:
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
MonitorSchedule,
CronTrigger,
MonitorDefinition,
ServerlessSparkCompute,
MonitoringTarget,
AlertNotification,
GenerationTokenStatisticsSignal,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext
# Authentication package
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
# These variables can be renamed but it is not necessary
monitor_name ="gen_ai_monitor_tokens"
defaulttokenstatisticssignalname ="token-usage-signal"
# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]
ml_client = MLClient(
credential=credential,
subscription_id=subscription_id,
resource_group_name=resource_group,
workspace_name=project_name,
)
spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)
# Create an instance of token statistic signal
token_statistic_signal = GenerationTokenStatisticsSignal()
monitoring_signals = {
defaulttokenstatisticssignalname: token_statistic_signal,
}
monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)
model_monitor = MonitorSchedule(
name = monitor_name,
trigger=trigger_schedule,
create_monitor=monitor_settings
)
ml_client.schedules.begin_create_or_update(model_monitor)
Habilite o monitoramento da qualidade da geração
Se você estiver interessado apenas em habilitar o monitoramento de qualidade de geração para seu aplicativo de fluxo de prompt implantado, poderá adaptar o seguinte script ao seu cenário:
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
MonitorSchedule,
CronTrigger,
MonitorDefinition,
ServerlessSparkCompute,
MonitoringTarget,
AlertNotification,
GenerationSafetyQualityMonitoringMetricThreshold,
GenerationSafetyQualitySignal,
BaselineDataRange,
LlmData,
)
from azure.ai.ml.entities._inputs_outputs import Input
from azure.ai.ml.constants import MonitorTargetTasks, MonitorDatasetContext
# Authentication package
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
# Update your azure resources details
subscription_id = "INSERT YOUR SUBSCRIPTION ID"
resource_group = "INSERT YOUR RESOURCE GROUP NAME"
project_name = "INSERT YOUR PROJECT NAME" # This is the same as your Azure AI Foundry project name
endpoint_name = "INSERT YOUR ENDPOINT NAME" # This is your deployment name without the suffix (e.g., deployment is "contoso-chatbot-1", endpoint is "contoso-chatbot")
deployment_name = "INSERT YOUR DEPLOYMENT NAME"
aoai_deployment_name ="INSERT YOUR AOAI DEPLOYMENT NAME"
aoai_connection_name = "INSERT YOUR AOAI CONNECTION NAME"
# These variables can be renamed but it is not necessary
app_trace_name = "app_traces"
app_trace_Version = "1"
monitor_name ="gen_ai_monitor_generation_quality"
defaultgsqsignalname ="gsq-signal"
# Determine the frequency to run the monitor, and the emails to recieve email alerts
trigger_schedule = CronTrigger(expression="15 10 * * *")
notification_emails_list = ["test@example.com", "def@example.com"]
ml_client = MLClient(
credential=credential,
subscription_id=subscription_id,
resource_group_name=resource_group,
workspace_name=project_name,
)
spark_compute = ServerlessSparkCompute(instance_type="standard_e4s_v3", runtime_version="3.3")
monitoring_target = MonitoringTarget(
ml_task=MonitorTargetTasks.QUESTION_ANSWERING,
endpoint_deployment_id=f"azureml:{endpoint_name}:{deployment_name}",
)
# Set thresholds for passing rate (0.7 = 70%)
aggregated_groundedness_pass_rate = 0.7
aggregated_relevance_pass_rate = 0.7
aggregated_coherence_pass_rate = 0.7
aggregated_fluency_pass_rate = 0.7
# Create an instance of gsq signal
generation_quality_thresholds = GenerationSafetyQualityMonitoringMetricThreshold(
groundedness = {"aggregated_groundedness_pass_rate": aggregated_groundedness_pass_rate},
relevance={"aggregated_relevance_pass_rate": aggregated_relevance_pass_rate},
coherence={"aggregated_coherence_pass_rate": aggregated_coherence_pass_rate},
fluency={"aggregated_fluency_pass_rate": aggregated_fluency_pass_rate},
)
input_data = Input(
type="uri_folder",
path=f"{endpoint_name}-{deployment_name}-{app_trace_name}:{app_trace_Version}",
)
data_window = BaselineDataRange(lookback_window_size="P7D", lookback_window_offset="P0D")
production_data = LlmData(
data_column_names={"prompt_column": "question", "completion_column": "answer", "context_column": "context"},
input_data=input_data,
data_window=data_window,
)
gsq_signal = GenerationSafetyQualitySignal(
connection_id=f"/subscriptions/{subscription_id}/resourceGroups/{resource_group}/providers/Microsoft.MachineLearningServices/workspaces/{project_name}/connections/{aoai_connection_name}",
metric_thresholds=generation_quality_thresholds,
production_data=[production_data],
sampling_rate=1.0,
properties={
"aoai_deployment_name": aoai_deployment_name,
"enable_action_analyzer": "false",
"azureml.modelmonitor.gsq_thresholds": '[{"metricName":"average_fluency","threshold":{"value":4}},{"metricName":"average_coherence","threshold":{"value":4}}]',
},
)
monitoring_signals = {
defaultgsqsignalname: gsq_signal,
}
monitor_settings = MonitorDefinition(
compute=spark_compute,
monitoring_target=monitoring_target,
monitoring_signals = monitoring_signals,
alert_notification=AlertNotification(emails=notification_emails_list),
)
model_monitor = MonitorSchedule(
name = monitor_name,
trigger=trigger_schedule,
create_monitor=monitor_settings
)
ml_client.schedules.begin_create_or_update(model_monitor)
Depois de criar seu monitor a partir do SDK, você pode consumir os resultados do monitoramento no portal do Azure AI Foundry.
Conteúdos relacionados
- Saiba mais sobre o que você pode fazer no Azure AI Foundry.
- Obtenha respostas às perguntas frequentes no artigo de perguntas frequentes da IA do Azure.