Compartilhar via


Habilitar o rastreamento e coletar comentários para uma implantação de fluxo

Importante

Alguns dos recursos descritos nesse artigo podem estar disponíveis apenas na versão prévia. 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.

Depois de implantar um aplicativo de IA generativa na produção, convém aprimorar 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 coletar 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.
  • Um projeto do Estúdio de IA. Se ainda não tiver um projeto, crie um aqui.
  • Um Application Insights. Se você ainda não tem um recurso do Application Insights, crie um aqui.
  • O 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, você deve ter permissões de Proprietário ou Colaborador no grupo de recursos selecionado. Para obter mais informações, confira Controle de acesso baseado em função no Estúdio de IA do Azure.

Implantar um fluxo para inferência em tempo real

Depois de testar o fluxo corretamente, um fluxo flexível ou um fluxo DAG, você poderá implantar o fluxo na produção. Neste artigo, usamos Implantar um fluxo de inferência em tempo real como exemplo. Para fluxos flexíveis, você precisa preparar o arquivo flow.flex.yaml em vez de flow.dag.yaml.

Você também pode implantar em outras plataformas, como contêiner do Docker, cluster do Kubernetes e mais.

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

Se você estiver usando a interface do usuário do Estúdio para implantar, poderá ativar os diagnósticos do Application Insights em Configurações avançadas>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 projeto vinculado ao Application Insights.

Se estiver usando o SDK ou a CLI, você poderá adicionar uma propriedade app_insights_enabled: true no arquivo yaml de implantação que coleta dados para o projeto vinculado aos insights do aplicativo.

app_insights_enabled: true

Você também pode 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.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Observação

Se você apenas definir app_insights_enabled: true, mas seu projeto não tiver um recurso vinculado do Application Insights, a implantação não falhará, mas não haverá coleta de dados.

Se você especificar 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 projeto vinculado aos insights do aplicativo. 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. Saiba mais sobre os rastreamentos aqui. 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 flow,response_code,streaming,response_type custo de execução da solicitação, o response_type significa se ele é full/firstbyte/lastbyte
flow_request contador flow,response_code,exception,streaming número de solicitações de fluxo
node_latency histogram flow,node,run_status custo de execução do nó
node_request contador flow,node,exception,run_status contagem de execução de nó
rpc_latency histogram flow,node,api_call custo de rpc
rpc_request contador flow,node,api_call,exception 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.

  1. 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.
  2. 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 respeitará o contexto de rastreamento definido no cabeçalho da solicitação e o usará como o contexto de abrangência principal da solicitação. Você pode 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_history, e saída answer. Depois de pontuar o ponto de extremidade, coletamos um comentário e enviamos para o Application Insights especificado ao implantar o fluxo.

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.
data = {
    "question": "hello",
    "chat_history": []
}

body = str.encode(json.dumps(data))

url = 'https://basic-chat-endpoint-0506.eastus.inference.ml.azure.com/score'
feedback_url = 'https://basic-chat-endpoint-0506.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ê pode exibir o rastreamento da solicitação junto com comentários no Application Insights.

Uso avançado: exportar rastreamento para o serviço de coletor OpenTelemetry personalizado

Em alguns casos, talvez você queira exportar os dados de rastreamento para o serviço de coletor OTel implantado, habilitado pela configuração "OTEL_EXPORTER_OTLP_ENDPOINT". Use esse exportador quando quiser personalizar sua própria lógica de processamento de intervalo e seu próprio destino persistente de rastreamento.