カーネルについて

カーネルはセマンティック カーネルの中心的なコンポーネントです。 最も簡単なカーネルは、AI アプリケーションの実行に必要なすべてのサービスとプラグインを管理する依存関係挿入コンテナーです。 すべてのサービスとプラグインをカーネルに提供すると、必要に応じて AI によってシームレスに使用されます。

カーネルが中央にある

カーネルには、ネイティブ コードと AI サービスの両方を実行するために必要なすべてのサービスとプラグインがあるため、セマンティック カーネル SDK 内のほぼすべてのコンポーネントによって使用され、エージェントが機能します。 つまり、セマンティック カーネルでプロンプトまたはコードを実行すると、必要なサービスとプラグインを取得するためにカーネルが常に使用できるようになります。

カーネルはセマンティック カーネルのすべての中心にあります

これは非常に強力です。これは、開発者が AI エージェントを構成し、最も重要に監視できる 1 つの場所を持っていることを意味するためです。 たとえば、カーネルからプロンプトを呼び出すとします。 これを行うと、カーネルは...

  1. プロンプトを実行するための最適な AI サービスを選択します。
  2. 指定されたプロンプト テンプレートを使用してプロンプトをビルドします。
  3. AI サービスにプロンプトを送信します。
  4. 応答を受信して解析します。
  5. 最後に、LLM からの応答をアプリケーションに返します。

このプロセス全体を通して、これらの各手順でトリガーされるイベントとミドルウェアを作成できます。 つまり、ログ記録などのアクションを実行したり、状態の更新をユーザーに提供したり、最も重要な責任を負う AI を提供したりできます。 すべて 1 か所から。

サービスとプラグインを使用してカーネルを構築する

カーネルをビルドする前に、まず、存在する 2 種類のコンポーネントについて理解しておく必要があります。

コンポーネント 説明
1 サービス これらは、AI サービス (チャット完了など) と、アプリケーションの実行に必要な他のサービス (ログ記録や HTTP クライアントなど) の両方で構成されます。 これは、すべての言語での依存関係の取り込みをサポートできるように、.NET のサービス プロバイダー パターンの後にモデル化されました。
2 プラグイン これらは、作業を実行するために AI サービスとプロンプト テンプレートによって使用されるコンポーネントです。 たとえば、AI サービスでは、プラグインを使用してデータベースからデータを取得したり、外部 API を呼び出してアクションを実行したりできます。

カーネルの作成を開始するには、ファイルの先頭に必要なパッケージをインポートします。

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

次に、サービスとプラグインを追加できます。 Azure OpenAI チャットの完了、ロガー、時間プラグインを追加する方法の例を次に示します。

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

必要なパッケージをインポートします。

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

次に、カーネルを作成できます。

# Initialize the kernel
kernel = Kernel()

最後に、必要なサービスとプラグインを追加できます。 Azure OpenAI チャットの完了、ロガー、時間プラグインを追加する方法の例を次に示します。

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

カーネルをビルドする

カーネルは、 Kernel.builder()を使用してビルドできます。 これにより、必要な AI サービスとプラグインを追加できます。

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

依存関係の挿入の使用

C# では、依存関係の挿入を使用してカーネルを作成できます。 これを行うには、 ServiceCollection を作成し、サービスとプラグインを追加します。 依存関係挿入を使用してカーネルを作成する方法の例を次に示します。

ヒント

プラグイン コレクションは変更可能であるため、使用するたびに破棄されるように、カーネルを一時的なサービスとして作成することをお勧めします。 カーネルは非常に軽量であるため (サービスとプラグインのコンテナーに過ぎないため)、使用ごとに新しいカーネルを作成することはパフォーマンスの問題ではありません。

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

ヒント

C# で依存関係の挿入を使用する方法の詳細なサンプルについては、 concept サンプルを参照してください。

次のステップ

カーネルを理解したら、それに追加できるさまざまな AI サービスについて学習できます。