.NET - Criando Agentes de IA com o Microsoft Agent Framework
![]() |
Neste artigo veremos como criar Agentes de IA usando o Microsoft Agent Framework. |
Continuando
o artigo anterior,
hoje vamos criar
um projeto base de um Agente de IA focado em:
- A Integração correta com IA
- Uso consciente do Microsoft.Extensions.AI
- Uso correto do Agent Framework
- Separação mínima de responsabilidades
- Código legível e ensinável
Visão geral do projeto
Vamos criar um projeto Console
usando o .NET 10 que demonstra:
✔ Criação de um agente
✔ Uso de instructions (personalidade)
✔ Uso de
threads (memória)
✔ Integração com OpenAI (facilmente trocável por Azure
OpenAI ou Ollama)
✔ Registro de tools em C#
✔ Organização mínima
correta
Você pode usar o Visual Studio ou aplicar estes comandos:
| dotnet new console
-n AgentBaseDemo cd AgentBaseDemo |
A seguir vamos instalar os seguintes pacotes: (A versão dos pacotes pode variar...)
dotnet add package Azure.AI.OpenAI --version 2.1.0
dotnet add package Microsoft.Extensions.AI.OpenAI --version 10.1.1-preview.1
dotnet add package Microsoft.Agents.AI.OpenAI --version 1.0.0-preview
|
Todos os pacotes ainda estão em preview em janeiro de 2026 , mas :
- O modelo mental não vai mudar
- A abstração Microsoft.Extensions.AI já é GA
- O Agent Framework é o caminho oficial da Microsoft
Estrutura de pastas da aplicação:
AgentBaseDemo │ ├── Program.cs │ ├── Agents │ └── TechnicalAssistantAgent.cs │ ├── Tools │ └── DateTimeTools.cs │ └── Configuration └── AiSettings.cs |
Para usar a API da OpenAI você vai precisar criar uma API Key e definir o modelo gpt-4o-mini usado neste exemplo.
Criando a configuração : AiSettings
namespace AgentBaseDemo.Configuration; /// <summary> /// Centraliza configurações relacionadas à IA. /// Em projetos reais, isso viria de appsettings.json ou Key Vault. /// </summary> public sealed class AiSettings { public string ApiKey { get; init; } = string.Empty; public string Model { get; init; } = "gpt-4o-mini"; } |
O AiSettings tem o papel de centralizar e isolar as configurações da IA, como chave de acesso e modelo utilizado, evitando que esses detalhes fiquem espalhados pelo código.
Ele separa configuração de comportamento, facilitando manutenção, testes e troca de providers (OpenAI, Azure OpenAI, Ollama).
Além disso, prepara o projeto para boas práticas de produção, como uso de appsettings.json, variáveis de ambiente ou Key Vault.
Didaticamente, deixa claro que o agente depende de configuração externa, não de valores “hardcoded”.
Criando a Tool do agente (função C# chamável pela IA)
using System.ComponentModel; using Microsoft.Extensions.AI; namespace AgentBaseDemo.Tools; /// <summary> /// Tools são métodos C# normais que o agente pode invocar. /// O Agent Framework decide QUANDO chamá-los. /// </summary> public sealed class DateTimeTools { [Description("Retorna a data e hora atual do sistema")] public string GetCurrentDateTime() { return DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"); } } |
A Tool do agente é um método C# exposto para que a IA possa executar ações no mundo externo, indo além de apenas gerar texto.
Ela permite que o agente consuma lógica da aplicação, dados ou serviços reais (data/hora, banco, APIs).
O papel dela é estender as capacidades
do agente de forma controlada e segura.
Assim, o agente decide quando usar a
tool, mas o como é sempre código .NET.
Destacando que :
- Você não escreve lógica de decisão
- O modelo
escolhe quando chamar
- O método só precisa ser claro e bem descrito
Definindo o Agente
Na pasta Agents
vamos criar a classe TechnicalAssistantAgent.cs
using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using AgentBaseDemo.Tools; namespace AgentBaseDemo.Agents; /// <summary> /// Encapsula a criação do agente. /// Isso evita espalhar detalhes de IA pelo código. /// </summary> public static class TechnicalAssistantAgent { public static AIAgent Create(IChatClient chatClient) { return chatClient.CreateAIAgent( name: "TechnicalAssistant", // Instructions definem o comportamento permanente do agente instructions: """ Você é um assistente técnico especializado em .NET e C#. Responda de forma objetiva, técnica e didática. Quando não souber algo, diga explicitamente. """, // Registro das tools disponíveis para o agente tools: [ AIFunctionFactory.Create(new DateTimeTools().GetCurrentDateTime) ] ); } } |
Neste código está o coração do Agent Framework :
instructions = identidade
do agente
tools = capacidades externas
O
agente não é stateless (isso vem
via thread)
Juntando todas as partes no arquivo Program:
using AgentBaseDemo.Agents; using AgentBaseDemo.Configuration; using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using OpenAI; // =============================== // CONFIGURAÇÃO BÁSICA // =============================== var settings = new AiSettings { ApiKey = "SUA_API_KEY_AQUI" }; // =============================== // CRIAÇÃO DO CLIENTE DE IA // =============================== /* * Microsoft.Extensions.AI define a abstração IChatClient. * Isso permite trocar OpenAI, Azure OpenAI ou Ollama * sem alterar o código do agente. */ IChatClient chatClient = new OpenAIClient(settings.ApiKey) .GetChatClient(settings.Model) .AsIChatClient(); // =============================== // CRIAÇÃO DO AGENTE // =============================== AIAgent agent = TechnicalAssistantAgent.Create(chatClient); // =============================== // THREAD = MEMÓRIA DO AGENTE // =============================== /* * A thread mantém o histórico da conversa. * Sem thread -> agente stateless. */ AgentThread thread = agent.GetNewThread(); // =============================== // LOOP DE CONVERSA // =============================== Console.WriteLine("Agente iniciado. Digite uma pergunta ou 'sair'.\n");
while (true) { Console.Write("> "); var input = Console.ReadLine(); if (string.IsNullOrWhiteSpace(input)) continue; if (input.Equals("sair", StringComparison.OrdinalIgnoreCase)) break; // O agente executa considerando: // - Instructions // - Histórico da thread // - Tools disponíveis var response = await agent.RunAsync(input, thread); Console.WriteLine($"\nAgente: {response}\n");
}
|
O que este projeto prova na prática
✔ O código funciona
✔ Está
alinhado com a arquitetura oficial da Microsoft
✔ Usa Agent Framework
corretamente
O que NÃO foi feito
de propósito :
❌ Não usamos appsettings.json (menos ruído)
❌ Não
usamos DI ainda (entra no próximo módulo)
❌ Não usamos persistência de
threads (entra depois)
❌ Não misturamos RAG aqui (responsabilidade separada)
Neste artigo, construímos do zero um agente de IA na plataforma .NET utilizando
o Microsoft Agent Framework (MAF), aplicando as abstrações
oficiais da Microsoft para criação de agentes com identidade, memória e
capacidade de ação. Vimos que um agente não é apenas um prompt, mas uma
composição clara de instructions (comportamento), threads (estado e memória) e
tools (integração com código C# e o mundo externo).
Ao utilizar o
Microsoft.Extensions.AI como camada de abstração, garantimos que o
agente não fique acoplado a um provedor específico de IA, permitindo trocar
OpenAI, Azure OpenAI ou Ollama sem impacto na lógica do agente.
Já o MAF entra como a camada responsável pelo comportamento agentic:
orquestração, uso de ferramentas, manutenção de contexto e evolução para
cenários mais avançados, como múltiplos agentes e fluxos condicionais.
Embora o Agent Framework ainda esteja em preview,
a arquitetura apresentada segue as premissas corretas para aplicações .NET
modernas, sendo didática, extensível e alinhada com o caminho oficial da
plataforma. Este projeto base serve tanto como ponto de partida para aplicações
reais quanto como material sólido para ensino, permitindo evoluções naturais
para Web APIs, RAG, agentes especializados e cenários
multi-agente.
Em resumo, o Microsoft Agent Framework representa o modelo
futuro de desenvolvimento de agentes de IA em .NET, e compreender seus
fundamentos agora coloca o desenvolvedor em uma posição estratégica para
construir soluções inteligentes, sustentáveis e preparadas para produção.
E estamos conversados...
"Como, pois, recebestes o Senhor Jesus Cristo,
assim também andai nele,Enraizados e edificados nele, e confirmados na fé, assim
como fostes ensinados, nela abundando em ação de graças"
Colossenses 2:6,7
Referências:
NET - Unit of Work - Padrão Unidade de ...