LoginSignup
1
0

More than 5 years have passed since last update.

Azure Logic AppsでLUISを使ってみた

Last updated at Posted at 2018-03-09

この記事は、AIスピーカーとFlashAirで鉄道模型を動かしてみたの参照記事です。

Azure Logic Appsとは

 Logic Appsについては、こちらの記事をお読みください。

今回作りたいもの

 今回作りたいものは、Webリクエストを受け付けて、受け取った文字列をLUIS - Language Understandingに受け渡し、文字列をLUISで分析することで任意のEntity(単語)を取得し、これをJSONファイルに整形して、他のWeb APIに送信するものです。

LUIS

 あらかじめLUISで必要な文章分析のアプリケーションを作っておきます。ここでは「MiniTrainControl」というアプリケーションを作成し、「controlSpeedTrain」というIntentを作成しました。このIntentには、Entityとして速度の値を示す「trainSpeed」と方向を示す「trainDirection」を定義しています。
 LUISアプリケーションの作成方法は、こちらのサイト「LUIS 入門(Cognitive Services - 2017年12月版 - 1/2)」が参考になります。

Logic Appsを作成する

全体

 今回作成するLogic Appsの全体は下図のようになります。
image4.png

トリガー

 今回作成するLogic Appsのトリガーは「HTTP要求の受信時」とします。HTTP要求ではJSONファイルをPOSTで受け取るようにします。
logicapps1.png

 要求本文のJSONスキーマは以下のように設定します。

schema.json
{
  "properties": {
    "CmdMsg": {
      "type": "string"
    },
    "Content-Type": {
      "type": "string"
    },
    "ServerName": {
      "type": "string"
    }
  },
  "type": "object"
}

変数の設定

 LUISで分析して文字列から取り出した単語を代入する変数を設定します。変数はtrainSpeedとtrainDirectionの2つで、いずれも種類は文字列としました。初期値としてそれぞれ"000"と"0"を設定しておきます。

logicapps2.png

LUISとの連携

LUIS - Get predictionの追加

アクション「LUIS - Get prediction」を追加します。
logicapps3-1.png

あらかじめ作成したLUISの連携

あらかじめ作成したLUISアプリケーション
のAPI KeyをLUISのポータルサイトで確認します。SETTINGSの下にあるApp Setting画面に書かれているApplication IDがそれに当たります。
luis1.png

「LUIS - Get prediction」の「API Key」欄にApplication IDの値をコピー&ペーストします。接続名はわかりやすい任意のもので構いません。入力したら作成ボタンを押します。
logicapps3-2.png

APP Idの選択

次に、App Idのプルダウンから今回利用するLUISアプリケーションを選択します。
logicapps3-3.png

入力値とIntentの選択

次にUtterance欄にLUISアプリケーションに送信する入力値を記載します。ここではHTTP要求の受信データのJsonデータのCmdMsg項目を指定します。
CmdMsgには、「速度120で前に進め」といったAIスピーカーで認識した文言が入ってくる想定です。
またDesired Intentでは、解釈するIntentを指定しておきます。ここでは、あらかじめ作成したIntentのうち列車の速度制御用のIntentとして「controlSpeedTrain」を指定しています。
logicapps3-4.png

LUISアプリケーションからの戻り値から速度値と方向を取り出す

LUISの戻り値のなかのEntityを取り出すことで、速度値と方向を取得できる。「Entities Array」にEntityが複数格納されているため、これをFor eachで一つずつ取り出す。
条件式で、「Entity Type」が「trainSpeed」であれば速度値なので「Entity Value」に格納された値を取り出して、さきに宣言しておいた速度変数「trainSpeed」に代入する。
また「Entity Type」が「trainDirection」であれば方向なので「Entity Value」に格納された値を取り出して、さらに条件式で「前」か否かを判定し、さきに宣言しておいた方向変数「trainDirection」に「前」なら「0」、それ以外なら「1」を代入する。
logicapps3-6.png

Azure Functionsとの連携

つぎにAzure Functionで作成したWebAPIを呼び出します。
アクション「Azure Functions」を選択すると、Logic Appsと同じサブスクリプションのAzure Functionsのアプリケーションが表示されるので、適したものを選択します。
logicapps3-7-1.png

つぎにあらかじめ作成されている関数が表示されるので、適したものを選択します。
logicapps3-7-2.png

最後に、選択した関数を呼び出す際に渡すデータを、「要求本文」にJSON形式で記載します。ここではデバイス名「ServerName」と方向[trainDirection」、速度「trainSpeed」を渡すように記載しています。
logicapps3-7-3.png

動作確認

以上でLogic Appsの作成は完了です。
動作確認してみましょう。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0