Compartilhar via


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.

Captura de tela do rastreamento de dados nos insights do aplicativo.

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.

Captura de tela de habilitar métricas multidimensionais.

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.

Captura de tela das métricas do ponto de extremidade do fluxo de prompt.

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.

Captura de tela de comentários e dados de rastreamento de uma solicitação 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.

Próximas etapas