A kernel ismertetése
A szemantikus kernel központi összetevője a kernel. Legegyszerűbben a kernel egy függőséginjektálási tároló, amely az AI-alkalmazás futtatásához szükséges összes szolgáltatást és beépülő modult kezeli. Ha az összes szolgáltatást és beépülő modult biztosítja a kernelhez, az AI szükség szerint zökkenőmentesen fogja használni őket.
Mivel a kernel rendelkezik a natív kód- és AI-szolgáltatások futtatásához szükséges összes szolgáltatással és beépülő modulval, a Szemantic Kernel SDK szinte minden összetevője használja az ügynökök működtetéséhez. Ez azt jelenti, hogy ha bármilyen parancssort vagy kódot futtat a Szemantic Kernelben, a kernel mindig elérhető lesz a szükséges szolgáltatások és beépülő modulok lekéréséhez.
Ez rendkívül hatékony, mivel fejlesztőként egyetlen helyen konfigurálhatja és figyelheti az AI-ügynökeit. Vegyük például, amikor meghív egy parancssort a kernelből. Ha így tesz, a kernel...
- Válassza ki a legjobb AI-szolgáltatást a parancssor futtatásához.
- Hozza létre a parancssort a megadott parancssori sablonnal.
- Küldje el a kérést az AI szolgáltatásnak.
- A válasz fogadása és elemzése.
- Végül adja vissza az LLM válaszát az alkalmazásnak.
A teljes folyamat során létrehozhat eseményeket és köztes szoftvereket, amelyek az egyes lépéseknél aktiválódnak. Ez azt jelenti, hogy olyan műveleteket hajthat végre, mint a naplózás, állapotfrissítések biztosítása a felhasználók számára, és ami a legfontosabb, a felelős AI. Mind egyetlen helyről.
A kernel létrehozása előtt először meg kell ismernie a két összetevőtípust:
Összetevők | Leírás | |
---|---|---|
0 | Szolgáltatások | Ezek mind az AI-szolgáltatásokból (például a csevegés befejezéséből) és az alkalmazás futtatásához szükséges egyéb szolgáltatásokból (például naplózásból és HTTP-ügyfelekből) állnak. Ezt a szolgáltatói minta után modelleztük a .NET-ben, hogy minden nyelven támogathassuk a függőségek betöltését. |
2 | Beépülő modulok | Ezek azok az összetevők, amelyeket az AI-szolgáltatások és a parancssori sablonok használnak a munka elvégzéséhez. Az AI-szolgáltatások például beépülő modulokkal lekérhetik az adatokat egy adatbázisból, vagy meghívhatnak egy külső API-t a műveletek végrehajtásához. |
Kernel létrehozásához importálja a szükséges csomagokat a fájl tetején:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;
Ezután szolgáltatásokat és beépülő modulokat adhat hozzá. Az alábbiakban egy példa látható arra, hogyan adhat hozzá Azure OpenAI-csevegés befejezését, egy naplózót és egy idő beépülő modult.
// Create a kernel with a logger and Azure OpenAI chat completion service
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(modelId, endpoint, apiKey);
builder.Services.AddLogging(c => c.AddDebug().SetMinimumLevel(LogLevel.Trace));
builder.Plugins.AddFromType<TimePlugin>();
Kernel kernel = builder.Build();
Importálja a szükséges csomagokat:
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.core_plugins.time_plugin import TimePlugin
Ezután létrehozhat egy kernelt.
# Initialize the kernel
kernel = Kernel()
Végül hozzáadhatja a szükséges szolgáltatásokat és beépülő modulokat. Az alábbiakban egy példa látható arra, hogyan adhat hozzá Azure OpenAI-csevegés befejezését, egy naplózót és egy idő beépülő modult.
# Add the Azure OpenAI chat completion service
kernel.add_service(AzureChatCompletion(model_id, endpoint, api_key))
# Add a plugin
kernel.add_plugin(
TimePlugin(),
plugin_name="TimePlugin",
)
A kernelek egy Kernel.builder()
. Ezen a felületen hozzáadhatja a szükséges AI-szolgáltatásokat és beépülő modulokat.
Kernel kernel = Kernel.builder()
.withAIService(ChatCompletionService.class, chatCompletionService)
.withPlugin(lightPlugin)
.build();
A C#-ban a Dependency Injection használatával hozhat létre kernelt. Ehhez létre kell hoznia egy ServiceCollection
szolgáltatásokat és beépülő modulokat. Az alábbi példa bemutatja, hogyan hozhat létre kernelt függőséginjektálással.
Tipp.
Javasoljuk, hogy átmeneti szolgáltatásként hozzon létre egy kernelt, hogy az minden használat után el legyen osztva, mert a beépülő modulgyűjtemény nem használható. A kernel rendkívül egyszerű (mivel csak egy tároló a szolgáltatásokhoz és beépülő modulokhoz), ezért az új kernel létrehozása minden egyes használathoz nem jelent teljesítményproblémát.
using Microsoft.SemanticKernel;
var builder = Host.CreateApplicationBuilder(args);
// Add the OpenAI chat completion service as a singleton
builder.Services.AddOpenAIChatCompletion(
modelId: "gpt-4",
apiKey: "YOUR_API_KEY",
orgId: "YOUR_ORG_ID", // Optional; for OpenAI deployment
serviceId: "YOUR_SERVICE_ID" // Optional; for targeting specific services within Semantic Kernel
);
// Create singletons of your plugins
builder.Services.AddSingleton(() => new LightsPlugin());
builder.Services.AddSingleton(() => new SpeakerPlugin());
// Create the plugin collection (using the KernelPluginFactory to create plugins from objects)
builder.Services.AddSingleton<KernelPluginCollection>((serviceProvider) =>
[
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<LightsPlugin>()),
KernelPluginFactory.CreateFromObject(serviceProvider.GetRequiredService<SpeakerPlugin>())
]
);
// Finally, create the Kernel service with the service provider and plugin collection
builder.Services.AddTransient((serviceProvider)=> {
KernelPluginCollection pluginCollection = serviceProvider.GetRequiredService<KernelPluginCollection>();
return new Kernel(serviceProvider, pluginCollection);
});
Tipp.
A függőséginjektálás C#-ban való használatával kapcsolatos további példákért tekintse meg a koncepciómintákat.
Most, hogy megismerte a kernelt, megismerkedhet az összes olyan AI-szolgáltatással, amelyet hozzáadhat.