|
Aprenda a implementar agentes autônomos e fluxos colaborativos em C# utilizando o Microsoft Agent Framework (MAF) com modelos locais no Ollama e abstrações do Microsoft.Extensions.AI no .NET 10/11. (Adaptado com ajuda da IA e corrigido e ajustado por Macoratti) |

OllamaApiClient
pode ser adaptado à abstração
IChatClient
do
Microsoft.Extensions.AI.
ollama serve
ollama pull qwen2.5:1.5b
|
dotnet new sln -n MafOllamaSolution
dotnet new console -n MafOllamaDemo -f net10.0
dotnet sln add MafOllamaDemo/MafOllamaDemo.csproj
cd MafOllamaDemo
dotnet add package Microsoft.Extensions.AI --prerelease
dotnet add package Microsoft.Agents.Core --prerelease
dotnet add package OllamaSharp
|
using System;
using System.Collections.Generic;
using Microsoft.Extensions.AI;
using OllamaSharp;
// 1. Configuração do endpoint local do Ollama e modelo
var endpoint = new Uri("http://localhost:11434");
var modelId = "qwen2.5:1.5b";
// OllamaApiClient implementa a interface IChatClient
IChatClient chatClient = new OllamaApiClient(endpoint, modelId);
Console.WriteLine("=== Microsoft Agent Framework + Ollama (.NET 10) ===");
Console.WriteLine($"Conectado ao modelo: {modelId}\n");
Console.WriteLine("\nPressione algo para prosseguir...");
Console.ReadKey();
// 2. Definição da persona do Agente e da mensagem do Usuário
var systemPrompt = """
\nVocê é um arquiteto de software especialista em C#, .NET 10 e Clean Architecture.
Forneça respostas técnicas, diretas e código idiomático.
""";
var userPrompt = "Como implementar o padrão Result Pattern em C# utilizando
sealed record class?";
var messages = new List<ChatMessage>
{
new(ChatRole.System, systemPrompt),
new(ChatRole.User, userPrompt)
};
Console.WriteLine($"[Usuário]: {userPrompt}\n");
Console.WriteLine("\nAguarde...\n");
// 3. Execução assíncrona da chamada ao agente
ChatCompletion response = await chatClient.CompleteAsync(messages);
Console.WriteLine("[Arquiteto .NET]:");
Console.WriteLine(response.Message.Text);
Console.ReadKey();
|
cd ..
dotnet new console -n MafMultiAgentOllamaDemo -f net10.0
dotnet sln add MafMultiAgentOllamaDemo/MafMultiAgentOllamaDemo.csproj
cd MafMultiAgentOllamaDemo
dotnet add package Microsoft.Extensions.AI --prerelease
dotnet add package Microsoft.Agents.Core --prerelease
dotnet add package OllamaSharp
|
using Microsoft.Extensions.AI;
using OllamaSharp;
var endpoint = new Uri("http://localhost:11434");
var modelId = "qwen2.5:1.5b";
IChatClient chatClient = new OllamaApiClient(endpoint, modelId);
Console.WriteLine("=== Fluxo Colaborativo Multi-Agente ===\n");
var instrucao1 = "Você é um desenvolvedor C#. Escreva implementações limpas e
concisas conforme solicitado.";
var instrucao2 = "Crie um método de extensão em C# para validar CPF com cálculo
de dígitos verificadores.";
Console.WriteLine(instrucao1);
Console.WriteLine(instrucao2);
// --- 1. Agente Desenvolvedor (Coder) ---
var coderMessages = new List<ChatMessage>
{
new(ChatRole.System, instrucao1),
new(ChatRole.User, instrucao2)
};
Console.WriteLine("\n1. Coder gerando a solução inicial...");
Console.WriteLine("Aguarde...");
ChatCompletion coderResponse = await chatClient.CompleteAsync(coderMessages);
var generatedCode = coderResponse.Message.Text ?? string.Empty;
Console.WriteLine($"\n[Código do Coder]:\n{generatedCode}\n");
Console.WriteLine("Pressione algo para continuar...");
Console.ReadKey();
var review1 = "Você é um revisor de código focado em performance, Memory<T>,
Span<T> e alocações de heap.";
var review2 = "Analise o código acima e aponte melhorias de alocação de memória
usando ReadOnlySpan<char>.";
// --- 2. Agente Revisor (Architecture Reviewer) ---
var reviewerMessages = new List<ChatMessage>
{
new(ChatRole.System, review1),
new(ChatRole.User, $"{review2}\n\n{generatedCode}")
};
Console.WriteLine("\n2. Reviewer analisando o código...");
Console.WriteLine("Aguarde...");
ChatCompletion reviewerResponse = await chatClient.CompleteAsync(reviewerMessages);
Console.WriteLine($"\n[Análise do Reviewer]:\n{reviewerResponse.Message.Text}");
Console.WriteLine("\n ### Revisão Concluida ###");
Console.ReadKey();
|
// Executa o Agente Individual
dotnet run --project MafOllamaDemo/MafOllamaDemo.csproj
|

// Executa a Colaboração Multi-Agente
dotnet run --project MafMultiAgentOllamaDemo/MafMultiAgentOllamaDemo.csproj
|

E estamos
conversados..![]()
Código do projeto: MafOllamaDemo.zip
"(Disse Jesus)E este
evangelho do reino será pregado em todo o mundo, em testemunho a todas as
nações, e então virá o fim."
Mateus 24:14
Referências: