Partilhar via


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:

  1. Consulte dados de rastreamento de aplicativos do recurso conectado do Application Insights usando a consulta Kusto fornecida.
  2. Execute cada avaliador sobre os dados de rastreamento e calcule cada métrica (por exemplo, fundamentação: 3).
  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:

  1. Uma assinatura do Azure.
  2. Um Grupo de Recursos numa região apoiada pela Avaliação.
  3. Uma nova Identidade Gerenciada atribuída pelo usuário no mesmo grupo de recursos e região. Anote o clientIdque você vai precisar mais tarde.
  4. Um Hub de IA do Azure no mesmo grupo de recursos e região.
  5. Um projeto de IA do Azure neste hub, consulte Criar um projeto no portal do Azure AI Foundry.
  6. Um recurso do Azure Monitor Application Insights.
  7. 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.
  8. Implantação do Azure OpenAI com suporte ao chat completionmodelo GPT, por exemplo gpt-4.
  9. Connection String para o projeto de IA do Azure criar AIProjectClient facilmente objeto. Você pode obter a cadeia de conexão do projeto em Detalhes do projeto na página Visão geral do projeto.
  10. 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.
  11. Anexe a Identidade Gerenciada atribuída pelo usuário ao seu projeto.
  12. 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.
  13. Certifique-se de que iniciou sessão primeiro na sua subscrição do Azure executando az logino .

Instruções de instalação

  1. Crie um ambiente virtual à sua escolha. Para criar um usando conda, execute o seguinte comando:
conda create -n online-evaluation
conda activate online-evaluation
  1. 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_ParentIde 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:

  1. Navegue até o seu projeto no Azure AI Foundry.
  2. Selecione a página Rastreamento no lado esquerdo.
  3. 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.

Animação de uma pasta de trabalho do Azure mostrando o Application Insights.

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.

Animação de uma pasta de trabalho do Azure mostrando gráficos e detalhes de transação de ponta a ponta.

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!

Captura de ecrã de um Livro do Azure a mostrar o botão de partilha e o separador partilhar.