Descripción del kernel

El kernel es el componente central del kernel semántico. En su forma más sencilla, el kernel es un contenedor de inserción de dependencias que administra todos los servicios y complementos necesarios para ejecutar la aplicación de IA. Si proporciona todos los servicios y complementos al kernel, la inteligencia artificial los usará sin problemas según sea necesario.

El kernel está en el centro

Dado que el kernel tiene todos los servicios y complementos necesarios para ejecutar código nativo y servicios de IA, casi todos los componentes del SDK de kernel semántico usan para alimentar a los agentes. Esto significa que si ejecuta algún mensaje o código en kernel semántico, el kernel siempre estará disponible para recuperar los servicios y complementos necesarios.

El kernel está en el centro de todo en kernel semántico

Esto es extremadamente eficaz, ya que significa que usted como desarrollador tiene un único lugar donde puede configurar y, lo más importante, supervisar los agentes de IA. Por ejemplo, al invocar un mensaje desde el kernel. Al hacerlo, el kernel...

  1. Seleccione el mejor servicio de IA para ejecutar el símbolo del sistema.
  2. Compile el símbolo del sistema mediante la plantilla de solicitud proporcionada.
  3. Envíe el mensaje al servicio de IA.
  4. Reciba y analice la respuesta.
  5. Y, por último, devuelve la respuesta de LLM a la aplicación.

A lo largo de todo este proceso, puede crear eventos y middleware que se desencadenen en cada uno de estos pasos. Esto significa que puede realizar acciones como el registro, proporcionar actualizaciones de estado a los usuarios y la inteligencia artificial más importantemente responsable. Todo desde un solo lugar.

Creación de un kernel con servicios y complementos

Antes de compilar un kernel, primero debe comprender los dos tipos de componentes que existen:

Componentes Descripción
1 Servicios Estos constan de servicios de inteligencia artificial (por ejemplo, finalización de chat) y otros servicios (por ejemplo, registro y clientes HTTP) necesarios para ejecutar la aplicación. Esto se modeló después del patrón de proveedor de servicios en .NET para que se pudiera admitir la ingesta de dependencias en todos los lenguajes.
2 Complementos Estos son los componentes que usan los servicios de INTELIGENCIA ARTIFICIAL y las plantillas de solicitud para realizar el trabajo. Por ejemplo, los servicios de inteligencia artificial pueden usar complementos para recuperar datos de una base de datos o llamar a una API externa para realizar acciones.

Para empezar a crear un kernel, importe los paquetes necesarios en la parte superior del archivo:

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

A continuación, puede agregar servicios y complementos. A continuación se muestra un ejemplo de cómo puede agregar una finalización de chat de Azure OpenAI, un registrador y un complemento de hora.

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

Importe los paquetes necesarios:

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

A continuación, puede crear un kernel.

# Initialize the kernel
kernel = Kernel()

Por último, puede agregar los servicios y complementos necesarios. A continuación se muestra un ejemplo de cómo puede agregar una finalización de chat de Azure OpenAI, un registrador y un complemento de hora.

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

Compilación de un kernel

Los kernels se pueden compilar mediante .Kernel.builder() En este caso, puede agregar complementos y servicios de INTELIGENCIA ARTIFICIAL necesarios.

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

Uso de la inserción de dependencias

En C#, puede usar la inserción de dependencias para crear un kernel. Esto se hace mediante la creación de y ServiceCollection la adición de servicios y complementos a él. A continuación se muestra un ejemplo de cómo puede crear un kernel mediante la inserción de dependencias.

Sugerencia

Se recomienda crear un kernel como servicio transitorio para que se elimine después de cada uso porque la colección de complementos es mutable. El kernel es extremadamente ligero (ya que es solo un contenedor para servicios y complementos), por lo que la creación de un nuevo kernel para cada uso no es un problema de rendimiento.

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

Sugerencia

Para obtener más ejemplos sobre cómo usar la inserción de dependencias en C#, consulte los ejemplos de concepto.

Pasos siguientes

Ahora que comprende el kernel, puede obtener información sobre todos los diferentes servicios de inteligencia artificial que puede agregar a él.