かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Bot Framework のサンプルの QnA Maker の Active Learning をデプロイする方法

最近追加された Active Learning ですが簡単に言うと利用状況を見て、この QA にはこんな質問追加したらいいんじゃないの?っていうのをポータルに出してくれるみたいですね。

docs.microsoft.com

暗黙的フィードバックと明示的フィードバックがあるみたいで明示的フィードバックとかを送るには Train API 叩く必要があるのかな。

ここらへんを叩くためのサンプルが以下になります。

github.com

曖昧な回答が複数件帰ってきたらユーザーに選択肢を出してくれて、ユーザーが質問を選択すると、その内容が Train API に送られます。

こいつをクローンしてデプロイするには以下の手順を踏めば動きました。

  • QnA Maker を適当に準備して発行しておく。EndpointKey とかはメモっておく
  • qnamaker-activelearning.bot の qna の定義の各種設定を自分の QnA Maker のものに書き換える
  • Azure にボットチャンネル登録とWeb Appを準備
  • production の endpoint を追加して上記で作成したものを設定する
  • Startup.cs が production のエンドポイントの定義を探すようになってないので以下のように追加する
private readonly bool _isProduction;
public Startup(IHostingEnvironment env)
{
    _isProduction = env.IsProduction();
    // 省略
}

public void ConfigureServices(IServiceCollection services)
{
    // 省略

    services.AddBot<QnAMakerActiveLearningBot>(options =>
    {
        // 省略

       // Retrieve current endpoint. ここに production のときの考慮のコードも追加
       var service = botConfig.Services.Where(s => s.Type == "endpoint" && s.Name == (_isProduction ? "production" : "development")).FirstOrDefault();
        // 省略
    });
    // 省略
}

あとはデプロイしてお好きなチャンネルから動作確認で OK