Partilhar via


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

Nota

Esta funcionalidade está atualmente em pré-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.

Depois de implantar um APP de IA Generativa em produção, os desenvolvedores de APP procuram melhorar sua compreensão e otimizar o desempenho. Os dados de rastreamento para cada solicitação, as métricas agregadas e o feedback do usuário desempenham funções críticas.

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, consulte Instalar, configurar e usar a CLI (v2).
  • Uma área de trabalho do Azure Machine Learning. Se você não tiver um, use as etapas no artigo Guia de início rápido: criar recursos do espaço de trabalho para criar um.
  • Um Application Insights. Normalmente, um espaço de trabalho de aprendizado de máquina tem um Application Insights vinculado padrão. Se quiser usar um novo, você pode criar um recurso do Application Insights.
  • Saiba como criar e testar um fluxo no fluxo de prompt.
  • Ter noções básicas sobre os pontos finais online geridos. Os pontos de extremidade online gerenciados funcionam com poderosas máquinas de CPU e GPU no Azure de uma maneira escalá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 online e implantações para inferência em tempo real.
  • Os controlos de acesso baseado em funções (RBAC do Azure) são utilizados para conceder acesso às operações no Azure Machine Learning. Para executar as etapas neste artigo, sua conta de usuário deve receber a função de proprietário ou colaborador para o espaço de trabalho do Azure Machine Learning ou uma função personalizada que permita "Microsoft.MachineLearningServices/workspaces/onlineEndpoints/". Se você usar o studio 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 o acesso a um espaço de trabalho do Azure Machine Learning.

Implantar um fluxo para inferência em tempo real

Depois de testar seu fluxo corretamente, seja um fluxo flexível ou um fluxo DAG, você pode implantar o fluxo na produção. Neste artigo, usamos implantar um fluxo para pontos de extremidade online gerenciados do Azure Machine Learning como exemplo. Para fluxos flex, você precisa preparar o flow.flex.yaml arquivo em vez de flow.dag.yaml.

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

Nota

Você precisa usar a imagem base de fluxo de prompt mais recente para implantar o fluxo, de modo que ele ofereça suporte à API de rastreamento e coleta de comentários.

Habilite, rastreie e colete métricas do sistema para sua implantação

Se você estiver usando a interface do usuário do estúdio para implantar, poderá ativar o diagnóstico do Application Insights em Configurações avançadas -> etapa de implantação no assistente de implantação, de que forma os dados de rastreamento e as métricas do sistema são coletados para o Application Insights vinculado ao espaço de trabalho.

Se você estiver usando SDK ou CLI, poderá adicionar uma propriedade app_insights_enabled: true no arquivo yaml de implantação que coletará dados para o Application Insights vinculado ao espaço de trabalho. Você também pode especificar outros Application Insights por uma variável APPLICATIONINSIGHTS_CONNECTION_STRING de ambiente no arquivo yaml de implantação da seguinte maneira. Você pode encontrar a cadeia de conexão do seu Application Insights na página 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>

Nota

Se você definir app_insights_enabled: true apenas, mas seu espaço de trabalho não tiver um Application Insights vinculado, sua implantação não falhará, mas não haverá dados coletados.

Se você especificar ambas app_insights_enabled: true e a variável de ambiente acima ao mesmo tempo, os dados e as métricas de rastreamento serão enviados para o Application Insights vinculado ao espaço de trabalho. Portanto, se você quiser especificar um Application Insights diferente, você só precisa manter a variável de ambiente.

Se você implantar em outras plataformas, também poderá usar a variável APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> de ambiente para coletar dados de rastreamento e métricas para speicifed 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. Pode incluir dados sobre chamadas de função, valores 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 é crucial para depurar e entender um aplicativo. Para saber mais, consulte Rastreamentos OpenTelemetry em rastreamentos. Os dados de rastreamento seguem a especificação OpenTelemetry .

Você pode exibir o rastreamento detalhado no Application Insights especificado. A captura de tela a seguir mostra um exemplo de um evento de um fluxo implantado contendo vários nós. No Application Insights -> Investigar -> Pesquisa de transações, você pode selecionar cada nó para exibir seu rastreamento detalhado.

Os eventos do tipo Dependência registram chamadas de suas implantações. O nome desse evento é o nome da pasta de fluxo. Saiba mais sobre a pesquisa e o diagnóstico de transações no Application Insights.

Captura de tela de dados de rastreamento em insights de aplicativos.

Exibir métricas do sistema no Application Insights

Nome das métricas Type Dimensões Description
token_consumption counter - fluxo
- nó
- llm_engine
- token_type: prompt_tokens: Tokens de entrada da API LLM; completion_tokens: Tokens de resposta da API LLM; total_tokens = prompt_tokens + completion tokens
Métricas de consumo de token OpenAI
flow_latency histograma fluxo, response_code, streaming, response_type custo de execução da solicitação, response_type significa se é full/firstbyte/lastbyte
flow_request counter fluxo, response_code, exceção, streaming contagem de solicitações de fluxo
node_latency histograma fluxo, nó run_status custo de execução do nó
node_request counter fluxo, nó, exceção, run_status contagem de execução de nó
rpc_latency histograma fluxo, nó api_call Custo RPC
rpc_request counter fluxo, nó, api_call, exceção Contagem de RPC
flow_streaming_response_duration histograma fluxo Custo de envio de resposta de streaming, desde o envio do primeiro byte até o último byte de envio

Você pode encontrar o Application Insights padrão do espaço de trabalho na página de visão geral do seu espaço de trabalho no portal do Azure.

Abra o Application Insights e selecione Uso e custos estimados na navegação à esquerda. Selecione Métricas personalizadas (Visualização), selecione Com dimensões e salve a alteração.

Captura de tela de habilitar métricas multidimensionais.

Selecione a guia Métricas na navegação à esquerda. Selecione as métricas padrão do promptflow no Namespace de Métrica e você pode explorar as métricas da lista suspensa Métrica com diferentes métodos de agregação.

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

Coletar comentários e enviar para o Application Insights

O serviço de fluxo de prompt fornece uma nova /feedback API para ajudar o cliente a coletar o feedback, a carga útil do feedback pode ser qualquer dado de formato json, o PF serve apenas ajuda o cliente a salvar os dados de feedback em uma extensão de rastreamento. Os dados serão salvos no cliente de destino do exportador de rastreamento configurado. Ele também suporta a propagação de contexto de rastreamento padrão OpenTelemetry dizendo que respeita o contexto de rastreamento definido no cabeçalho da solicitação e usá-lo como o contexto de extensão pai 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 bate-papo.

A seguir está o código de exemplo mostrando como pontuar um rastreamento habilitado para ponto de extremidade gerenciado implantado e enviar o feedback para a mesma extensão de rastreamento de solicitação de pontuação. O fluxo tem entradas question e chat_hisotry, e saída answer. Depois de pontuar o ponto de extremidade, coletamos um feedback e enviamos para o Application Insights especificado ao implantar o fluxo. Você precisa preencher o api_key valor 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ê pode 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 OpenTelemetry personalizado

Em alguns casos, convém exportar os dados de rastreamento para o serviço de coletor OTel implantado, ativado pela configuração "OTEL_EXPORTER_OTLP_ENDPOINT". Use este exportador quando quiser personalizar nossa própria lógica de processamento de span e seu próprio destino persistente de rastreamento.

Próximos passos