.NET - Observabilidade e Controle de Custos em Sistemas de IA
   Este artigo discute como observar aplicações de IA de ponta a ponta, rastrear o uso de tokens e custos, diagnosticar fluxos de RAG e agentes, controlar o consumo excessivo e conectar a telemetria de IA às operações normais de produção em .NET. (Adaptado com ajuda de IA e corrigido e ajustado por Macoratti)

Testar nos ajuda a determinar se uma funcionalidade de IA se comporta como esperado antes de chegar à produção. No entanto, mesmo uma aplicação que passa em todas as avaliações pode se tornar lenta, cara, pouco confiável ou difícil de diagnosticar sob cargas de trabalho reais.

 

Construir uma funcionalidade de IA que funcione é um desafio, e, entender como ela se comporta em produção é outro.

Considere uma requisição de backend tradicional em .NET:



Para observar isso medimos:

• Duração da requisição
• Taxa de erros
• Latência do banco de dados
• CPU e memória
• Falhas de dependências
• Vazão (throughput)

Agora, considere uma requisição de IA:



Uma solicitação que parece simples para o usuário final:
"Encontre-me um cardiologista na próxima segunda-feira e explique a política de cancelamento."

Pode envolver internamente:
• 1 requisição de embedding
• 1 busca vetorial
• 3 chamadas de modelo
• 2 chamadas de ferramenta
• 1 consulta ao banco de dados
• 1 consulta de política
• 6.000 tokens de entrada
• 1.100 tokens de saída
• 9 segundos de latência

Se monitorarmos apenas o HTTP 200, quase não saberemos nada. A requisição foi bem-sucedida, mas:
• Foi lenta? A recuperação foi lenta?
• Qual modelo consumiu os tokens?
• O agente chamou ferramentas desnecessárias?
• Uma nova tentativa (retry) duplicou o custo?
• O RAG enviou contexto demais?
• O modelo gerou uma resposta excessivamente longa?
• Um tenant (inquilino/cliente) consumiu dez vezes mais capacidade de IA do que outro?
• O deploy de um prompt aumentou repentinamente o consumo de tokens?
• A funcionalidade de IA é economicamente sustentável?

Estas são perguntas de arquitetura de produção. A questão importante, portanto, não é "Como eu registro (log) uma requisição de IA?", mas sim:
Como tornar o caminho completo de execução da IA observável o suficiente para entender qualidade, confiabilidade, desempenho e custo?

 

1. A Observabilidade de IA Vai Além de Logs

Normalmente, a observabilidade combina três sinais principais: Logs, Métricas e Traces (Rastreamentos). As aplicações de IA ainda precisam dos três, mas exigem contexto adicional, como:

• Modelo e versão do prompt;
• Tokens de entrada e saída;
• Chamadas de ferramentas (tool calls);
• Resultados de recuperação (retrieval);
• Passos do agente;
• Resultados de avaliação;
• Custo estimado.

O ecossistema .NET atual da Microsoft suporta OpenTelemetry diretamente através do Microsoft.Extensions.AI. O método UseOpenTelemetry() pode ser adicionado a um pipeline de IChatClient, seguindo as convenções semânticas de IA generativa do OpenTelemetry.

Isso traz uma grande vantagem: a telemetria de IA pode participar do mesmo sistema de rastreamento distribuído do restante da aplicação .NET.

2. O Cenário Prático

Vamos considerar um sistema de Atendimento Médico Online que contém :

Resumo de Consulta

Transcrição
    |
    v
IChatClient
    |
    v
Rascunho Estruturado

Assistente RAG

Pergunta
    |
    +-- Embedding de consulta
    +-- Busca Vetoria
    +-- Seleção de Contexto
    |
    v
 IChatClient
    |
    v
Resposta Fundamentada

Agente de Consulta

Solicitação de Paciente
       |
       v
    Agente
      |
      +-- Encontrar Médicos
      +-- Obter Política
      +-- Preparar Agendamento
      |
      v
  Resposta

Integração MCP

   Agente
       |
      v
Servidor MCP
      |
     +-- Ferramentas
     +-- Recursos

Queremos responder a perguntas como:

• Qual recurso de IA é mais caro?
• Qual modelo tem a maior latência?
• Quantos tokens o contexto do RAG consome?
• Qual ferramenta falha com mais frequência?
• Com que frequência o agente realiza novas tentativas (retries)?
• Qual versão de prompt aumentou o custo?
• Quais tenants geram a maior carga de trabalho de IA?
• Com que frequência o recurso de IA recorre a planos de contingência (fallback)?
• As pontuações de qualidade estão diminuindo?
• O que causou a lentidão (14 segundos) nesta requisição específica?

3. Instrumentando o IChatClient com OpenTelemetry

Podemos envolver um cliente de IA com telemetria da seguinte forma:

IChatClient chatClient = new ChatClientBuilder(providerClient)
    .UseOpenTelemetry(
        loggerFactory,
        sourceName: "Telemedicina.AI",
        configure: telemetry =>
        {
            telemetry.EnableSensitiveData = false;
        })
    .Build();

Atenção: Mantenha EnableSensitiveData = false; como padrão em produção para evitar vazamento de dados confidenciais (como histórico médico, dados pessoais e prompts confidenciais).

4. Gerenciamento de Custos, Tokens e Métricas

Dimensões de Custo

Os custos de IA não dependem apenas da quantidade de tokens, mas também de variáveis como: modelo, provedor, tokens em cache, tokens de raciocínio, capacidade provisionada e região.

• Atribuição de Custo: Atribua os custos por funcionalidade (ex: Assistente RAG vs. Agente de Consulta) para que a equipe de produto tome decisões embasadas.

• Custo por Requisição Bem-Sucedida: Utilize métricas de eficiência (ex: Custo por tarefa concluída do agente) em vez de olhar apenas para o custo total.

Principais Alertas e Limites

Limites em Tempo de Execução (Runtime Limits): Imponha limites rígidos para evitar loops infinitos de agentes:

public sealed class AgenteLimites
{
    public int MaximoChamadasModelo { get; init; } = 6; 
    public int MaximoChamadasFerramenta { get; init; } = 8; 
    public int MaximoPassos { get; init; } = 10; 
    public TimeSpan DuracaoMaxima { get; init; } = TimeSpan.FromSeconds(30); 
    public long MaximoTokens { get; init; } = 20_000;
}

5. Resumo Comparativo: Métricas, Logs e Traces

Sinal de Observabilidade O que responde? Exemplos de Aplicação
Métricas (Metrics) Tendências e comportamento geral ai.input.tokens, ai.requests, custo estimado,
 taxas de falha.
Traces (Traces) O "porquê" de um evento específico e caminhos Identificar gargalos (ex: por que uma
requisição demorou 12s — se foi no banco,
no tool call ou no modelo).
Logs (Logs) Eventos diagnósticos específicos e auditoria Detalhes de falhas, versões de prompts,
transições de estado.

6. Checklist Prático para Produção em .NET

Antes de colocar uma funcionalidade de IA baseada em .NET em produção, certifique-se de que os seguintes pontos foram atendidos:
• [ ] Um rastreamento distribuído (distributed trace) representa a requisição completa?
• [ ] As chamadas de modelos estão correlacionadas à API de origem?
• [ ] Os estágios de RAG e ferramentas (tools) estão instrumentados separadamente?
• [ ] Os limites de execução (tokens, chamadas de modelos e ferramentas, tempo) estão sendo aplicados e não apenas monitorados?
• [ ] A telemetria de dados sensíveis está desativada por padrão?
• [ ] Os painéis (dashboards) exibem confiabilidade, desempenho, consumo, qualidade e custos integrados?
• [ ] Alertas de anomalias e orçamentos mensais estão configurados?

7. Estratégia de Observabilidade por Funcionalidade (Exemplo da Telemedicina)

Funcionalidade O que monitorar prioritariamente
Resumo de Consulta Versão do prompt, modelo, tokens de entrada/saída, latência, custo estimado.
Assistente RAG Latência de embedding e busca vetorial, candidatos recuperados, trechos (chunks) selecionados, groundedness (fundamentação).
Agente de Consulta Duração do agente, chamadas de modelos e ferramentas, passos, novas tentativas (retries), custo por tarefa concluída.
Servidor MCP Capacidade, categoria do chamador, resultado de autorização, latência, taxa de falhas.

Conclusão

Os sistemas de IA não exigem uma filosofia de operações totalmente nova.

Eles ainda precisam de:  logs, métricas , rastreamentos (traces) , alertas , orçamentos, planejamento de capacidade e tratamento de falhas

Mas a IA acrescenta novas dimensões operacionais:  modelos, prompts, tokens, embeddings, recuperação (retrieval), ferramentas, etapas do agente, avaliações e custo

Isso significa que um sistema de IA em produção deve responder a duas perguntas muito diferentes.

1- A primeira:  
   A solicitação foi bem-sucedida?

2- E a segunda:
  O que foi necessário para obter sucesso?
  Quantas chamadas de modelo?
  Quantos tokens?
  Quantas ferramentas?
  Qual foi a latência?
  Qual foi o custo financeiro?
  Que nível de qualidade alcançamos?
  O mesmo resultado poderia ter sido produzido de forma mais eficiente?

Esse segundo grupo de perguntas diferencia uma funcionalidade de IA que apenas "funciona" de um produto de IA operável.

Uma boa engenharia de IA não se resume a fazer com que o modelo produza a resposta correta,  trata-se de entregar essa resposta: De forma confiável, observável, segura e com custos que o negócio consiga sustentar.

Pois, em produção, cada chamada de modelo não representa apenas inteligência, representa também: Latência, capacidade, risco e custo.

E estamos conversados..

"Porque não me envergonho do evangelho de Cristo, pois é o poder de Deus para salvação de todo aquele que crê; primeiro do judeu, e também do grego."
Romanos 1:16

Referências:


José Carlos Macoratti