Compartilhar via


Entendendo o kernel

O kernel é o componente central do Kernel Semântico. Em sua forma mais simples, o kernel é um contêiner de injeção de dependência que gerencia todos os serviços e plug-ins necessários para executar seu aplicativo de IA. Se você fornecer todos os seus serviços e plug-ins ao kernel, eles serão usados perfeitamente pela IA conforme necessário.

O kernel está no centro

Como o kernel tem todos os serviços e plug-ins necessários para executar o código nativo e os serviços de IA, ele é usado por quase todos os componentes do SDK do Kernel Semântico para alimentar seus agentes. Isso significa que, se você executar qualquer prompt ou código no Kernel Semântico, o kernel estará sempre disponível para recuperar os serviços e plug-ins necessários.

O kernel está no centro de tudo no Semantic Kernel

Isso é extremamente poderoso, porque significa que você, como desenvolvedor, tem um único local onde pode configurar e, o mais importante, monitorar seus agentes de IA. Tomemos, por exemplo, quando você invoca um prompt do kernel. Quando você fizer isso, o kernel irá...

  1. Selecione o melhor serviço de IA para executar o prompt.
  2. Crie o prompt usando o modelo de prompt fornecido.
  3. Envie o prompt para o serviço de IA.
  4. Receba e analise a resposta.
  5. E, finalmente, retorne a resposta do LLM para sua inscrição.

Ao longo de todo esse processo, você pode criar eventos e middleware que são acionados em cada uma dessas etapas. Isso significa que você pode executar ações como registro, fornecer atualizações de status aos usuários e, o mais importante, IA responsável. Tudo em um único lugar.

Construa um kernel com serviços e plugins

Antes de construir um kernel, você deve primeiro entender os dois tipos de componentes que existem:

Componentes Descrição
1 Serviços Eles consistem em serviços de IA (por exemplo, conclusão de bate-papo) e outros serviços (por exemplo, registro em log e clientes HTTP) necessários para executar seu aplicativo. Isso foi modelado após o padrão do provedor de serviços no .NET para que pudéssemos dar suporte à ingestão de dependência em todas as linguagens.
2 Plugins Esses são os componentes usados pelos serviços de IA e os modelos de prompt para executar o trabalho. Os serviços de IA, por exemplo, podem usar plug-ins para recuperar dados de um banco de dados ou chamar uma API externa para executar ações.

Para começar a criar um kernel, importe os pacotes necessários na parte superior do seu arquivo:

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

Em seguida, você pode adicionar serviços e plugins. Abaixo está um exemplo de como você pode adicionar uma conclusão de chat do Azure OpenAI, um agente e um plug-in de tempo.

// 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 os pacotes necessários:

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

Em seguida, você pode criar um kernel.

# Initialize the kernel
kernel = Kernel()

Finalmente, você pode adicionar os serviços e plugins necessários. Abaixo está um exemplo de como você pode adicionar uma conclusão de chat do Azure OpenAI, um agente e um plug-in de tempo.

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

Construir um kernel

Os kernels podem ser construídos usando um Kernel.builder(). Sobre isso, você pode adicionar serviços e plug-ins de IA necessários.

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

Usando injeção de dependência

Em C#, você pode usar a Injeção de Dependência para criar um kernel. Isso é feito criando e ServiceCollection adicionando serviços e plugins a ele. Abaixo está um exemplo de como você pode criar um kernel usando a Injeção de Dependência.

Dica

Recomendamos que você crie um kernel como um serviço transitório para que ele seja descartado após cada uso, pois a coleção de plug-ins é mutável. O kernel é extremamente leve (já que é apenas um contêiner para serviços e plugins), portanto, criar um novo kernel para cada uso não é uma preocupação de desempenho.

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

Dica

Para obter mais exemplos sobre como usar a injeção de dependência em C#, consulte os exemplos de conceito.

Próximas etapas

Agora que você entende o kernel, pode aprender sobre todos os diferentes serviços de IA que você pode adicionar a ele.