Monitore continuamente suas aplicações de IA generativa
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.
Os avanços contínuos em IA generativa levaram as organizações a construir aplicações cada vez mais complexas para resolver vários problemas (chat-bots, sistemas RAG, sistemas agenticos, etc.). Esses aplicativos estão sendo usados para impulsionar a inovação, melhorar as experiências dos clientes e melhorar a tomada de decisões. Embora os modelos (por exemplo, GPT-4) que alimentam essas aplicações de IA generativa sejam extremamente capazes, o monitoramento contínuo nunca foi tão importante para garantir resultados de alta qualidade, seguros e confiáveis. O monitoramento contínuo é eficaz quando várias perspetivas são consideradas ao observar um aplicativo. Essas perspetivas incluem uso e custo de tokens, métricas operacionais – latência, contagem de solicitações, etc. – e, o que é importante, avaliação contínua. Para saber mais sobre avaliação, consulte Avaliação de aplicações generativas de IA.
A IA do Azure e o Azure Monitor fornecem ferramentas para você monitorar continuamente o desempenho de seus aplicativos de IA generativa de várias perspetivas. Com o Azure AI Online Evaluation, você pode avaliar continuamente seu aplicativo independente de onde ele está implantado ou qual estrutura de orquestração está usando (por exemplo, LangChain). Você pode usar vários avaliadores internos que mantêm a paridade com o SDK de Avaliação de IA do Azure ou definir seus próprios avaliadores personalizados. Ao executar continuamente os avaliadores certos sobre os dados de rastreamento coletados, sua equipe pode identificar e mitigar de forma mais eficaz as preocupações de segurança, qualidade e segurança à medida que surgem, seja na pré-produção ou na pós-produção. O Azure AI Online Evaluation fornece integração total com o conjunto abrangente de ferramentas de observabilidade disponíveis no Azure Monitor Application Insights, permitindo que você crie painéis personalizados, visualize os resultados da avaliação ao longo do tempo e configure alertas para monitoramento avançado de aplicativos.
Em resumo, monitorar suas aplicações generativas de IA nunca foi tão importante, devido à complexidade e rápida evolução da indústria de IA. O Azure AI Online Evaluation, integrado com o Azure Monitor Application Insights, permite que você avalie continuamente seus aplicativos implantados para garantir que eles tenham desempenho, segurança e produzam resultados de alta qualidade na produção.
Como funciona a avaliação online
Nesta seção, você aprenderá como o Azure AI Online Evaluation funciona, como ele se integra ao Azure Monitor Application Insights e como você pode usá-lo para executar avaliações contínuas sobre dados de rastreamento de seus aplicativos de IA generativos.
Rastreando seu aplicativo de IA generativa
A primeira etapa no monitoramento contínuo de seu aplicativo é garantir que seus dados de telemetria sejam capturados e armazenados para análise. Para fazer isso, você precisará instrumentar o código do seu aplicativo de IA generativa para usar o pacote Azure AI Tracing para registrar dados de rastreamento em um recurso do Azure Monitor Application Insights de sua escolha. Este pacote está totalmente em conformidade com o padrão OpenTelemetry para observabilidade. Depois de instrumentar o código do aplicativo, os dados de rastreamento serão registrados no recurso do Application Insights.
Depois de incluir o rastreamento no código do aplicativo, você pode exibir os dados de rastreamento no Azure AI Foundry ou no recurso do Azure Monitor Application Insights. Para saber mais sobre como fazer isso, consulte monitorar seu aplicativo de IA generativa.
Avaliação Online
Depois que seu aplicativo for instrumentado para enviar dados de rastreamento para o Application Insights, é hora de configurar um cronograma de Avaliação Online para avaliar continuamente esses dados. O Azure AI Online Evaluation é um serviço que usa a computação de IA do Azure para executar continuamente um conjunto de avaliadores. Depois de configurar uma agenda de Avaliação Online com o SDK do Projeto Azure AI, ela é executada em uma agenda personalizável. Cada vez que o serviço é executado, ele executa as seguintes etapas:
- Consulte dados de rastreamento de aplicativos do recurso conectado do Application Insights usando a consulta Kusto fornecida.
- Execute cada avaliador sobre os dados de rastreamento e calcule cada métrica (por exemplo, fundamentação: 3).
- Escreva as pontuações de avaliação de volta para cada traço usando convenções semânticas padronizadas.
Nota
O Azure AI Online Evaluation suporta as mesmas métricas que o Azure AI Evaluation. Para obter mais informações sobre como a avaliação funciona e quais métricas de avaliação são suportadas, consulte Avaliar seu aplicativo de IA generativa com o SDK de Avaliação de IA do Azure
Por exemplo, digamos que você tenha um aplicativo de bate-papo implantado que recebe muitas perguntas dos clientes diariamente. Você deseja avaliar continuamente a qualidade das respostas do seu aplicativo. Você configura uma agenda de Avaliação Online com uma recorrência diária. Você configura os avaliadores: Fundamentação, Coerência e Fluência. Todos os dias, o serviço calcula as pontuações de avaliação dessas métricas e grava os dados no Application Insights para cada rastreamento coletado durante a janela de tempo de recorrência (neste exemplo, as últimas 24 horas). Em seguida, os dados podem ser consultados a partir de cada rastreamento e disponibilizados no Azure AI Foundry e no Azure Monitor Application Insights.
Os resultados da avaliação gravados de volta em cada rastreamento no Application Insights seguem as seguintes convenções. Um intervalo único será adicionado a cada traço para cada métrica de avaliação.
Property | Tabela do Application Insights | Campos para uma determinada operation_ID | Valor de exemplo |
---|---|---|---|
Métrica de avaliação | rastreamentos, AppTraces | customDimensions[“event.name”] |
gen_ai.evaluation.relevance |
Pontuação métrica de avaliação | rastreamentos, AppTraces | customDimensions[“gen_ai.evaluation.score”] |
3 |
Comentário da métrica de avaliação (se aplicável) | rastreamentos, AppTraces | message |
{“comment”: “I like the response”} |
Agora que você entende como o Azure AI Online Evaluation funciona e como ele se conecta ao Azure Monitor Application Insights, é hora de aprender como configurar o serviço.
Configurar avaliação online
Nesta seção, você aprenderá como configurar uma agenda de Avaliação Online para monitorar continuamente seu aplicativo de IA generativa implantado. O SDK do Projeto Azure AI oferece esses recursos por meio de uma API Python e dá suporte a todos os recursos disponíveis em avaliações locais. Use as etapas a seguir para enviar sua agenda de Avaliação Online em seus dados usando avaliadores internos ou personalizados.
Nota
As avaliações só são suportadas nas mesmas regiões que as métricas de risco e segurança assistidas por IA.
Pré-requisitos
Conclua as seguintes etapas de pré-requisito para configurar seu ambiente e autenticação para os recursos necessários:
- Uma assinatura do Azure.
- Um Grupo de Recursos numa região apoiada pela Avaliação.
- Uma nova Identidade Gerenciada atribuída pelo usuário no mesmo grupo de recursos e região. Anote o
clientId
que você vai precisar mais tarde. - Um Hub de IA do Azure no mesmo grupo de recursos e região.
- Um projeto de IA do Azure neste hub, consulte Criar um projeto no portal do Azure AI Foundry.
- Um recurso do Azure Monitor Application Insights.
- Navegue até a página de hub no portal do Azure e adicione o recurso do Application Insights, consulte Atualizar o Azure Application Insights e o Azure Container Registry.
- Implantação do Azure OpenAI com suporte ao
chat completion
modelo GPT, por exemplogpt-4
. Connection String
para o projeto de IA do Azure criarAIProjectClient
facilmente objeto. Você pode obter a cadeia de conexão do projeto em Detalhes do projeto na página Visão geral do projeto.- Navegue até o recurso do Application Insights no portal do Azure e use a guia Controle de acesso (IAM) para adicionar a
Log Analytics Contributor
função à Identidade gerenciada atribuída pelo usuário que você criou anteriormente. - Anexe a Identidade Gerenciada atribuída pelo usuário ao seu projeto.
- Navegue até os Serviços de IA do Azure no portal do Azure e use a guia Controle de acesso (IAM) para adicionar a
Cognitive Services OpenAI Contributor
função à Identidade Gerenciada atribuída pelo usuário que você criou anteriormente. - Certifique-se de que iniciou sessão primeiro na sua subscrição do Azure executando
az login
o .
Instruções de instalação
- Crie um ambiente virtual à sua escolha. Para criar um usando conda, execute o seguinte comando:
conda create -n online-evaluation
conda activate online-evaluation
- Instale os pacotes necessários executando o seguinte comando:
pip install azure-identity azure-ai-projects azure-ai-ml
Gorjeta
Opcionalmente, você pode pip install azure-ai-evaluation
, se quiser uma experiência code-first, buscar a ID do avaliador para avaliadores internos no código. Para saber como fazer isso, consulte Especificando avaliadores da biblioteca de avaliadores.
Configurar o rastreamento para seu aplicativo de IA generativa
A primeira etapa no monitoramento de seu aplicativo é configurar o rastreamento. Para saber como fazer isso para que os dados sejam registrados no Application Insights, consulte Configurar o rastreamento para seu aplicativo de IA generativa.
Usando o nome do serviço em dados de rastreamento
Para identificar seu serviço por meio de uma ID exclusiva no Application Insights, você pode usar a propriedade OpenTelemetry do nome do serviço em seus dados de rastreamento. Isso é particularmente útil se você estiver registrando dados de vários aplicativos no mesmo recurso do Application Insights e quiser diferenciá-los. Por exemplo, digamos que você tenha dois aplicativos: App-1 e App-2, com rastreamento configurado para registrar dados no mesmo recurso do Application Insights. Talvez você queira configurar o App-1 para ser avaliado continuamente pela Relevância e o App-2 para ser avaliado continuamente pelo Groundedness. Você pode usar o nome do serviço para diferenciar entre os aplicativos em suas configurações de Avaliação Online.
Para configurar a propriedade de nome de serviço, você pode fazê-lo diretamente no código do aplicativo seguindo as etapas, consulte Usando vários provedores de rastreador com Recurso diferente. Como alternativa, você pode definir a variável OTEL_SERVICE_NAME
de ambiente antes de implantar seu aplicativo. Para saber mais sobre como trabalhar com o nome do serviço, consulte Variáveis de ambiente OTEL e Convenções semânticas de recursos de serviço.
Para consultar dados de rastreamento para um determinado nome de serviço, consulte a cloud_roleName
propriedade. Adicione a seguinte linha à consulta KQL que você usa em sua configuração de Avaliação Online:
| where cloud_RoleName == "service_name"
Consultar dados de rastreamento armazenados no Application Insights
Usando a Kusto Query Language (KQL), você pode consultar os dados de rastreamento do seu aplicativo de IA generativa do Application Insights para usar na avaliação on-line contínua. Se você usar o pacote Azure AI Tracing para rastrear seu aplicativo de IA generativa, poderá usar a seguinte consulta Kusto para exibir os dados no Application Insights:
Importante
A consulta KQL usada pelo serviço de Avaliação Online deve gerar as seguintes colunas: operation_Id
, operation_ParentId
e gen_ai_response_id
. Além disso, cada avaliador tem os seus próprios requisitos de dados de entrada. A consulta KQL deve produzir estas colunas para serem usadas como entradas para os próprios avaliadores. Para obter uma lista de requisitos de dados para avaliadores, consulte Requisitos de dados para avaliadores incorporados.
let gen_ai_spans = (
dependencies
| where isnotnull(customDimensions["gen_ai.system"])
| extend response_id = tostring(customDimensions["gen_ai.response.id"])
| project id, operation_Id, operation_ParentId, timestamp, response_id
);
let gen_ai_events = (
traces
| where message in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
or tostring(customDimensions["event.name"]) in ("gen_ai.choice", "gen_ai.user.message", "gen_ai.system.message")
| project
id = operation_ParentId,
operation_Id,
operation_ParentId,
user_input = iff(
message == "gen_ai.user.message" or tostring(customDimensions["event.name"]) == "gen_ai.user.message",
parse_json(iff(message == "gen_ai.user.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
system = iff(
message == "gen_ai.system.message" or tostring(customDimensions["event.name"]) == "gen_ai.system.message",
parse_json(iff(message == "gen_ai.system.message", tostring(customDimensions["gen_ai.event.content"]), message)).content,
""
),
llm_response = iff(
message == "gen_ai.choice",
parse_json(tostring(parse_json(tostring(customDimensions["gen_ai.event.content"])).message)).content,
iff(tostring(customDimensions["event.name"]) == "gen_ai.choice", parse_json(parse_json(message).message).content, "")
)
| summarize
operation_ParentId = any(operation_ParentId),
Input = maxif(user_input, user_input != ""),
System = maxif(system, system != ""),
Output = maxif(llm_response, llm_response != "")
by operation_Id, id
);
gen_ai_spans
| join kind=inner (gen_ai_events) on id, operation_Id
| project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id
Opcionalmente, você pode usar o operador de amostra ou o operador take em sua consulta Kusto de modo que ele retorne apenas um subconjunto de rastreamentos. Como as avaliações assistidas por IA podem ser dispendiosas em escala, essa abordagem pode ajudá-lo a controlar os custos avaliando apenas uma amostra aleatória (ou n
rastreamentos) de seus dados.
Configurar a Avaliação Online com o SDK do Azure AI Project
Você pode enviar um trabalho agendado de Avaliação Online com o SDK do Projeto Azure AI por meio de uma API do Python. Veja o script abaixo para saber como configurar a Avaliação Online com avaliadores de desempenho e qualidade (assistidos por IA). Para exibir uma lista abrangente de avaliadores com suporte, consulte Avaliar com o SDK de Avaliação de IA do Azure. Para saber como usar avaliadores personalizados, consulte Avaliadores personalizados.
Comece importando os pacotes necessários e configurando as variáveis necessárias:
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import (
ApplicationInsightsConfiguration,
EvaluatorConfiguration,
EvaluationSchedule,
RecurrenceTrigger,
)
from azure.ai.evaluation import CoherenceEvaluator
# This sample includes the setup for an online evaluation schedule using the Azure AI Project SDK and Azure AI Evaluation SDK
# The schedule is configured to run daily over the collected trace data while running two evaluators: CoherenceEvaluator and RelevanceEvaluator
# This sample can be modified to fit your application's requirements
# Name of your online evaluation schedule
SAMPLE_NAME = "online_eval_name"
# Name of your generative AI application (will be available in trace data in Application Insights)
SERVICE_NAME = "service_name"
# Connection string to your Azure AI Foundry project
# Currently, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
PROJECT_CONNECTION_STRING = "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<HubName>"
# Your Application Insights resource ID
APPLICATION_INSIGHTS_RESOURCE_ID = "appinsights_resource_id"
# Kusto Query Language (KQL) query to query data from Application Insights resource
# This query is compatible with data logged by the Azure AI Inferencing Tracing SDK (linked in documentation)
# You can modify it depending on your data schema
# The KQL query must output these required columns: operation_ID, operation_ParentID, and gen_ai_response_id
# You can choose which other columns to output as required by the evaluators you are using
KUSTO_QUERY = "let gen_ai_spans=(dependencies | where isnotnull(customDimensions[\"gen_ai.system\"]) | extend response_id = tostring(customDimensions[\"gen_ai.response.id\"]) | project id, operation_Id, operation_ParentId, timestamp, response_id); let gen_ai_events=(traces | where message in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") or tostring(customDimensions[\"event.name\"]) in (\"gen_ai.choice\", \"gen_ai.user.message\", \"gen_ai.system.message\") | project id= operation_ParentId, operation_Id, operation_ParentId, user_input = iff(message == \"gen_ai.user.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.user.message\", parse_json(iff(message == \"gen_ai.user.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), system = iff(message == \"gen_ai.system.message\" or tostring(customDimensions[\"event.name\"]) == \"gen_ai.system.message\", parse_json(iff(message == \"gen_ai.system.message\", tostring(customDimensions[\"gen_ai.event.content\"]), message)).content, \"\"), llm_response = iff(message == \"gen_ai.choice\", parse_json(tostring(parse_json(tostring(customDimensions[\"gen_ai.event.content\"])).message)).content, iff(tostring(customDimensions[\"event.name\"]) == \"gen_ai.choice\", parse_json(parse_json(message).message).content, \"\")) | summarize operation_ParentId = any(operation_ParentId), Input = maxif(user_input, user_input != \"\"), System = maxif(system, system != \"\"), Output = maxif(llm_response, llm_response != \"\") by operation_Id, id); gen_ai_spans | join kind=inner (gen_ai_events) on id, operation_Id | project Input, System, Output, operation_Id, operation_ParentId, gen_ai_response_id = response_id"
Em seguida, defina um cliente e uma implantação do Azure OpenAI GPT (como GPT-4
) que será usada para executar sua agenda de Avaliação Online. Além disso, conecte-se ao seu recurso do Application Insights:
# Connect to your Azure AI Foundry Project
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=PROJECT_CONNECTION_STRING
)
# Connect to your Application Insights resource
app_insights_config = ApplicationInsightsConfiguration(
resource_id=APPLICATION_INSIGHTS_RESOURCE_ID,
query=KUSTO_QUERY,
service_name=SERVICE_NAME
)
# Connect to your AOAI resource, you must use an AOAI GPT model
deployment_name = "gpt-4"
api_version = "2024-08-01-preview"
# This is your AOAI connection name, which can be found in your AI Foundry project under the 'Models + Endpoints' tab
default_connection = project_client.connections._get_connection(
"aoai_connection_name"
)
model_config = {
"azure_deployment": deployment_name,
"api_version": api_version,
"type": "azure_openai",
"azure_endpoint": default_connection.properties["target"]
}
Em seguida, configure os avaliadores que deseja usar:
# RelevanceEvaluator
# id for each evaluator can be found in your AI Foundry registry - please see documentation for more information
# init_params is the configuration for the model to use to perform the evaluation
# data_mapping is used to map the output columns of your query to the names required by the evaluator
relevance_evaluator_config = EvaluatorConfiguration(
id="azureml://registries/azureml-staging/models/Relevance-Evaluator/versions/4",
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
# CoherenceEvaluator
coherence_evaluator_config = EvaluatorConfiguration(
id=CoherenceEvaluator.id,
init_params={"model_config": model_config},
data_mapping={"query": "${data.Input}", "response": "${data.Output}"}
)
Por fim, defina a recorrência e crie o cronograma:
Nota: Nas etapas de pré-requisito, você criou uma identidade gerenciada atribuída pelo usuário para autenticar a agenda de Avaliação Online no recurso do Application Insights. O AzureMSIClientId
parâmetro EvaluationSchedule
in da properties
classe é o clientId
dessa identidade.
# Frequency to run the schedule
recurrence_trigger = RecurrenceTrigger(frequency="day", interval=1)
# Dictionary of evaluators
evaluators = {
"relevance": relevance_evaluator_config,
"coherence" : coherence_evaluator_config
}
name = SAMPLE_NAME
description = f"{SAMPLE_NAME} description"
# AzureMSIClientId is the clientID of the User-assigned managed identity created during set-up - see documentation for how to find it
properties = {"AzureMSIClientId": "your_client_id"}
# Configure the online evaluation schedule
evaluation_schedule = EvaluationSchedule(
data=app_insights_config,
evaluators=evaluators,
trigger=recurrence_trigger,
description=description,
properties=properties)
# Create the online evaluation schedule
created_evaluation_schedule = project_client.evaluations.create_or_replace_schedule(name, evaluation_schedule)
print(f"Successfully submitted the online evaluation schedule creation request - {created_evaluation_schedule.name}, currently in {created_evaluation_schedule.provisioning_state} state.")
Executar operações em um cronograma de avaliação on-line
Você pode obter, listar e desabilitar agendas de Avaliação Online adicionando o seguinte código ao seu script de configuração de Avaliação Online:
Aviso: Aguarde um pequeno período de tempo (~30 segundos) entre a criação de uma agenda de Avaliação Online e a execução da get_schedule()
API.
Obtenha um cronograma de avaliação on-line:
name = "<my-online-evaluation-name>"
get_evaluation_schedule = project_client.evaluations.get_schedule(name)
Listar todos os cronogramas de Avaliação Online:
count = 0
for evaluation_schedule in project_client.evaluations.list_schedule():
count += 1
print(f"{count}. {evaluation_schedule.name} "
f"[IsEnabled: {evaluation_schedule.is_enabled}]")
print(f"Total evaluation schedules: {count}")
Desativar (soft-delete) Cronograma de avaliação on-line:
name = "<my-online-evaluation-name>"
project_client.evaluations.disable_schedule(name)
Monitore seu aplicativo de IA generativa
Nesta seção, você aprenderá como a IA do Azure se integra ao Azure Monitor Application Insights para oferecer uma exibição de painel pronta para uso que é personalizada com informações sobre seu aplicativo de IA generativa para que você possa se manter atualizado com o status mais recente do seu aplicativo.
Insights para sua aplicação de IA generativa
Se você não configurou isso, aqui estão algumas etapas rápidas:
- Navegue até o seu projeto no Azure AI Foundry.
- Selecione a página Rastreamento no lado esquerdo.
- Conecte seu recurso do Application Insights ao seu projeto.
Se você já configurou o rastreamento no portal do Azure AI Foundry, tudo o que você precisa fazer é selecionar o link para Confira seu painel do aplicativo Insights for Generative AI.
Depois de ter o streaming de dados para o recurso do Application Insights, você pode vê-los automaticamente serem preenchidos neste painel personalizado.
Esta vista é um ótimo lugar para você começar com suas necessidades de monitoramento.
- Você pode visualizar o consumo de token ao longo do tempo para entender se precisa aumentar seus limites de uso ou fazer uma análise de custo adicional.
- Você pode visualizar as métricas de avaliação como linhas de tendência para entender a qualidade do seu aplicativo diariamente.
- Você pode depurar quando as exceções ocorrem e detalhar os rastreamentos usando a exibição de detalhes da transação de ponta a ponta do Azure Monitor para descobrir o que deu errado.
Esta é uma Pasta de Trabalho do Azure que está consultando dados armazenados em seu recurso do Application Insights. Você pode personalizar essa pasta de trabalho e adaptá-la para atender às suas necessidades de negócios. Para saber mais, consulte Editando pastas de trabalho do Azure.
Isso permite que você adicione outros avaliadores personalizados que você pode ter registrado ou outro texto de marcação para compartilhar resumos e usar para fins de relatório.
Você também pode compartilhar esta pasta de trabalho com sua equipe para que eles fiquem informados com o mais recente!