Partilhar via


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

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.

Depois de implantar um APP de IA generativa em produção, você pode querer 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 coletar comentários do usuário durante o tempo de inferência da implantação do fluxo.

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.

Pré-requisitos

  • A CLI do Azure e a extensão do Azure Machine Learning para a CLI do Azure.
  • Um projeto AI Studio. Se ainda não tem um projeto, pode criar um aqui.
  • Um Application Insights. Se você ainda não tiver um recurso do Application Insights, poderá criar um aqui.
  • Os controles de acesso baseados em função do Azure são usados para conceder 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, consulte Controle de acesso baseado em função no Azure AI Studio.

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 inferência em tempo real 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 do Docker, cluster Kubernetes e muito mais.

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 na etapa Configurações avançadas>de implantação no assistente de implantação, de modo que os dados de rastreamento e as métricas do sistema são coletados para o projeto vinculado ao Application Insights.

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

app_insights_enabled: true

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.

environment_variables:
  APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>

Nota

Se você definir app_insights_enabled: true apenas, mas seu projeto não tiver um recurso vinculado do Application Insights, 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 de rastreamento e as métricas serão enviados para o projeto vinculado aos insights do aplicativo. 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. Você pode aprender mais a partir daqui em traçados. 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.

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.

  1. 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.
  2. 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.

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 respeitará o contexto de rastreamento definido no cabeçalho da solicitação e o usará como o contexto de extensão pai da solicitação. Você pode aproveitar a funcionalidade de rastreamento distribuído para correlacionar o rastreamento de feedback 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_history, 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.

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, 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 sua própria lógica de processamento de extensão e seu próprio destino persistente de rastreamento.