Semantic Kernel v0.13.442.1-preview がリリースされました
最近、ひいきにしている Semantic Kernel がバージョンアップしました。
以下のリンクがリリースノートのページになります。
とても長いリリースノートになっていますが、個人的に気になる部分だけをピックアップします。
gRPC をスキルとして読み込めるようになった
*.proto
ファイルを読み込んで Kernel にスキルとして登録できるようになりました。
サンプルも追加されています。
Open API にはもともと対応していたのですが gRPC にも対応してきたので、最近主流のサービスは大体取り込めるようになったんじゃないかと思います。
前々から地味に ChatGPT Plugin をスキルとして読み込むのにも対応していたので、一般的に多く使われているサービスをスキルとして取り込む機能は結構力入れてるんでしょうね。
Azure Cognitive Search を Semantic Memory として使えるようになった
データの検索元として Azure Cognitive Search が使える Semantic Memory の実装が追加されました。
サンプルはこちら。
Embeddings してデータを保存するのがセオリーですけど Azure Cognitive Search も検索に特化したサービスなので、それをそのまま使うというのもアリですね。
既存の Azure Cognitive Search があるならそれをそのまま使えるかもしれない?どうなんだろ?
TextCompletion と ChatCompletion のストリーミング対応
ストリーミングに対応しました!ストリーミングに対応した API を使うとレスポンスを IAsyncEnumerable<string>
として受け取れるので完全にレスポンスが返ってくる前に順次結果を受け取れます。
ChatGpt とかを使っているとチャットメッセージがパラパラと表示されるような動きをしていると思うのですが、それを実現できます!!いいね。
サンプルを見たらわかると思うのですが IChatCompletion
や ITextCompletion
を kernel.GetService<IChatCompletion>()
や kernel.GetService<ITextCompletion>()
メソッドで取得して chatCompletion.GenerateMessageStreamAsync(chatHistory)
textCompletion.CompleteStreamAsync(prompt, requestSettings)
などのメソッドを呼ぶと IAsyncEnumerable<string>
が取得できるので、あとは await foreach
するだけで OK です。
サンプルはこちら。
TextCompletion
ChatCompletion
カスタムの HttpClient を使うことが出来るようになった
今までは HTTP 通信をする時に使う HttpClient
はデフォルトのものを使うしかなかったのですが、指定できるようになっています。
AddAzureTextCompletionService
メソッドに HttpClient
を直接指定する感じです。指定しない場合は KernelConfig
の IDelegatingHandlerFactory
を設定することでカスタムの HttpClient
を作るようにすることもできます。ただ KernelConfig
のほうをカスタマイズすると、デフォルトの DefaultHttpRetryHandlerFactory
でリトライをするような仕組みが入っているので、そこらへんも気を付けてあげないといけないと思います。
serviceId
がオプションになった
KernelConfig
に TextCompletion
や ChatCompletion
を登録するための 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
のインターフェースをシンプルにしようとしているプルリクがあります。これがマージされると、結構インパクトデカいので注視しておきたいところです。
RegisterSemanticFunction
が ImportSemanticFunction
になっていたりするのでメソッド名の置き換えを結構しないといけなくなります。気を付けないとね。
まとめ
Semantic Kernel はまだまだ開発が進んでいるので、今後も注目していきたいところですね。今回は AddAzureTextCompletionService
などのメソッドのシグネチャーが変わったのがデカいですね。
今後もちょびちょび破壊的変更が入るのですが、まだまだプレビュー版なのでドンドン使いやすいインターフェースに変わっていって欲しいですね。
Discussion