🤖

Microsoft.Extensions.AI と Semantic Kernel を連携させよう!

2025/02/24に公開

Semantic Kernel のコードを眺めていたら Microsoft.Extensions.AI の連携をするためっぽいコードがあったので試してみました。

Semantic Kernel と Microsoft.Extensions.AI の連携機能は Microsoft.Extensions.AI の IChatClient インターフェースを Semantic Kernel の IChatCompletionService インターフェースと相互に変換しあうことで実現されています。具体的には IChatClient の拡張メソッドとして AsChatCompletionService が定義されており、これを使うことで IChatClientIChatCompletionService に変換することができます。
逆方向の変換は IChatCompletionService の拡張メソッドとして AsChatClient が定義されており、これを使うことで IChatCompletionServiceIChatClient に変換することができます。

Semantic Kernel の Kernel を使うようにするためには Kernel オブジェクトに IChatCompletionService を登録する必要があります。Azure OpenAI Service などは専用の拡張メソッドがあるのですが、今の所 Microsoft.Extensions.AI 専用の登録メソッドはないため IChatClient から IChatCompletionService に変換して、Kernel に登録する必要があります。

コードとしては以下のようになります。

コンソールアプリを作成して、以下のパッケージを追加します。

  • Microsoft.Extensions.AI.OpenAI
    • Microsoft.Extensions.AI の OpenAI 用の実装
  • Microsoft.SemanticKernel
    • Semantic Kernel
  • Azure.Identity
    • Azure の認証用ライブラリ

そして Program.cs に以下のコードを追加します。

Program.cs
#pragma warning disable SKEXP0001 // 実験的機能なので警告を無効化
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.SemanticKernel;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.SemanticKernel.ChatCompletion;
using Microsoft.Extensions.AI;

// Microsoft.Extensions.AI に繋ぐための IChatClient を作る
var client = new AzureOpenAIClient(
    new Uri("https://<<リソース名>>.openai.azure.com/"),
    new AzureCliCredential());
var chatClient = client.AsChatClient("<<モデルデプロイ名>>");

// AsChatCompletionService に IChatCompletionService に変換してサービスに登録
var builder = Kernel.CreateBuilder();
builder.Services.AddSingleton(chatClient.AsChatCompletionService());

var kernel = builder.Build();

// AI を呼んでみる
var response = await kernel.InvokePromptAsync("ねこっぽく挨拶して!");
Console.WriteLine(response.GetValue<string>());

実行すると以下のような結果になりました。ちゃんと動いていますね。

にゃんにゃん!こんにちはにゃ?!元気にゃ一日を過ごしてね?!??

まとめ

ということで Semantic Kernel と Microsoft.Extensions.AI の連携機能のコードがあったので試してみました。
Microsoft.Extensions.AI が正式にリリースされたらおそらく Semantic Kernel 側も実験的機能が取れると思います。最終的には各 AI のベンダーが Microsoft.Extensions.AI の実装を作ってくれればシームレスに Semantic Kernel で使うことが出来るようになると思います。

楽しみ!!

Microsoft (有志)

Discussion