Capacitação Microsoft AI — Aula 6: seu primeiro agente com o Microsoft Agent Framework

Este é o sexto de oito artigos que acompanham as aulas da Capacitação Microsoft AI 2026, que Otávio Lourenço da Silva e eu ministramos ao vivo entre agosto e setembro. As gravações continuam no ar; os artigos existem para quem prefere ler, revisar ou copiar o código com calma.

O que a aula cobriu

As aulas 1 a 3 já tinham montado a base: mesmo modelo, mesmo recurso Foundry, mesma identidade e o AIProjectClient de sempre. A sexta aula não troca nada disso — ela envolve esse cliente com AsAIAgent(modelo, nome, instruções) e, de repente, você tem um agente. Com nome, com instruções fixas e, a partir daí, com memória de conversa. O agente roda no seu processo; nada é criado do lado do serviço. Não é um recurso novo para provisionar, é uma camada em cima do que já existia.

Três ideias para levar

1. Um agente é o cliente de sempre, só que com nome e instruções

Não existe um serviço de “agentes” separado para criar e gerenciar. AsAIAgent é um método de extensão sobre o client que você já usava desde a aula 3 — ele recebe o nome do deployment, um nome para o agente e as instruções (o equivalente ao system prompt) e devolve um objeto com os mesmos dois jeitos de responder que você já conhecia.

var agente = client.AsAIAgent(
    model: deploymentName,
    name: "Assistente de Férias",
    instructions: "Responda com base na política de férias da empresa.");

var sessao = agente.GetNewSession();
var resposta = await agente.RunAsync("Quantos dias de férias eu tenho por ano?", sessao);

2. RunAsync e RunStreamingAsync continuam sendo a escolha de sempre

RunAsync devolve a resposta completa de uma vez — cada chamada, isolada, começa do zero se você não passar uma sessão. RunStreamingAsync entrega token a token, do mesmo jeito que o streaming de chat das aulas anteriores. A novidade não está no transporte da resposta, está no que vem entre uma chamada e outra.

3. AgentSession tira de você a lista de mensagens

Até a aula 2, manter contexto significava você mesmo acumular uma lista de mensagens e reenviá-la inteira a cada chamada. Com AgentSession, essa lista passa a viver dentro da sessão: você guarda o objeto da sessão, não o histórico, e o framework decide o que mandar de volta ao modelo. Trocar de assunto no meio da conversa, pedir para o agente “lembrar” algo dito três perguntas atrás — isso deixa de ser código seu para ser comportamento do framework.

Antes de rodar

  • Pré-requisitos de sempre: .NET SDK 10, az login no tenant certo e um recurso Foundry com um modelo já implantado — mas agora com a função Foundry User atribuída à sua identidade. Ser Owner da subscription não é suficiente; sem esse papel específico, as chamadas do agente voltam com 403.
  • A configuração sai de variáveis de ambiente — FOUNDRY_ENDPOINT (o endpoint do projeto) e FOUNDRY_MODEL (o nome do deployment), opcionalmente AZURE_TENANT_ID e AZURE_TOKEN_CREDENTIALS — definidas num launchSettings.json local e fora do controle de versão.
  • O único pacote novo é o Microsoft.Agents.AI.Foundry (ainda em prerelease), mais o Azure.Identity de sempre. Ele já traz consigo os pacotes Azure AI e Microsoft.Extensions.AI de que precisa. Adicionar esses pacotes de novo, manualmente, numa versão diferente da que o framework espera, costuma travar em runtime com MissingMethodException — e os erros do NuGet (NU1608/NU1605) no build já avisam antes disso.
  • 404 geralmente é endpoint no formato errado; o aviso OPENAI001 aparece quando falta o NoWarn para a API ainda experimental.

Se você está na trilha Python

A mesma aula existe em Python 3.12+, na pasta aula06-agent-framework, com o mesmo AIProjectClient e o mesmo endpoint de projeto que você já vinha usando desde a aula 3. A ideia de sessão e a separação entre resposta completa e streaming se repete; o que muda é só a sintaxe. Fixar versões no requirements.txt continua valendo, pelo mesmo motivo da aula 5: evitar que uma atualização silenciosa do pacote mude o comportamento do agente entre uma aula e a próxima.

Próximo passo

Rode o exemplo sem passar uma sessão entre duas perguntas que dependem uma da outra — deixe ele “esquecer” de propósito — e depois rode de novo passando a mesma AgentSession nas duas chamadas. A diferença entre as duas execuções é a aula inteira resumida em uma demonstração. Na aula 7 esse agente ganha ferramentas, memória de longo prazo e aprende a trabalhar junto com outros agentes.

Dúvidas ou algo que não funcionou? Deixe nos comentários ou abra uma issue no repositório.

Comentários

Deixe um comentário