|
Este artigo aborda a discussão trazida pela inteligência artificial generativa sobre a necessidade de construir agentes de IA ou utilizar chamadas convencionais a modelos de linguagem, utilizando C# e .NET. (Gerado com ajuda da IA , ajustado e revisado por Macoratti) |

Microsoft.Extensions.AI e, finalmente,
veremos como construir um agente com o Microsoft Agent Framework.llama3.2,
executado localmente pelo Ollama, com o pacote
OllamaSharp como integração com o .NET.llama3.2
disponível localmente.
OllamaSharp,
Microsoft.Extensions.AI e
Microsoft.Agents.AI.
ollama pull llama3.2
|
ollama list
|
dotnet new console -n AgentesIA
cd AgentesIA
dotnet add package OllamaSharp
dotnet add package Microsoft.Extensions.AI
dotnet add package Microsoft.Agents.AI
|
http://localhost:11434.OllamaSharp implementa a
abstração IChatClient do
Microsoft.Extensions.AI,
permitindo utilizar o mesmo modelo de programação sem
acoplar o código de aplicação diretamente à API específica do Ollama.
llama3.2 e apresentar a resposta no console.
using Microsoft.Extensions.AI;
using OllamaSharp;
IChatClient chatClient = new OllamaApiClient(new Uri("http://localhost:11434"), "llama3.2");
var resposta = await chatClient.GetResponseAsync(
"Explique a diferença entre uma classe e uma interface em C#.");
Console.WriteLine(resposta.Text);
|
IChatClient,
enquanto OllamaApiClient fornece
a integração concreta com o provedor.IChatClient é
justamente uma das principais contribuições do
Microsoft.Extensions.AI: padronizar a interação com diferentes
provedores de IA.ObterInformacoesProjeto():
retorna informações sobre o projeto.ObterVersaoDotnet():
retorna a versão do .NET utilizada no ambiente.FerramentasProjeto.cs:
public sealed class FerramentasProjeto
{
public string ObterInformacoesProjeto()
{
return """
Nome: Sistema de Pedidos
Plataforma: ASP.NET Core
Persistência: Entity Framework Core
Banco de dados: SQLite
Arquitetura: Clean Architecture
""";
}
public string ObterVersaoDotnet()
{
return Environment.Version.ToString();
}
}
|
Program.cs
pelo código abaixo:
using Microsoft.Extensions.AI;
using OllamaSharp;
var ferramentasProjeto = new FerramentasProjeto();
IChatClient chatClient = new OllamaApiClient(
new Uri("http://localhost:11434"),
"llama3.2");
chatClient = new ChatClientBuilder(chatClient)
.UseFunctionInvocation()
.Build();
var ferramentas = new List<AITool>
{
AIFunctionFactory.Create(
ferramentasProjeto.ObterInformacoesProjeto),
AIFunctionFactory.Create(
ferramentasProjeto.ObterVersaoDotnet)
};
var opcoes = new ChatOptions
{
Tools = ferramentas
};
var pergunta = """
Analise as informações do projeto.
Informe a arquitetura, o banco de dados e a versão do .NET.
Utilize as ferramentas disponíveis quando necessário.
""";
var resposta = await chatClient.GetResponseAsync(
pergunta,
opcoes);
Console.WriteLine(resposta.Text);
await chatClient.DisposeAsync();
|
AIFunctionFactory.Create
permite transformar métodos .NET em ferramentas que podem ser descritas ao
modelo. Já
UseFunctionInvocation() adiciona
ao cliente o mecanismo de invocação automática dessa ferramenta.
ObterInformacoesProjeto para descobrir os dados da aplicação.if/else para determinar qual
método deve ser executado. A escolha é delegada ao modelo, dentro das opções
permitidas.llama3.2 deve ser testado no
ambiente utilizado: o comportamento pode variar conforme a versão do modelo, o
runtime e o suporte às chamadas de ferramentas. Se o modelo produzir uma
resposta textual em vez de uma chamada de ferramenta, a aplicação não deve
presumir que a operação foi executada.AIAgent
e implementações como ChatClientAgent,
que utiliza um IChatClient para
interagir com o modelo. Portanto, podemos continuar usando
OllamaSharp como provedor, sem precisar
trocar o modelo de IA..cs
pelo seguinte código:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
using OllamaSharp;
var ferramentasProjeto = new FerramentasProjeto();
IChatClient chatClient = new OllamaApiClient(
new Uri("http://localhost:11434"),
"llama3.2");
var ferramentas = new List<AITool>
{
AIFunctionFactory.Create(
ferramentasProjeto.ObterInformacoesProjeto),
AIFunctionFactory.Create(
ferramentasProjeto.ObterVersaoDotnet)
};
AIAgent agente = chatClient.AsAIAgent(
name: "AssistenteProjeto",
instructions: """
Você é um assistente especializado em projetos .NET.
Utilize as ferramentas disponíveis para obter informações
que não estejam presentes na conversa.
Não invente dados sobre o projeto.
Se não conseguir obter uma informação, informe essa limitação.
""",
tools: ferramentas);
var resposta = await agente.RunAsync("""
Analise o projeto e informe sua arquitetura,
o banco de dados utilizado e a versão do .NET.
Explique brevemente o papel de cada tecnologia.
""");
Console.WriteLine(resposta.Text);
await chatClient.DisposeAsync();
|
AsAIAgent cria um agente baseado no
IChatClient existente, permitindo
fornecer nome, instruções e ferramentas. A API atual documenta essa extensão no
namespace Microsoft.Extensions.AI,
com implementação no pacote Microsoft.Agents.AI.
IChatClient com invocação de ferramentas e passamos as opções para
a chamada de chat. Agora, criamos explicitamente um agente, definimos suas
instruções e disponibilizamos as ferramentas na configuração do agente.AIAgent.
llama3.2.OllamaSharp.| Aspecto | Microsoft.Extensions.AI | Microsoft Agent Framework |
|---|---|---|
| Abstração principal | IChatClient |
AIAgent |
| Objetivo | Interagir com o modelo e compor capacidades | Representar e executar agentes |
| Ferramentas | AIFunction
e
FunctionInvokingChatClient |
Ferramentas associadas ao agente |
| Instruções do agente | Podem ser fornecidas por mensagens ou opções do chat | Podem ser definidas na configuração do agente |
| Conversas e estado | Gerenciados pela aplicação e pelas abstrações utilizadas | Possui abstrações específicas para sessões e histórico |
| Workflows e orquestração | Podem ser implementados com código e componentes auxiliares | Oferece recursos próprios para cenários de agentes e workflows |
Microsoft.Extensions.AI
e pode trabalhar com qualquer provedor que implemente
IChatClient, desde que os recursos
necessários sejam compatíveis.
Microsoft.Extensions.AI também possui recursos para invocação
automática de ferramentas e construção de pipelines. Portanto, não seria correto
afirmar que somente o Agent Framework permite executar chamadas de ferramentas
ou implementar interações em várias etapas.| Cenário | Abordagem recomendada |
|---|---|
| Explicar um trecho de código C# | Chamada direta ao LLM |
| Resumir um documento | Chamada direta ao LLM |
| Consultar uma informação por meio de uma ferramenta conhecida | Microsoft.Extensions.AI com tool calling |
| Executar um processo com etapas fixas | Código determinístico, com IA quando necessário |
| Investigar um problema com várias hipóteses possíveis | Considerar um agente |
| Delegar tarefas a agentes especializados e coordenar suas execuções | Avaliar o Microsoft Agent Framework |
|
• Abordagem Direta: Ideal
para resumos, explicações e respostas baseadas no contexto sem execução
de ações. • Tool Calling: Permite que o modelo solicite a execução de métodos .NET através do
Microsoft.Extensions.AI.• Microsoft Agent Framework: Oferece abstrações robustas para gerenciamento de agentes, sessões e fluxos complexos. • Arquitetura Consciente: Comece sempre pela solução mais simples e introduza agentes apenas quando houver necessidade real de tomada de decisão dinâmica. |
Microsoft.Extensions.AI oferece
abstrações para integrar o modelo às ferramentas disponíveis.
E estamos conversados..![]()
"Ninguém pode servir a dois senhores; porque ou há de odiar um e amar o outro,
ou se dedicará a um e desprezará o outro. Não podeis servir a Deus e a Mamom."
Mateus 6:24a
Referências: