Delen via


Informatie over de kernel

De kernel is het centrale onderdeel van Semantische kernel. De kernel is een container voor afhankelijkheidsinjectie die alle services en invoegtoepassingen beheert die nodig zijn om uw AI-toepassing uit te voeren. Als u al uw services en invoegtoepassingen aan de kernel levert, worden ze indien nodig naadloos gebruikt door de AI.

De kernel bevindt zich in het midden

Omdat de kernel alle services en invoegtoepassingen bevat die nodig zijn om zowel systeemeigen code als AI-services uit te voeren, wordt deze door vrijwel elk onderdeel in de Semantische Kernel SDK gebruikt om uw agents te voorzien. Dit betekent dat als u een prompt of code uitvoert in Semantische kernel, de kernel altijd beschikbaar is om de benodigde services en invoegtoepassingen op te halen.

De kernel bevindt zich in het midden van alles in Semantische kernel

Dit is uiterst krachtig, omdat u als ontwikkelaar één locatie hebt waar u uw AI-agents kunt configureren en het belangrijkste kunt bewaken. Neem bijvoorbeeld wanneer u een prompt vanuit de kernel aanroept. Wanneer u dit doet, wordt de kernel...

  1. Selecteer de beste AI-service om de prompt uit te voeren.
  2. Bouw de prompt met behulp van de opgegeven promptsjabloon.
  3. Verzend de prompt naar de AI-service.
  4. Het antwoord ontvangen en parseren.
  5. En retourneer ten slotte het antwoord van de LLM naar uw toepassing.

Tijdens dit hele proces kunt u gebeurtenissen en middleware maken die tijdens elk van deze stappen worden geactiveerd. Dit betekent dat u acties zoals logboekregistratie kunt uitvoeren, statusupdates kunt bieden aan gebruikers en de belangrijkste verantwoordelijke AI. Allemaal vanaf één plek.

Een kernel bouwen met services en invoegtoepassingen

Voordat u een kernel bouwt, moet u eerst de twee typen onderdelen begrijpen die bestaan:

Onderdelen Beschrijving
1 Services Deze bestaan uit zowel AI-services (bijvoorbeeld chatvoltooiing) als andere services (bijvoorbeeld logboekregistratie en HTTP-clients) die nodig zijn om uw toepassing uit te voeren. Dit is gemodelleerd na het serviceproviderpatroon in .NET, zodat we afhankelijkheidsopname in alle talen kunnen ondersteunen.
2 Invoegtoepassingen Dit zijn de onderdelen die worden gebruikt door uw AI-services en promptsjablonen om werk uit te voeren. AI-services kunnen bijvoorbeeld invoegtoepassingen gebruiken om gegevens op te halen uit een database of een externe API aanroepen om acties uit te voeren.

Als u een kernel wilt maken, importeert u de benodigde pakketten boven aan het bestand:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;

Vervolgens kunt u services en invoegtoepassingen toevoegen. Hieronder ziet u een voorbeeld van hoe u een Voltooiing van een Azure OpenAI-chat, een logboekregistratie en een tijdinvoegtoepassing kunt toevoegen.

// 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();

Importeer de benodigde pakketten:

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.core_plugins.time_plugin import TimePlugin

Vervolgens kunt u een kernel maken.

# Initialize the kernel
kernel = Kernel()

Ten slotte kunt u de benodigde services en invoegtoepassingen toevoegen. Hieronder ziet u een voorbeeld van hoe u een Voltooiing van een Azure OpenAI-chat, een logboekregistratie en een tijdinvoegtoepassing kunt toevoegen.

# 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",
)

Een kernel bouwen

Kernels kunnen worden gebouwd met behulp van een Kernel.builder(). Hier kunt u vereiste AI-services en -invoegtoepassingen toevoegen.

Kernel kernel = Kernel.builder()
    .withAIService(ChatCompletionService.class, chatCompletionService)
    .withPlugin(lightPlugin)
    .build();

Afhankelijkheidsinjectie gebruiken

In C# kunt u afhankelijkheidsinjectie gebruiken om een kernel te maken. Dit wordt gedaan door er services ServiceCollection en invoegtoepassingen aan toe te voegen. Hieronder ziet u een voorbeeld van hoe u een kernel kunt maken met behulp van afhankelijkheidsinjectie.

Tip

U wordt aangeraden een kernel te maken als een tijdelijke service, zodat deze na elk gebruik wordt verwijderd omdat de invoegtoepassingverzameling veranderlijk is. De kernel is uiterst lichtgewicht (omdat het slechts een container voor services en invoegtoepassingen is), dus het maken van een nieuwe kernel voor elk gebruik is geen prestatieprobleem.

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);
});

Tip

Raadpleeg de conceptvoorbeelden voor meer voorbeelden over het gebruik van afhankelijkheidsinjectie in C#.

Volgende stappen

Nu u de kernel begrijpt, kunt u meer te weten komen over alle verschillende AI-services die u eraan kunt toevoegen.