📚

Semantic Kernel v0.13.442.1-preview がリリースされました

2023/05/09に公開

最近、ひいきにしている Semantic Kernel がバージョンアップしました。

以下のリンクがリリースノートのページになります。

https://github.com/microsoft/semantic-kernel/releases/tag/dotnet-0.13.442.1-preview

とても長いリリースノートになっていますが、個人的に気になる部分だけをピックアップします。

gRPC をスキルとして読み込めるようになった

*.proto ファイルを読み込んで Kernel にスキルとして登録できるようになりました。
サンプルも追加されています。

https://github.com/microsoft/semantic-kernel/blob/main/samples/dotnet/kernel-syntax-examples/Example35_GrpcSkills.cs

Open API にはもともと対応していたのですが gRPC にも対応してきたので、最近主流のサービスは大体取り込めるようになったんじゃないかと思います。

前々から地味に ChatGPT Plugin をスキルとして読み込むのにも対応していたので、一般的に多く使われているサービスをスキルとして取り込む機能は結構力入れてるんでしょうね。

Azure Cognitive Search を Semantic Memory として使えるようになった

データの検索元として Azure Cognitive Search が使える Semantic Memory の実装が追加されました。
サンプルはこちら。

https://github.com/microsoft/semantic-kernel/blob/main/samples/dotnet/kernel-syntax-examples/Example14_SemanticMemory.cs

Embeddings してデータを保存するのがセオリーですけど Azure Cognitive Search も検索に特化したサービスなので、それをそのまま使うというのもアリですね。
既存の Azure Cognitive Search があるならそれをそのまま使えるかもしれない?どうなんだろ?

TextCompletion と ChatCompletion のストリーミング対応

ストリーミングに対応しました!ストリーミングに対応した API を使うとレスポンスを IAsyncEnumerable<string> として受け取れるので完全にレスポンスが返ってくる前に順次結果を受け取れます。

ChatGpt とかを使っているとチャットメッセージがパラパラと表示されるような動きをしていると思うのですが、それを実現できます!!いいね。
サンプルを見たらわかると思うのですが IChatCompletionITextCompletionkernel.GetService<IChatCompletion>()kernel.GetService<ITextCompletion>() メソッドで取得して chatCompletion.GenerateMessageStreamAsync(chatHistory) textCompletion.CompleteStreamAsync(prompt, requestSettings) などのメソッドを呼ぶと IAsyncEnumerable<string> が取得できるので、あとは await foreach するだけで OK です。

サンプルはこちら。

TextCompletion
https://github.com/microsoft/semantic-kernel/blob/main/samples/dotnet/kernel-syntax-examples/Example32_StreamingCompletion.cs

ChatCompletion
https://github.com/microsoft/semantic-kernel/blob/main/samples/dotnet/kernel-syntax-examples/Example33_StreamingChat.cs

カスタムの HttpClient を使うことが出来るようになった

今までは HTTP 通信をする時に使う HttpClient はデフォルトのものを使うしかなかったのですが、指定できるようになっています。
AddAzureTextCompletionService メソッドに HttpClient を直接指定する感じです。指定しない場合は KernelConfigIDelegatingHandlerFactory を設定することでカスタムの HttpClient を作るようにすることもできます。ただ KernelConfig のほうをカスタマイズすると、デフォルトの DefaultHttpRetryHandlerFactory でリトライをするような仕組みが入っているので、そこらへんも気を付けてあげないといけないと思います。

serviceId がオプションになった

KernelConfigTextCompletionChatCompletion を登録するための AddOpenAITextCompletionService メソッドや AddAzureTextCompletionService メソッドの第一引数で指定が必要だった serviceId がオプションになりました。

今まではこんな感じでした。

var kernel = Kernel.Builder
    .Configure(config =>
    {
        config.AddAzureChatCompletionService(
            "サービスID", 
            "モデルデプロイ名",
            "https://リソース名.openai.azure.com/",
            new DefaultAzureCredential());
    })
    .Build();

最新ではこうなります。

// serviceId は第一引数じゃなくなった
var kernel = Kernel.Builder
    .Configure(config =>
    {
        config.AddAzureChatCompletionService(
            "モデルデプロイ名",
            "https://リソース名.openai.azure.com/",
            new DefaultAzureCredential());
    })
    .Build();

サービス ID を指定したい場合は、こんな感じでオプションの引数で指定します。

var kernel = Kernel.Builder
    .Configure(config =>
    {
        config.AddAzureChatCompletionService(
            "モデルデプロイ名",
            "https://リソース名.openai.azure.com/",
            new DefaultAzureCredential(),
            serviceId: "サービスID");
    })
    .Build();

このため、既存の Semantic Kernel を使っている場合は、この変更によってビルドエラーになります。

今後予定されているインパクトの大きな変更

IKernel のインターフェースをシンプルにしようとしているプルリクがあります。これがマージされると、結構インパクトデカいので注視しておきたいところです。

https://github.com/microsoft/semantic-kernel/pull/849

RegisterSemanticFunctionImportSemanticFunction になっていたりするのでメソッド名の置き換えを結構しないといけなくなります。気を付けないとね。

まとめ

Semantic Kernel はまだまだ開発が進んでいるので、今後も注目していきたいところですね。今回は AddAzureTextCompletionService などのメソッドのシグネチャーが変わったのがデカいですね。

今後もちょびちょび破壊的変更が入るのですが、まだまだプレビュー版なのでドンドン使いやすいインターフェースに変わっていって欲しいですね。

Microsoft (有志)

Discussion