Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se apenas a:Portal Foundry (clássico). Este artigo não está disponível para o novo portal da Foundry.
Saiba mais sobre o novo portal.
Nota
Os links neste artigo podem abrir conteúdo na nova documentação do Microsoft Foundry em vez da documentação do Foundry (clássico) que está a ver agora.
Importante
Os itens marcados (pré-visualização) neste artigo encontram-se atualmente em pré-visualização pública. Esta pré-visualização é fornecida sem um acordo de nível de serviço, e não a recomendamos para cargas de trabalho em produção. Certas funcionalidades podem não ser suportadas ou podem ter capacidades limitadas. Para mais informações, consulte Termos de Utilização Suplementares para Microsoft Azure Pré-visualizações.
Depois de implementar uma aplicação de IA generativa em produção, poderá querer melhorar a sua compreensão e otimizar o desempenho. Os dados de rastreamento para cada pedido, métricas agregadas e feedback dos utilizadores desempenham papéis críticos.
Neste artigo, aprende a ativar o rastreio, recolher métricas agregadas e recolher feedback dos utilizadores durante o tempo de inferência da implementação do seu fluxo.
Nota
Para uma forma melhorada de realizar monitorização contínua de aplicações implementadas (para além do fluxo de prompts), considere usar Azure AI online evaluation.
Pré-requisitos
Importante
Este artigo fornece suporte legado para projetos baseados em hubs. Não funciona para projetos da Foundry. Veja : Como sei que tipo de projeto tenho?
Nota de compatibilidade SDK: Exemplos de código requerem uma versão específica do Microsoft Foundry SDK. Se encontrar problemas de compatibilidade, considere migrar de um projeto baseado em hub para um projeto Foundry.
- Uma conta no Azure com uma subscrição ativa. Se não tiveres uma, cria uma conta Azure free, que inclui uma subscrição de teste gratuita.
- Se não tiveres um, cria um projeto baseado em hubs.
- A CLI do Azure e a extensão Azure Machine Learning para a CLI do Azure.
- Um projeto da Microsoft Foundry. Se ainda não tiver um projeto, pode criar um.
- Um recurso do Application Insights. Se ainda não tiver um recurso de Insights de Aplicação, pode criar um.
- Os controlos de acesso baseados em papéis do Azure são usados para conceder acesso a operações no Azure Machine Learning. Para realizar os passos deste artigo, deve ter permissões de Proprietário ou Contribuinte no grupo de recursos selecionado. Para mais informações, consulte Controlo de acesso baseado em funções no portal Foundry.
Implementar um fluxo para inferência em tempo real
Depois de testar o seu fluxo corretamente (seja um fluxo flexível ou um fluxo DAG), pode implementar o fluxo em produção. Neste artigo, usamos Implementar um fluxo para inferência em tempo real como o exemplo. Para fluxos flexíveis, é necessário preparar o flow.flex.yaml ficheiro em vez de flow.dag.yaml.
Também pode implementar para outras plataformas, como o contentor Docker e o cluster Kubernetes.
Utilize a imagem base de fluxo de prompt mais recente para implementar o fluxo e, assim, suportar a API de rastreamento e coleta de feedback.
Ative o rastreio e recolha de métricas do sistema para a sua implementação
Se estiver a usar o portal Foundry para implementar, selecione Deployment>Application Insights diagnostics>Definições avançadas no assistente de implementação. Ao utilizar este método, recolhe dados de rastreamento e métricas do sistema para o projeto ligadas ao Application Insights.
Se estiveres a usar o SDK ou a CLI, adiciona a app_insights_enabled: true propriedade no ficheiro .yaml de implementação para recolher dados no projeto ligado ao Application Insights.
app_insights_enabled: true
Também pode especificar outros insights de aplicação pela variável de ambiente APPLICATIONINSIGHTS_CONNECTION_STRING no ficheiro .yaml de implementação. Pode encontrar a cadeia de conexão para o Application Insights na página Visão Geral do portal Azure.
environment_variables:
APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string>
Nota
Se definires apenas app_insights_enabled: true mas o teu projeto não tiver um recurso ligado do Application Insights, a tua implementação não falha mas nenhum dado é recolhido.
Se especificar tanto app_insights_enabled: true como a variável de ambiente anterior ao mesmo tempo, os dados de rastreio e as métricas são enviados para o projeto ligado ao Application Insights. Se quiseres especificar diferentes insights de aplicação, mantém apenas a variável de ambiente.
Se implementares para outras plataformas, também podes usar a variável APPLICATIONINSIGHTS_CONNECTION_STRING: <connection_string> de ambiente para recolher dados de rastreio e métricas para os insights da aplicação que especificaste.
Ver dados de rastreio no Application Insights
Os rastreios registam eventos específicos ou o estado de uma aplicação durante a execução. Podem incluir dados sobre chamadas de funções, valores de variáveis e eventos do sistema. Os rastros ajudam a decompor os componentes de uma aplicação em entradas e saídas discretas. Este processo é crucial para depurar e compreender uma aplicação. Para saber mais sobre os traços, consulte este site. Os dados de rastreamento seguem a especificação OpenTelemetry.
Pode ver o rastreio detalhado nos insights da aplicação que especificou. A captura de ecrã seguinte mostra um exemplo de um evento de um fluxo implementado que contém múltiplos nós. Selecione Application Insights>Investigar>Pesquisa de Transação, e depois selecione cada nó para ver os detalhes do rastreamento.
O evento de tipo Dependência regista chamadas das suas implementações. O nome do evento é o nome da pasta do fluxo. Para saber mais, consulte Pesquisa e diagnóstico de Transações em Application Insights.
Consulte métricas do sistema no Application Insights
| Nome métrico | Tipo | Dimensões | Descrição |
|---|---|---|---|
token_consumption |
contador | - flow - node- llm_engine- token_type: prompt_tokens: Tokens de entrada da API LLM; completion_tokens: Tokens de resposta API LLM; total_tokens = prompt_tokens + completion tokens |
Métricas de consumo de tokens OpenAI. |
flow_latency |
histograma |
flow, response_code, streaming, response_type |
O custo de execução do pedido, response_type, significa se está cheio, primeiro byte ou último byte. |
flow_request |
contador |
flow, response_code, exception, streaming |
Contagem de pedidos de fluxo. |
node_latency |
histograma |
flow, node, run_status |
O custo de execução do nó. |
node_request |
contador |
flow, node, exception, run_status |
A contagem de execução dos nós. |
rpc_latency |
histograma |
flow, node, api_call |
O custo da Chamada de Procedimento Remoto. |
rpc_request |
contador |
flow, node, api_call, exception |
A contagem de chamadas de procedimento remoto. |
flow_streaming_response_duration |
histograma | flow |
O custo de envio da resposta em streaming, variando desde enviar o primeiro byte até enviar o último byte. |
Pode encontrar as métricas padrão Application Insights do workspace na sua página de visão geral do espaço de trabalho no portal Azure.
- Abra o Application Insights e selecione Utilização e custos estimados no painel esquerdo. Selecione métricas personalizadas (Pré-visualização)>Com dimensões e guarde a alteração.
- Selecione o separador Métricas no painel esquerdo. A partir do Espaço de Nomes de Métricas, selecione métricas padrão de PromptFlow. Pode explorar métricas a partir da lista suspensa Métricas utilizando diferentes métodos de agregação.
Recolha feedback e envie para a Application Insights
O serviço de fluxo de prompts fornece uma nova /feedback API para ajudar os clientes a recolher o feedback. O volume de dados de feedback pode ser qualquer formato JSON. O serviço rápido de fluxo ajuda o cliente a guardar os dados de feedback num intervalo de traço. Os dados são guardados no destino do exportador de rastreamento configurado pelo cliente. O serviço de fluxo por prompt também suporta a propagação padrão do contexto de traço OpenTelemetry. Respeita o contexto de rasto definido no cabeçalho do pedido e usa esse contexto como contexto do span pai do pedido. Pode usar a funcionalidade de rastreamento distribuído para correlacionar o rastreio de feedback com o rastreio de pedido de chat.
O seguinte código de exemplo mostra como avaliar um fluxo implantado num endpoint gerido com rastreamento ativado e enviar o feedback para o mesmo intervalo de rastreamento de um pedido de avaliação. O fluxo tem as entradas question e chat_history. A saída é answer. Depois de o endpoint ser pontuado, o feedback é recolhido e enviado para o Application Insights conforme especificado quando implementa 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 might 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'))
Pode ver o rasto do pedido juntamente com o feedback em Application Insights.
Uso avançado: Exportar rastreamento para um serviço de coleção personalizado OpenTelemetry
Em alguns casos, pode querer exportar os dados de rastreio para o seu serviço de coletor OpenTelemetry implementado. Para ativar este serviço, defina OTEL_EXPORTER_OTLP_ENDPOINT. Use este exportador quando quiser personalizar a sua própria lógica de processamento de spans e o seu próprio destino persistente de rastreio.