Informazioni sul kernel

Il kernel è il componente centrale del kernel semantico. Al suo modo più semplice, il kernel è un contenitore di inserimento delle dipendenze che gestisce tutti i servizi e i plug-in necessari per eseguire l'applicazione di intelligenza artificiale. Se si forniscono tutti i servizi e i plug-in al kernel, questi verranno usati facilmente dall'IA in base alle esigenze.

Il kernel si trova al centro

Poiché il kernel ha tutti i servizi e i plug-in necessari per eseguire sia il codice nativo che i servizi di intelligenza artificiale, viene usato da quasi ogni componente all'interno di Semantic Kernel SDK per alimentare gli agenti. Ciò significa che se si esegue un prompt o codice nel kernel semantico, il kernel sarà sempre disponibile per recuperare i servizi e i plug-in necessari.

Il kernel è al centro di tutto ciò che si trova nel kernel semantico

Questo è estremamente potente, perché significa che lo sviluppatore ha un'unica posizione in cui è possibile configurare e, soprattutto, monitorare gli agenti di intelligenza artificiale. Ad esempio, quando si richiama un prompt dal kernel. Quando lo fai, il kernel...

  1. Selezionare il servizio di intelligenza artificiale migliore per eseguire il prompt.
  2. Compilare il prompt usando il modello di richiesta fornito.
  3. Inviare il prompt al servizio di intelligenza artificiale.
  4. Ricevere e analizzare la risposta.
  5. Infine, restituire la risposta dall'LLM all'applicazione.

In tutto questo processo è possibile creare eventi e middleware attivati in ognuno di questi passaggi. Ciò significa che è possibile eseguire azioni come la registrazione, fornire aggiornamenti dello stato agli utenti e l'intelligenza artificiale più importantemente responsabile. Tutto da un unico posto.

Creare un kernel con servizi e plug-in

Prima di compilare un kernel, è necessario comprendere i due tipi di componenti esistenti:

Componenti Descrizione
1 Servizi Sono costituiti da entrambi i servizi di intelligenza artificiale (ad esempio, il completamento della chat) e altri servizi (ad esempio, la registrazione e i client HTTP) necessari per eseguire l'applicazione. Questo modello è stato modellato dopo il modello del provider di servizi in .NET in modo da poter supportare l'inserimento delle dipendenze in tutti i linguaggi.
2 Plug-in Questi sono i componenti usati dai servizi di intelligenza artificiale e richiedono ai modelli di eseguire il lavoro. I servizi di intelligenza artificiale, ad esempio, possono usare plug-in per recuperare dati da un database o chiamare un'API esterna per eseguire azioni.

Per iniziare a creare un kernel, importare i pacchetti necessari all'inizio del file:

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

Successivamente, è possibile aggiungere servizi e plug-in. Di seguito è riportato un esempio di come aggiungere un completamento della chat OpenAI di Azure, un logger e un plug-in ora.

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

Importare i pacchetti necessari:

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

Successivamente, è possibile creare un kernel.

# Initialize the kernel
kernel = Kernel()

Infine, è possibile aggiungere i servizi e i plug-in necessari. Di seguito è riportato un esempio di come aggiungere un completamento della chat OpenAI di Azure, un logger e un plug-in ora.

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

Creare un kernel

I kernel possono essere compilati usando un oggetto Kernel.builder(). In questo modo è possibile aggiungere i servizi di intelligenza artificiale e i plug-in necessari.

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

Uso dell'inserimento delle dipendenze

In C# è possibile usare l'inserimento delle dipendenze per creare un kernel. Questa operazione viene eseguita creando un e ServiceCollection aggiungendo servizi e plug-in a esso. Di seguito è riportato un esempio di come creare un kernel usando l'inserimento delle dipendenze.

Suggerimento

È consigliabile creare un kernel come servizio temporaneo in modo che venga eliminato dopo ogni utilizzo perché la raccolta di plug-in è modificabile. Il kernel è estremamente leggero (poiché è solo un contenitore per servizi e plug-in), quindi la creazione di un nuovo kernel per ogni uso non è un problema di prestazioni.

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

Suggerimento

Per altri esempi su come usare l'inserimento delle dipendenze in C#, vedere gli esempi di concetto.

Passaggi successivi

Dopo aver compreso il kernel, è possibile ottenere informazioni su tutti i diversi servizi di intelligenza artificiale che è possibile aggiungere.