Ako používať Semantic Kernel: Praktický sprievodca s návrhmi, promptami a pluginmi
Skúšali ste niekedy prilepiť LLM k svojej aplikácii a skončili ste s krehkou spleťou promptov, pomocných funkcií a stavu? Semantic Kernel (SK) existuje presne na to, aby to napravil. Je to nenáročný, open-source framework od spoločnosti Microsoft na vytváranie aplikácií s umelou inteligenciou, ktoré spájajú prirodzený jazyk, nástroje a pamäť – bez toho, aby sa vaša kódová základňa zmenila na špagetovú polievku promptov.
V tomto sprievodcovi si prakticky a na riešenia zamerane prejdeme, ako používať Semantic Kernel od nuly až po produkčné vzory. Naučíte sa, ako štruktúrovať prompty, pripojiť nástroje, pridať pamäť, volať viacero modelov a nasadzovať agentov, ktorí konajú konzistentne. Príklady budú vychádzať z reálneho sveta a ukážeme vám, na čom záleží.
Čo je Semantic Kernel – a prečo ho používať?
Semantic Kernel je SDK, ktorý vám pomáha:
- Skladať prompty a funkcie („skills“/pluginy) do pipelines.
- Volať viacero modelov (OpenAI, Azure OpenAI, lokálne modely) zameniteľne.
- Pridať pamäť pre kontext a dlhodobé uchovávanie pomocou embeddings.
- Plánovať a riadiť viacstupňové úlohy so spoľahlivým stavom.
- Integrovať nástroje (API, databázy, file I/O) bezpečne a deterministicky.
Predstavte si SK ako kontrolér, ktorý koordinuje LLM, logiku vašej aplikácie a používateľské dáta. Namiesto pevného kódovania dlhých promptov a ad hoc volaní nástrojov definujete opakovane použiteľné sémantické funkcie a natívne funkcie s jasnými vstupmi/výstupmi.
Bežné prípady použitia:
- Copiloti zákazníckej podpory s retrieval-augmented generation (RAG)
- Workflow agenti (zhrnúť → klasifikovať → vykonať akciu)
- Document Q&A s pamäťou a citáciami
- Pipelines na kreatívny obsah a generovanie kódu
Rýchly štart: Vaša prvá aplikácia Semantic Kernel
Nižšie je uvedený minimálny tok, ktorý ukazuje, ako používať Semantic Kernel s chat modelom a jednoduchým promptom. Pre prehľadnosť použijeme C#; to isté môžete urobiť v Pythone alebo Jave.
1) Inštalácia balíčkov
# .NET
dotnet add package Microsoft.SemanticKernel
# Voliteľné: konektory a plannery sa líšia podľa verzie
2) Konfigurácia kernelu a modelu
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
var builder = Kernel.CreateBuilder;
// Vyberte si svojho poskytovateľa: OpenAI alebo Azure OpenAI
builder.AddOpenAIChatCompletion(
modelId: "gpt-4o-mini", // alebo váš preferovaný model
apiKey: Environment.GetEnvironmentVariable("OPENAI_API_KEY")
);
var kernel = builder.Build;
3) Definujte sémantickú funkciu (prompt)
using Microsoft.SemanticKernel.SemanticFunctions;
var prompt = @"Ste stručný vysvetľovač.
Vysvetlite koncept '{topic}' v 3 bodoch pre začiatočníka.";
var explainFunc = kernel.CreateFunctionFromPrompt(prompt);
var result = await explainFunc.InvokeAsync(kernel, new { ["topic"] = "vector embeddings" });
Console.WriteLine(result);
Toto je jadro: kernel, model a prompt premenený na opakovane použiteľnú funkciu so vstupmi.
Sémantické funkcie vs. Natívne funkcie
- Sémantické funkcie: Poháňané promptami. Vytvárate ich zo šablón, odovzdávate premenné a získavate textové alebo štruktúrované výstupy.
- Natívne funkcie: Bežné funkcie kódu, ktoré SK sprístupňuje LLM na použitie nástrojov.
Príklad natívnej funkcie, ktorá získava počasie z vášho API a sprístupňuje ho modelu:
public class WeatherPlugin
{
[KernelFunction, Description("Získajte počasie pre mesto")]
public async Task<string> GetWeatherAsync(
[Description("Názov mesta")] string city)
{
// Zavolajte svoje API pre počasie tu
var temp = 22; // placeholder
return $"Počasie v {city}: {temp}°C a jasno";
}
}
// Registrácia pluginu
var weather = new WeatherPlugin;
kernel.Plugins.AddFromObject(weather, pluginName: "weather");
Teraz môžu vaše prompty volať weather.GetWeatherAsync ako nástroj, čo modelu umožňuje zakladať odpovede na reálnych dátach.
Návrhy promptov, ktoré skutočne fungujú
Pri učení sa, ako používať Semantic Kernel, najrýchlejšie výhry pochádzajú z disciplinovaných návrhov promptov:
- System-first: Použite silnú systémovú správu na uzamknutie tónu, persony, bezpečnosti a formátu výstupu.
- Premenné sloty: Pomenujte zástupné symboly jasne (napr.
{topic}, {audience}) a validujte vstup.
- Výstupné kontrakty: Žiadajte štruktúrované formáty ako JSON; zahrňte schému do promptu.
- Few-shot: Poskytnite stručné príklady pre štýl a formát, nie pre nafúknutie obsahu.
- Guardrails: Zahrňte obmedzenia („Ak chýbajú údaje, najprv položte objasňujúcu otázku“).
Príklad štruktúrovaného promptu vnútri SK:
var prompt = @"
Ste klasifikačný engine.
Úloha: Klasifikujte `message` do jednej z [Billing, Tech Support, Sales].
Vráťte prísny JSON: { \"label\": string, \"confidence\": number }
message: {message}
";
var classify = kernel.CreateFunctionFromPrompt(prompt);
var output = await classify.InvokeAsync(kernel, new { ["message"] = "Nemôžem sa prihlásiť do svojho účtu." });
Console.WriteLine(output); // {"label":"Tech Support","confidence":0.89}
Pridanie pamäte: Embeddings, RAG a Kontextové okná
LLM zabúdajú. Pamäť ich robí užitočnými.
- Krátkodobý kontext: Automatický prostredníctvom histórie konverzácií.
- Dlhodobá pamäť: Uložte embeddings používateľských poznámok, dokumentov alebo udalostí a získajte relevantné časti pre kontext.
- RAG: Pred volaním funkcie generovania vyhľadajte vo svojom vector store a vložte výsledky do promptu.
Príklad: pridajte textovú pamäť s embeddings a získajte kontext.
using Microsoft.SemanticKernel.Memory;
var memory = new MemoryBuilder
.WithMemoryStore(new VolatileMemoryStore) // vymeňte za vector DB (Qdrant, Pinecone, Azure AI Search)
.WithTextEmbeddingGeneration(
new OpenAITextEmbeddingGeneration("text-embedding-3-small", Environment.GetEnvironmentVariable("OPENAI_API_KEY")))
.Build;
await memory.SaveInformationAsync(
collection: "policies", id: "refund-policy",
text: "Zákazníci môžu požiadať o vrátenie peňazí do 30 dní od zakúpenia s dokladom o kúpe."
);
// Neskôr: získajte a vložte do promptu
var results = memory.SearchAsync("refund window", collection: "policies", limit: 3, minRelevanceScore: 0.7);
await foreach (var item in results)
{
Console.WriteLine($"Relevant: {item.Metadata.Text}");
}
Potom vložte najlepšie zhody do svojej sémantickej funkcie ako kontextové premenné. Tip: udržujte malé časti (200 – 400 tokenov) a deduplikujte ich.
Použitie nástrojov a plánovanie: Viacstupňové pracovné postupy
Semantic Kernel podporuje plannery, ktoré môžu rozdeliť cieľ používateľa na kroky a vybrať, ktoré funkcie sa majú volať. Je to ideálne, keď máte toolbox natívnych a sémantických funkcií.
Vzor:
- Zhromaždite cieľ a obmedzenia od používateľa.
- Navrhnite plán (sekvenciu volaní funkcií s argumentmi).
- Vykonávajte krok za krokom, overujte výstupy a zotavujte sa z chýb.
Príklad pseudokódu:
// 1) Definujte pluginy (sémantické + natívne) ako predtým
// 2) Použite planner (API sa môže líšiť podľa verzie)
var goal = "Zhrňte priloženú politiku, klasifikujte riziko a pošlite e-mailom správu";
// Predpokladajme, že máme pluginy: files, summarize, classify, email
// Planner zostaví plán: files.Load → summarize.Run → classify.Run → email.Send
// Vykonajte plán sekvenčne, validujte JSON výstupy medzi krokmi
Osvedčené postupy:
- Urobte kroky idempotentnými a testovateľnými.
- Nastavte explicitné výstupné schémy medzi krokmi.
- Použite opakovania/backoff na sieťových nástrojoch.
- Logujte vstupy/výstupy pre pozorovateľnosť (ale vyčistite PII).
Multi-Model Strategy: Vyberte správny model pre danú úlohu
Pomocou Semantic Kernel môžete smerovať úlohy do rôznych modelov:
- Rýchle návrhy → malé, lacné modely
- Kroky náročné na uvažovanie → väčšie modely
- Embeddings → špecializovaný embedding model
- Kód → modely optimalizované pre kód
V praxi:
var kernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey)
.Build;
var fastKernel = Kernel.CreateBuilder
.AddOpenAIChatCompletion("gpt-4o-mini", apiKey) // optimalizované pre rýchlosť
.Build;
// Smerujte jednoduchšie prompty do fastKernel; komplexné úlohy do kernel
Alebo konfigurujte viacero služieb v rovnakom kerneli a vyberte ich pre každú funkciu.
Od prototypu k produkcii: Guardrails a testovanie
Keď sa učíte, ako používať Semantic Kernel v reálnych aplikáciách, na spoľahlivosti záleží:
- Schema-first výstupy: Použite JSON schémy a
TryParse brány.
- Determinizmus, keď je to potrebné: Nastavte nízku teplotu a obmedzte výstupy.
- Bezpečnostné filtre: Pridajte filtre obsahu a red-team prompty.
- Caching: Cachujte RAG výsledky a stabilné generovania.
- Pozorovateľnosť: Logujte šablóny promptov, premenné, latenciu, využitie tokenov.
- Unit testy: Golden test prompty s porovnaniami snapshotov.
Príklad: validujte JSON výstup.
record Classification(string label, double confidence);
bool TryParseClassification(string text, out Classification cls)
{
try { cls = System.Text.Json.JsonSerializer.Deserialize<Classification>(text)!; return true; }
catch { cls = default!; return false; }
}
Reálne vzory, ktoré môžete opätovne použiť
- RAG Chatbot:
retrieve(context) → answer(question, context) s citáciami.
- Schvaľovacie pracovné postupy: klasifikovať → generovať návrh → ľudská kontrola → odoslať.
- Content ops: načrtnúť → navrhnúť → overiť fakty → upraviť tón → publikovať.
- Agent s nástrojmi: calendar.lookup, docs.search, email.send; s plánovaním a pamäťou.
Tip: Zapuzdrite každý krok ako funkciu (sémantickú alebo natívnu) a skombinujte ich do pipelines.
Príklad: Document Q&A s citáciami
Poďme prepojiť jednoduchý Q&A pipeline, ktorý cituje zdroje pomocou RAG.
// 1) Vložte dokumenty do pamäte
await memory.SaveInformationAsync("handbook", "vacation-policy",
"Zamestnanci si za každý mesiac nazbierajú 1,5 dňa PTO a môžu preniesť 5 dní.");
// 2) Získajte kontext pre otázku
var top = memory.SearchAsync("carry over PTO", "handbook", limit: 3, minRelevanceScore: 0.75);
var contexts = new List<string>;
await foreach (var r in top) contexts.Add(r.Metadata.Text);
// 3) Opýtajte sa s kontextom a vyžiadajte si citácie
var qaPrompt = @"
Odpovedáte striktne z poskytnutého kontextu. Ak chýba, povedzte, že neviete.
Zahrňte inline citácie ako [source i] pomocou indexu kontextových položiek začínajúceho na 1.
Context:
1) {{ctx1}}
2) {{ctx2}}
Question: {{q}}
";
var qa = kernel.CreateFunctionFromPrompt(qaPrompt);
var variables = new KernelArguments
{
["ctx1"] = contexts.ElementAtOrDefault(0) ?? "",
["ctx2"] = contexts.ElementAtOrDefault(1) ?? "",
["q"] = "Koľko dní PTO si môžem preniesť?"
};
var answer = await qa.InvokeAsync(kernel, variables);
Console.WriteLine(answer);
Bežné úskalia (a ako sa im vyhnúť)
- Jeden obrovský prompt: Rozdeľte ho na funkcie; odovzdajte iba kontext, ktorý potrebujete.
- Žiadne výstupné kontrakty: Vždy definujte schémy pre strojovo čitateľné kroky.
- RAG bez hygieny: Dobre chunkujte, deduplikujte a zaraďujte podľa relevantnosti a aktuálnosti.
- Tool sprawl: Udržujte rozhrania pluginov malé a zdokumentované.
- Žiadny human-in-the-loop: Pridajte schválenia pre vysoko rizikové akcie.
Ako používať Semantic Kernel s frontendmi
- Webové aplikácie: Hostujte svoju SK orchestráciu v API vrstve; streamujte tokeny do UI.
- Chat UIs: Udržujte stav konverzácie na strane servera; prečistite a zhrňte.
- Auth: Impersonation-safe volania – nikdy nedovoľte modelu raziť tokeny. Gate tool volania cez váš backend.
Kontrolný zoznam nasadenia
- Premenné prostredia pre kľúče a endpoints
- Obmedzenie rýchlosti a opakovania pre volania modelu/nástroja
- Zdrojová kontrola šablón promptov
- Zálohy vector store a spracovanie PII
- Panely pozorovateľnosti (latencia, náklady, chyby)
- A/B testovanie pre prompty a smerovanie
Riešenie problémov v štýle FAQ
- „Model halucinuje aj s RAG.“ Sprísnite pokyny: „Odpovedajte iba z kontextu“ a zahrňte príklad odmietnutia. Zvýšte špecifickosť získavania a znížte teplotu.
- „JSON sa stále kazí.“ Pridajte mini príklad platného JSON a zakážte komentáre. Post-validujte a preformulujte pri zlyhaní.
- „Latencia je vysoká.“ Získajte menej, relevantnejších častí; prepnite jednoduché kroky na menšie modely; paralelizujte nezávislé kroky.
- „Náklady prudko rastú.“ Cachujte, komprimujte kontext a smerujte jednoduché úlohy do lacnejších modelov.
Stojí za zmienku: Budujte rýchlejšie so Sider.AI
Ak prototypujete prompty, testujete toky nástrojov alebo porovnávate odpovede medzi modelmi, spoločník ako Sider.ai môže urýchliť iteráciu. Môžete navrhovať prompty, spúšťať A/B porovnania a zachytávať opakovane použiteľné úryvky predtým, ako ich presuniete do šablón Semantic Kernel – skvelé na zostrenie pokynov a výstupných schém. Ďalšie kroky: Premeňte to na fungujúceho agenta
- Začnite s jednou jasnou úlohou (napr. klasifikácia e-mailov podpory).
- Definujte sémantické/natívne funkcie s prísnymi vstupmi/výstupmi.
- Pridajte pamäť iba tam, kde merateľne zlepšuje odpovede.
- Nainštrumentujte všetko; testujte s reálnymi vzorkami.
- Iterujte na promptoch pomocou sandboxu, potom kodifikujte v SK.
Kľúčové poznatky:
- Semantic Kernel vám pomáha skladať prompty, nástroje a pamäť do spoľahlivých pracovných postupov.
- Používajte výstupné schémy, plannery a smerovanie medzi viacerými modelmi pre robustnosť a kontrolu nákladov.
- RAG plus guardrails poráža obrovské prompty zakaždým.
Keď zvládnete, ako používať Semantic Kernel s týmito vzormi, dodáte funkcie AI, ktoré nie sú len pôsobivé demá – ale spoľahlivé systémy.
FAQ
Q1:Na čo sa používa Semantic Kernel v aplikáciách AI?
Semantic Kernel je orchestrácia SDK na vytváranie pracovných postupov AI, ktoré kombinujú LLM prompty, nástroje (natívne funkcie) a pamäť. Pomáha vám štruktúrovať úlohy, pridávať RAG a spoľahlivo volať viacero modelov.
Q2:Ako používam Semantic Kernel pre RAG s mojimi dokumentmi?
Vložte svoje dokumenty do vector store prostredníctvom pamäťových API SK, potom získajte najrelevantnejšie časti pre každý dotaz a vložte ich do svojho promptu. To zlepšuje presnosť a znižuje halucinácie.
Q3:Môže Semantic Kernel volať externé API a služby?
Áno. Zabaľte API ako natívne funkcie do pluginu a zaregistrujte ich v kerneli, aby ich model mohol používať ako nástroje. Udržujte rozhrania malé a vynucujte validáciu vstupu/výstupu.
Q4:Ktoré modely fungujú so Semantic Kernel?
Semantic Kernel podporuje OpenAI, Azure OpenAI a ďalšie konektory. Úlohy môžete smerovať do rôznych modelov – napríklad menšie modely pre návrhy a väčšie modely pre kroky náročné na uvažovanie.
Q5:Ako dosiahnem, aby boli výstupy Semantic Kernel konzistentné (napr. JSON)?
Používajte štruktúrované prompty, ktoré vyžadujú prísny JSON a zahrňte minimálny príklad alebo schému. Nastavte nízku teplotu, validujte výstupy po volaní a opakujte alebo opravte, keď analýza zlyhá.