ごった煮

色々な事を書いてます

Botにメッセージ解析機能を付ける

Botを強くするためにLUISと組み合わせます。

LUISとBot Framework

Bot Frameworkには、LUISと直接やり取りするのを簡単にしてくれるライブラリがあるので難しいことを考えずにLUISを呼び出すことができます。

Botが受け付けたメッセージをLUISに解析させてBotを強化します。

 

ちなみに今回使うLUIS Appは、以下のような感じです。

image

早速呼び出してみる

今回のコードは、こんな感じです。

using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Luis;
using Microsoft.Bot.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;

namespace HelloBot.Controllers { public class LuisBotController : ApiController { public async Task Post([FromBody]Message message) { var AlarmDialog = new SimpleAlarmDialog();

        return await Conversation.SendAsync(message, () => new SimpleAlarmDialog());
    }
}

[LuisModel("App Id", "Key")]
[Serializable]
public class SimpleAlarmDialog : LuisDialog<object>
{
    [LuisIntent("StartTimer")]
    public async Task StartTimer(IDialogContext context, LuisResult result)
    {
        string message = $"Intent is StartTimer";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }

    [LuisIntent("StopTimer")]
    public async Task StopTimer(IDialogContext context, LuisResult result)
    {
        string message = $"Intent is StopTimer";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }

    [LuisIntent("None")]
    public async Task None(IDialogContext context, LuisResult result)
    {
        string message = $"Intent is None";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }

    [LuisIntent("SetTimer")]
    public async Task SetTimer(IDialogContext context, LuisResult result)
    {
        string message = $"Intent is SetTimer";
        await context.PostAsync(message);
        context.Wait(MessageReceived);
    }
}

}

LuisModelのApp IdのところとKeyのところは、Luis AppのダッシュボードからIDとKeyが取得できるのでそれを設定します。

ダッシュボードのApp Settingsから確認できます

image

メソッドに

[LuisIntent("Intent名")]

を付けると、LUIS Appへの問い合わせの中で一番確率の高いと判定されたIntent名の属性がついたメソッドにルーティングされます。

[LuisIntent("")]

として、ほかのメソッドに属性を付けないととりあえずこの属性のついたメソッドにルーティングされます。

 

BotへのメッセージがそのままダッシュボードでAPIテストをした時のQueryになるので以下のようにメッセージを投げるとレスポンスが得られます。

問い合わせるとこんな感じです。

image

 

まとめ

これでBotにメッセージ解析機能を簡単に実装できるようになりました。

メッセージ解析ができればBotの機能に幅が広がるのでいろいろおもしろいものが作れる(かも)知れないですね