Habilitar rastreamento e coletar comentários para uma implantação de fluxo (versão prévia)
Observação
Esse recurso está atualmente em visualização pública. Essa versão prévia é fornecida sem um contrato de nível de serviço e não recomendamos isso para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.
Após implantar um APLICATIVO de IA Generativo em produção, os desenvolvedores de APLICATIVOS buscam melhorar sua compreensão e otimizar o desempenho. Os dados de rastreamento de cada solicitação, as métricas agregadas e os comentários do usuário desempenham papéis fundamentais.
Neste artigo, você aprenderá a habilitar o rastreamento, coletar métricas agregadas e comentários do usuário durante o tempo de inferência da implantação do fluxo.
Pré-requisitos
- A CLI do Azure e a extensão do Azure Machine Learning para a CLI do Azure. Para obter mais informações, confira Instalar, configurar e usar a CLI (v2).
- Um Workspace do Azure Machine Learning. Se você não tiver um, use as etapas do artigo Início Rápido: criar recursos de workspace para criar.
- Um Application Insights. Normalmente, um espaço de trabalho de aprendizado de máquina tem um Application Insights vinculado padrão. Caso queira usar um novo, poderá criar um recurso do Application Insights.
- Saiba como criar e testar um fluxo no prompt flow.
- Reconhecimento de noções básicas sobre pontos de extremidade online gerenciados. Os pontos de extremidade online gerenciados funcionam com computadores avançados de CPU e GPU no Azure de forma escalonável e totalmente gerenciada que libera você da sobrecarga de configurar e gerenciar a infraestrutura de implantação subjacente. Para obter mais informações sobre pontos de extremidade online gerenciados, consulte Pontos de extremidade e implantações online para inferência em tempo real.
- O RBAC do Azure (controle de acesso baseado em função) do Azure é usado para permitir acesso a operações no Azure Machine Learning. Para executar as etapas neste artigo, sua conta de usuário deve ser atribuída com a função de proprietário ou colaborador para o workspace do Azure Machine Learning ou uma função personalizada que permita Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*. Caso use o estúdio para criar/gerenciar pontos de extremidade/implantações online, precisará de outra permissão “Microsoft.Resources/deployments/write” do proprietário do grupo de recursos. Para obter mais informações, consulte Gerenciar acesso a um workspace do Azure Machine Learning.
Implantar um fluxo para inferência em tempo real
Após testar o fluxo corretamente, um fluxo flexível ou um fluxo DAG, você poderá implantar o fluxo na produção. Neste artigo, usamos a implantação de um fluxo para pontos de extremidade online gerenciados do Azure Machine Learning como exemplo. Para fluxos flexíveis, você precisará preparar o arquivo flow.flex.yaml
em vez de flow.dag.yaml
.
Também é possível implantar em outras plataformas, como contêiner do Docker, cluster do Kubernetes, etc..
Observação
É necessário usar a imagem base do prompt flow mais recente para implantar o fluxo, para que ele dê suporte à API de coleta de rastreamento e comentários.
Habilitar rastreamento e coletar métricas do sistema para sua implantação
Caso esteja usando a interface do usuário do Estúdio para implantar, poderá ativar os diagnósticos do Application Insights em Configurações avançada – >Etapa de implantação no assistente de implantação, de modo que os dados de rastreamento e as métricas do sistema sejam coletados no espaço de trabalho vinculado ao Application Insights.
Caso esteja usando o SDK ou a CLI, poderá adicionar uma propriedade app_insights_enabled: true
no arquivo yaml de implantação que coletará dados para o espaço de trabalho vinculado ao Application Insights. Também é possível especificar outros Application Insights por meio de uma variável de ambiente APPLICATIONINSIGHTS_CONNECTION_STRING
no arquivo yaml de implantação da seguinte maneira. É possível localizar sua cadeia de conexão do Application Insights na página de visão geral no portal do Azure.
# below is the property in deployment yaml
# app_insights_enabled: true
# you can also use the environment variable
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Observação
Caso apenas definir app_insights_enabled: true
, mas seu espaço de trabalho não tiver um recurso vinculado do Application Insights, a implantação não falhará, mas não haverá coleta de dados.
Caso especifique app_insights_enabled: true
e a variável de ambiente acima ao mesmo tempo, os dados de rastreamento e as métricas serão enviados ao espaço de trabalho vinculado aos Application Insights. Portanto, se você quiser especificar um Application Insights diferente, só precisará manter a variável de ambiente.
Se você implantar em outras plataformas, também poderá usar a variável de ambiente APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
para coletar dados de rastreamento e métricas para o Application Insights.
Exibir dados de rastreamento no Application Insights
Os rastreamentos registram eventos específicos ou o estado de um aplicativo durante a execução. Ele pode incluir dados sobre chamadas de função, valores de variáveis, eventos do sistema e muito mais. Os rastreamentos ajudam a dividir os componentes de um aplicativo em entradas e saídas discretas, o que é fundamental para a depuração e a compreensão de um aplicativo. Para saber mais, confira rastreamentos do OpenTelemetry em rastreamentos. Os dados de rastreamento seguem a especificação do OpenTelemetry.
Você poderá exibir o rastreamento detalhado no Application Insights especificado. A captura de tela a seguir mostra um exemplo de um evento de um fluxo implantado que contém vários nós. Em Application Insights -> Investigar -> Pesquisa de transação, você poderá selecionar cada nó para exibir seu rastreamento detalhado.
Os eventos do tipo Dependência registram chamadas das suas implantações. O nome desse evento é o nome da pasta de fluxo. Saiba mais sobre Pesquisa e diagnóstico de transações no Application Insights.
Exibir métricas do sistema no Application Insights
Nome da Métrica | Tipo | Dimensões | Descrição |
---|---|---|---|
token_consumption | contador | - fluxo — nó — llm_engine – token_type: prompt_tokens : tokens de entrada da API de LLM; completion_tokens : tokens de resposta da API de LLM ; total_tokens = prompt_tokens + completion tokens |
Métricas de consumo do token do OpenAI |
flow_latency | histogram | fluxo,response_code,streaming,response_type | custo de execução da solicitação, o response_type significa se ele é full/firstbyte/lastbyte |
flow_request | contador | fluxo, código_resposta, exceção, streaming | número de solicitações de fluxo |
node_latency | histogram | fluxo, nó, run_status | custo de execução do nó |
node_request | contador | fluxo, nó, exceção, run_status | contagem de execução de nó |
rpc_latency | histogram | fluxo, nó, api_call | custo de rpc |
rpc_request | contador | fluxo, nó, api_call, exceção | número de rpcs |
flow_streaming_response_duration | histogram | fluxo | custo de envio da resposta de streaming, desde o envio do primeiro byte até o envio do último byte |
É possível encontrar o Application Insights padrão do espaço de trabalho na página de visão geral do espaço de trabalho no portal do Azure.
Abra o Application Insights e selecione Uso e custos estimados no painel de navegação esquerdo. Selecione Métricas personalizadas (Versão Prévia), selecione Com dimensões e salve a alteração.
Selecione a guia Métricas no painel de navegação esquerdo. Selecione as métricas padrão do fluxo de prompts no Namespace da Métrica e você poderá explorar as métricas, na lista suspensa Métrica, com diferentes métodos de agregação.
Coletar comentários e enviar para o Application Insights
O serviço de prompt flow fornece uma nova API /feedback
para ajudar o cliente a coletar os comentários; o conteúdo dos comentários pode ser qualquer dado em formato json; o serviço do PF apenas ajuda o cliente a salvar os dados de comentários em um intervalo de rastreamento. Os dados serão salvos no cliente de destino do exportador de rastreamento configurado. Ele também dá suporte à propagação do contexto de rastreamento padrão do OpenTelemetry, dizendo que respeita o contexto de rastreamento definido no cabeçalho da solicitação e o usa como o contexto de abrangência principal da solicitação. É possível aproveitar a funcionalidade de rastreamento distribuído para correlacionar o Rastreamento de comentários ao rastreamento de solicitação de chat.
Veja a seguir o código de exemplo mostrando como pontuar um rastreamento habilitado para ponto de extremidade gerenciado implantado e enviar os comentários para o mesmo intervalo de rastreamento da solicitação de pontuação. O fluxo tem entradas question
e chat_hisotry
, e saída answer
. Após pontuar o ponto de extremidade, coletamos um comentário e enviamos para o Application Insights especificado ao implantar o fluxo. Você precisará preencher o valor api_key
ou modificar o código de acordo com seu caso de uso.
import urllib.request
import json
import os
import ssl
from opentelemetry import trace, context
from opentelemetry.baggage.propagation import W3CBaggagePropagator
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
from opentelemetry.sdk.trace import TracerProvider
# Initialize your tracer
tracer = trace.get_tracer("my.genai.tracer")
trace.set_tracer_provider(TracerProvider())
# Request data goes here
# The example below assumes JSON formatting which may be updated
# depending on the format your endpoint expects.
# More information can be found here:
# https://docs.microsoft.com/azure/machine-learning/how-to-deploy-advanced-entry-script
data = {
"question": "hello",
"chat_history": []
}
body = str.encode(json.dumps(data))
url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint.eastus.inference.ml.azure.com/feedback'
# Replace this with the primary/secondary key, AMLToken, or Microsoft Entra ID token for the endpoint
api_key = ''
if not api_key:
raise Exception("A key should be provided to invoke the endpoint")
# The azureml-model-deployment header will force the request to go to a specific deployment.
# Remove this header to have the request observe the endpoint traffic rules
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key), 'azureml-model-deployment': 'basic-chat-deployment' }
try:
with tracer.start_as_current_span('genai-request') as span:
ctx = context.get_current()
TraceContextTextMapPropagator().inject(headers, ctx)
print(headers)
print(ctx)
req = urllib.request.Request(url, body, headers)
response = urllib.request.urlopen(req)
result = response.read()
print(result)
# Now you can process the answer and collect feedback
feedback = "thumbdown" # Example feedback (modify as needed)
# Make another request to save the feedback
feedback_body = str.encode(json.dumps(feedback))
feedback_req = urllib.request.Request(feedback_url, feedback_body, headers)
urllib.request.urlopen(feedback_req)
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
print(error.info())
print(error.read().decode("utf8", 'ignore'))
Você poderá exibir o rastreamento da solicitação junto com comentários no Application Insights.
Uso avançado: exportar rastreamento para o serviço de coletor do OpenTelemetry personalizado
Em alguns casos, talvez você queira exportar os dados de rastreamento para o serviço de coletor do OTel implantado, habilitado pela configuração "OTEL_EXPORTER_OTLP_ENDPOINT". Use esse exportador quando quiser personalizar nossa própria lógica de processamento de intervalo e seu próprio destino persistente de rastreamento.