Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2025-05-18
Paweł Łukasiewicz
2025-05-18
Udostępnij Udostępnij Kontakt
🧠 Tworzymy własnego agenta AI z Semantic Kernel

czyli jak z pluginów, planera i pamięci zbudować cyfrowego asystenta


🎯 Czym jest agent w Semantic Kernel?

Agent to kompozycja kilku komponentów:

  • 🎭 Tożsamość – kim agent jest, jakie ma kompetencje i styl

  • 🧰 Funkcje (pluginy) – jego zestaw narzędzi

  • 🧠 Pamięć (Memory) – dostęp do przeszłych kontekstów, dokumentów, faktów

  • 🗺️ Planowanie (Planner) – zdolność rozbijania celów na zadania

  • 🧑‍💻 Profil działania – np. jak reagować, co pomijać, jak się przedstawiać


🔧 Krok po kroku: jak zbudować agenta


1. ✍️ Zdefiniuj osobowość i instrukcje systemowe

To tu decydujesz, kim jest Twój agent i jak ma się zachowywać.

var systemPrompt = """ Jesteś pomocnym i konkretnym asystentem technologicznym. 
Odpowiadasz zwięźle, ale nie unikasz trudnych tematów. 
Jeśli nie wiesz – przyznaj to. Unikaj zbyt marketingowego tonu. """; 

2. 🛠️ Zbuduj kernel z pluginami

Podłącz funkcje, z których agent może korzystać:

var builder = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", "key")
    .AddAzureOpenAITextEmbeddingGeneration("embedding", "model", "key", "endpoint"); 

var kernel = builder.Build(); 

// Dodajemy pluginy 
kernel.ImportPluginFromObject(new FileIOPlugin("data/"), "fileIO"); 
kernel.ImportPluginFromPromptDirectory("Plugins/TextSummary", "summary"); 

3. 🧠 Dodaj pamięć semantyczną

Pamięć pozwala agentowi przechowywać i przeszukiwać informacje.

var memoryStore = new VolatileMemoryStore(); // lub Azure, Redis itp. 

kernel.UseMemory(new MemoryBuilder() 
    .WithMemoryStore(memoryStore) .Build()); 

Możesz teraz zapisywać fakty lub historię:

await kernel.Memory.SaveInformationAsync( collection: "user-memories", text: "Użytkownik pracuje nad agentem AI w Semantic Kernel", id: "user-project" ); 

4. 🪜 Dodaj planer

Bez planera agent nie będzie wiedział, jak używać pluginów do złożonych zadań.

var planner = new SequentialPlanner(kernel); 

5. 🚀 Wywołaj agenta z konkretnym celem

var goal = "Wczytaj plik raport.txt, streść go i zapisz streszczenie do summary.txt"; 
var plan = await planner.CreatePlanAsync(goal); 
var result = await plan.InvokeAsync(kernel); 

Console.WriteLine(result); 

Agent:

  1. dobiera pluginy

  2. tworzy plan działania

  3. wykonuje zadania

  4. może zapisać wynik do pamięci


🧠 Dodatki: funkcje agenta

  • 📜 Agent może mieć historię rozmów i na jej podstawie podejmować decyzje

  • 🔁 Może iterować swoje odpowiedzi (np. przy autokorekcie)

  • 🌐 Można go połączyć z API, bazą wiedzy, grafem wiedzy

  • 🔒 Można mu ograniczyć dostęp do niektórych funkcji (sandbox)


🧪 Przykład: agent-pomocnik techniczny

Załóżmy, że agent ma pomagać zespołowi developerskiemu. Możesz dodać:

  • Plugin do przeszukiwania dokumentacji (prompt + kontekst)

  • Plugin do czytania z repozytorium kodu

  • Plugin do analizowania błędów z logów

Celu nie definiujesz na sztywno – użytkownik pisze:

"Znajdź w dokumentacji sposób konfiguracji tokenów i porównaj z tym, co mamy w pliku konfiguracyjnym"

Agent działa. 💪


⚠️ Wskazówki praktyczne

Co?Dlaczego?
✍️ Jasna osobowośćAgent nie będzie "nijaki"
🧩 Dobrze opisane pluginyLepsze decyzje planera
🧠 Używaj pamięciAgent może być kontekstowy i uczący się
📊 Loguj plan i jego wykonanieUłatwia debugowanie i rozwój

🔚 Co dalej?

W kolejnych krokach pokażę Ci:

  • jak zarządzać pamięcią i kontekstem

  • jak przeszukiwać pamięć semantyczną

  • jak zintegrować pamięć w aplikacji