Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@h-nagao

LUISとPower Automate使って、2つの価格を比較するLINE Botつくってみた

やってみたこと

800ml入りの詰め替え洗剤と、600mlの非詰め替え(ボトル付き)はどっちが安いのだろう?と思うことがよくあります。
そういう、単価の計算って、別に電卓たたけばいいのだけどちょっとめんどくさいですよね。
というわけで、単価の計算をやってくれるLINE botを作ってみました。

使った素材はこちら

  • Power Automate (要Premium)
  • LUIS (AzureのCognitive Service)
  • LINE Messaging API

以上
LUISは入力されたメッセージから、値段部分と数量 (200mlとか500gとか10個とか)を読み取るために利用しました。LUISによる文章解析の結果、2つずつ数量と値段が取れている前提で、Power Automate上で単価を計算して、どちらが安いのかをReplyで返しています。

image.png

LUIS部分

LUIS部分は気合です。ひたすら例文を入れて、数量と価格をマークしていきます。
LUISの導入部分は、少し画面が変わっていますが、こちらの記事が分かりやすいです。

自分用メモ的にLINE送信した予定をAIで読み取ってGoogleカレンダーに自動登録しよう

実際のAuthoring画面が以下です。

image.png

※上図ではある程度調教しているので、例文を入れると、どういう要素なのか、よみとってマークしてくれています。
青い下線が引かれている部分を、数量なのか価格なのか、指定していきます。

傾向としては、文章の先頭に1桁の数量が来ると、認識確率がすごく下がりました。なので、「ねえ、XX」のようなワードをユーザーには入れてもらう工夫が必要そうです。

Power Automateパート

Power Automateパートは簡単です。すでにLINE Messaging APIのカスタムコネクタを作っているので、リプライはメッセージを入れるだけです。

image.png

前半、Webhookの受信は、Messaging APIの仕様どおり。
受け取ったメッセージをそのままLUISのインプットにします。
これで結果が返ってくるのですが、結果は以下のような配列で返されます。

luis_output.json
[
  {
    "entity": "5",
    "type": "amount",
    "startIndex": 3,
    "endIndex": 3,
    "score": 0.5533202
  },
  {
    "entity": "1 0",
    "type": "amount",
    "startIndex": 15,
    "endIndex": 16,
    "score": 0.9669346
  },
  {
    "entity": "安い",
    "type": "highlow",
    "startIndex": 31,
    "endIndex": 32,
    "score": 0.9992584
  },
  {
    "entity": "3 5 0 0 円",
    "type": "price",
    "startIndex": 7,
    "endIndex": 11,
    "score": 0.9945259
  },
  {
    "entity": "7 5 0 0 円",
    "type": "price",
    "startIndex": 20,
    "endIndex": 24,
    "score": 0.996291
  }
]

※Quantityじゃね?とかはまあスルーしてください。。

注意しなければならないのは、数量、価格いずれも数字の間に半角スペースが入る点です。実際に割り算するとき(単価にするとき)は、スペースを除去する必要があります。

これらの結果から、最初の数量&価格の組み合わせ と 後ろの数量&価格の組み合わせにします。

image.png

LUISの解析結果自体は、精度の情報とか、どこに該当するかとか、あるいはどのタイプの読み取り結果なのかをすべて含んでいます。
後続で計算しやすいように、価格や数量だけの配列を生成し、かつスペースを除去します。

これにはSelect(選択)アクションを利用しています。
あとは素直に計算。Power Automateでは割り算はdiv()関数です。

おわり

こんな風に、かなり短いフローと、関数を少しつかうだけで、単価比較のLINE Botが完成しました!

ポイントはLUISで頑張って調教することと、LINE部分を簡単にするために、カスタムコネクタを使うところです。

以上、生活お助けBotの概要でした。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
h-nagao
Power Platform好きです。 #MoreBeerMorePower 新しい投稿は、はてなブログのほうにしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?