C# Semantic Kernelを使ってOpenAIのGPTを呼び出す|第2回Native Function(Skill)作成

最近OpenAIを含めたAIの勉強を始めたので、その内容をメモ。

今回はNative Function(Native Skill)を実装してみる。

スポンサーリンク

事前準備

事前準備としてSemantic Kernelをインストールしたコンソールアプリを用意しておく。

Native Function(Plugin)の構築

今回はこちらの外部APIを使用させていただいて、郵便番号から住所を取得するPluginを作成する。
郵便番号検索API - zipcloud
日本郵便が公開している郵便番号データを検索する機能をRESTで提供しています。
まずはこんな感じでフォルダを切って、中に.csファイルを作成する。
csファイルの中身はこんな感じでAPIをコールして住所を持ってくるだけの単純なつくり。※エラー時の処理とかかなり適当
「Description」Attributeを使ってPluginの説明を付与してあげる。
APIの戻りを受け取るクラスたち

これでNative Functionの構築は完了!

呼び出す側の実装

呼び出す側の実装はこんな感じ。
まずはネイティブスキルをカーネルに「ImportSkill」で登録する。

// ネイティブスキルの読み込み
var zipCloudPlugin = kernel.ImportSkill(new Plugins.ZipCloudPlugin.ZipCloud(), "ZipCloudPlugin");
そしたらSemanticFunctionと同様に、引数を作成して、RunAsyncで名前指定で実行する

// パラメータの作成
var input = new ContextVariables("7830060");

// ネイティブスキルの呼び出し
var context = await kernel.RunAsync(input, zipCloudPlugin["GetAddress"]);

実行結果

ということで、呼び出してみると無事郵便番号から住所を取得できることを確認。

次回はPlannerを使って、登録したプラグインたちを上手いことコールしてユーザーの入力に応える処理を作ってみる。

おまけ:Native Functionの引数に説明を付けたいときや、複数引数を渡したいとき

Native Functionの引数に説明を付けたいときや複数引数を渡したいときは、「SKContext」オブジェクトと、「SKParameter」Attributeを使用するらしい。
呼び出す側はこんな感じで引数を渡す。

コメント

タイトルとURLをコピーしました