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.
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...
- Selezionare il servizio di intelligenza artificiale migliore per eseguire il prompt.
- Compilare il prompt usando il modello di richiesta fornito.
- Inviare il prompt al servizio di intelligenza artificiale.
- Ricevere e analizzare la risposta.
- 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.