Playlist completa no YouTube · Código .NET da aula 8 · Código Python da aula 8 · Slides da aula 8 (PDF)
O que a aula cobriu
A aula 8 fecha a série levando o agente das aulas 6 e 7 para perto da produção: ele ganha tracing com OpenTelemetry exportado para o Application Insights, é avaliado por um modelo juiz sobre um conjunto de perguntas com gabarito e enfrenta um ataque de prompt injection, primeiro sem proteção e depois com um escudo e a aprovação humana como segunda barreira.
São quatro demos sobre a mesma base de configuração das aulas anteriores:
- Tracing: o agente é envolvido com
UseOpenTelemetrye cada chamada vira um trace com spans de modelo e de ferramenta, impressos no console e enviados ao Application Insights conectado ao projeto Foundry. - Avaliação do agente: cinco perguntas com gabarito, um modelo juiz e três métricas (relevance, coherence e equivalence), com a nota por pergunta e a média.
- Prompt injection, o ataque: o usuário pede o resumo de um e-mail de fornecedor que contém uma instrução maliciosa. Se o modelo obedecer, só a aprovação humana segura o envio.
- Prompt injection, a defesa: a mesma cena com a leitura do documento escudada: uma heurística local detecta o padrão, marca o conteúdo como dado não confiável dentro de delimitadores e avisa o modelo.
Três ideias para levar
1. Sem trace, você não sabe o que o agente fez. Observabilidade em agente não é luxo de produção: é o que permite achar a causa de um erro, ver qual ferramenta foi chamada e acompanhar custo e qualidade ao longo do tempo. Mantenha prompts e respostas fora do trace por padrão e ligue dados sensíveis só quando precisar.
using TracerProvider tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource(FonteDoAgente).AddSource("*Microsoft.Agents.AI")
.AddProcessor(new ProcessadorDeConsole())
.AddAzureMonitorTraceExporter(o => o.ConnectionString = connectionString)
.Build();
AIAgent agente = projectClient.AsAIAgent(model, name, instructions, tools)
.AsBuilder()
.UseOpenTelemetry(FonteDoAgente, o => o.EnableSensitiveData = false)
.Build();
2. O juiz é um instrumento, não a verdade. Avaliar com um modelo juiz dá um número comparável entre versões do agente, mas o número muda quando você troca o juiz. Por isso a demo roda a avaliação duas vezes, com juízes diferentes: poucas métricas bem escolhidas, acompanhadas com constância, valem mais do que um painel grande que ninguém olha.
3. O modelo não distingue dado de ordem. Um texto que chega de fora, seja e-mail, documento ou página web, pode carregar instruções. Separar o que é dado do que é ordem é responsabilidade da arquitetura: filtre a entrada, delimite o conteúdo não confiável, limite o que o agente pode fazer e mantenha a aprovação humana para ações irreversíveis. O escudo local da demo é a camada barata; o Prompt Shields e os filtros de conteúdo do Foundry, configurados no deployment, se somam a ela.
Antes de rodar
- Cumpra os pré-requisitos da aula 6: SDK .NET 10, Azure CLI, recurso Foundry e o papel Foundry User.
- Conecte um Application Insights ao projeto Foundry (portal, projeto, Tracing). Sem ele, o programa avisa e imprime os traces só no console.
- Copie o
launchSettings.template.jsone definaFOUNDRY_ENDPOINTeFOUNDRY_MODEL;FOUNDRY_JUDGE_MODELé opcional e, se vazio, o juiz usa o mesmo modelo. - Rode
az login --tenant <id>antes dodotnet run. - Se o restore acusar
NU1605ouNU1608, alinhe os dois pacotesMicrosoft.Extensions.AI.Evaluationà versão deMicrosoft.Extensions.AIque o framework resolveu, sem mexer no framework.
Se você está na trilha Python
O equivalente em Python está em Python/aula08-observabilidade: enable_instrumentation com Azure Monitor para o tracing, azure-ai-evaluation sobre o agente e a mesma cena de prompt injection com escudo e aprovação humana. A decisão de arquitetura é a mesma nas duas trilhas.
Próximo passo
Com este artigo a série fecha os oito encontros. Para recomeçar de qualquer ponto, os artigos estão aqui: aula 1, aula 2, aula 3, aula 4, aula 5, aula 6 e aula 7. Se você ainda não recebeu o e-book gratuito da Capacitação, o bloco de cadastro está no topo da página inicial.
Deixe um comentário