Paweł Łukasiewicz: programista blogger
Paweł Łukasiewicz
2025-05-18
Paweł Łukasiewicz
2025-05-18
Udostępnij Udostępnij Kontakt
🧪 Finalny projekt: budujemy własnego Research Assistant’a

czyli jak połączyć pluginy, scoring, podsumowania i szablony promptów w jedną sensowną aplikację


🤔 Po co to wszystko?

Przez ostatnie wpisy rozbieraliśmy Semantic Kernel na czynniki pierwsze.
Było o pluginach, planowaniu, pamięci, promptach i wtyczkach.

Ale dziś… czas to wszystko złożyć w całość.
Stworzymy aplikację, która:

  • 🔍 zada pytanie w Google (lub Bing API)

  • 📑 zbierze wyniki i oceni ich trafność

  • ✂️ stworzy krótkie podsumowania

  • 🧾 wygeneruje przejrzysty raport przy pomocy HandlebarsPrompt


🔧 Technologia, którą wykorzystamy

  • Semantic Kernel (C#) – wiadomo 😎

  • Plugin web search – do wyszukiwania informacji

  • Prompt functions – do scoringu i oceny trafności

  • Native functions – do ekstrakcji i czyszczenia treści

  • Memory (opcjonalnie) – do tymczasowego przechowania wyników

  • Handlebars Prompt Template – do wygenerowania ostatecznego raportu


🧱 Krok po kroku – architektura

1. 🔎 Zapytanie do wyszukiwarki

Tworzymy prosty plugin WebSearchPlugin, który korzysta z API np. SerpAPI lub Bing Search API.
Zwracamy 5–10 wyników zawierających:

  • URL

  • Title

  • Snippet / krótki opis

public class WebSearchPlugin 
{ 
    [SKFunction] 
    public async Task<string> SearchAsync(string query) 
    {   
        // Call to external search API return searchResultsJson; 
    } 
} 

2. 🧠 Ocena wyników (scoring)

Tworzymy prompt function, która oceni trafność każdego wyniku względem pytania użytkownika.

Przykładowy prompt:

Given the search result: "{{snippet}}", 
and the question: "{{question}}", 
rate the usefulness of the result from 1 to 10 and explain why.

Output:

{ 
    "score": 8, 
    "justification": "This snippet directly mentions the core topic and gives practical data." 
} 

3. ✂️ Podsumowanie treści

Tworzymy osobną prompt function, która przetworzy każdy wynik i zredukuje go do 1–2 zdań:

Summarize the key idea from the following content snippet in 1–2 sentences:
"{{snippet}}"

To daje nam szybką esencję treści.


4. 🧾 Tworzenie raportu z Handlebars

Kiedy mamy:

  • pytanie

  • najlepiej ocenione wyniki

  • krótkie podsumowania

…możemy złożyć końcowy raport.
I tu wjeżdża HandlebarsPromptTemplate.

Przykładowy szablon:

# Research Report for: {{question}}

We found {{results.length}} relevant results. Below is a structured summary.

{{#each results}}
## {{@index+1}}. {{title}}
**Score**: {{score}}  
**Summary**: {{summary}}  
**URL**: {{url}}

{{/each}}

This report was auto-generated by your Semantic Kernel Research Assistant.

Wynik? Zgrabny, czytelny raport gotowy do wrzucenia do maila, dokumentu czy chata zespołowego.


🧠 Co zyskujemy?

🔹 Realne wykorzystanie Semantic Kernel
🔹 Praktyczny przykład “chaining functions”
🔹 Wykorzystanie promptów i natywnych funkcji
🔹 Integracja z zewnętrznymi API
🔹 Output, który daje wartość końcowemu użytkownikowi


💡 Co można dodać?

  • ✉️ Wysyłanie raportu mailem (plugin Outlook)

  • 💬 Prezentacja w Teamsach (plugin Teams)

  • 🧠 Zapisywanie wyników do pamięci (Qdrant / SKMemory)

  • 📊 Analiza statystyczna wyników (plugin matematyczny)


🔚 Podsumowanie

To była nasza AI Research App – kompletna aplikacja oparta o Semantic Kernel.
W kolejnym (ostatnim) wpisie domkniemy całość i opowiemy o tym, co dalej, jak rozwijać własne agenty i gdzie ta technologia może Cię zaprowadzić 🚀