DialogFlowを使ったBotを作る~超基本編~
DialogFlow (https://dialogflow.com/ )を使ってslackのBotを作ってみます。
DialogFlowは言語を解析して自然な会話を可能にするプラットフォーム(基盤になるもの)です。
元々はAPI.AIという名前だったらしいです。Googleが買収したもので、最近よく見るGoogleHomeでも使われているそうですよ。
Botに使える無料のAIを探していたときによく名前を目にしたこと、また日本語にも対応しているそうなのでこちらを使っていきたいと思います。
<slackのbotを作ろうと思った経緯>
訳あって早急にナウいものを触りたかったからです。それと、slackを使い始めたとき『この最初からいる”slackbot”ってやつは何なんだ 話しかけても返ってくる言葉がほとんど「何を言われたかわかりませんでした。ごめんなさい!」じゃないか!寂しい!』と感じたことが繋がったからですね。
仕事の合間に息抜きがてらにBotと遊べたら楽しいよなぁ~。そんな思いで作っていきます。
まずはGoogleアカウントを使って会員登録。あ~これはメルマガのことかな?とかポンコツ英語力を駆使してなんとか登録しました。
何が何だかわからんと思いつつ、こちら”DialogflowをSlackに連携させる - Qiita”を参考にslackと連携させてみました。
Appの欄に追加されてる!!ヤッター!
さっそく、Botさんとのウキウキ記念すべき初めての会話です!
・・・・・・・。
あーなるほど完全に理解したって気持ちで、デジャヴを感じました。
最初から基本的な会話ができるわけではないんですね。そりゃそうです。残念ながら世の中そんなに甘くありません。
しかし、何事も自分色に染めていくことは大大の大好きですので、テンションは下がりましたがやる気はでてきました。私はやりますよ!
まずはAgentを設定します
学習したことを詰め込む箱をつくるパートですね。Agentを増やせるということは、何個もBotが作れるのでしょうか?すごい!
一番上のAgentNameがBotの名前、DESCRIPTIONはBotの説明を入力します。これは自分の為の設定のようなので適当に設定しても動きそうですね。
Languageはもちろんjapaneseを選択しました。あとはよくわからないので触っていません。"触らぬ神に祟りなし"が私のモットーです。
次はIntentsとEntitiesの設定です。
修羅国無知代表の私 初見の感想は『わーなんだこれ』です。
”チャットボットをAIでもっと素敵にする!自然言語処理の仕組み - Qiita”
そんな私にでもとても分かりやすく、丁寧に説明されていました。
つまりインテントとは、
Botが「この人は何をしたいのかな?」と思う時の何をしたいの部分に当てはまるもの
エンティティとは、
インテントを判別するキーワードのこと
であるということです。
とりあえず挨拶はさせたいですよね。マナーがなってない子には育てたくないので・・・
では、Entitiesを設定します。
なぜならば、最初にIntentsを設定するとEntitiesを作れと怒られるからです。(実体験)
とりあえず、こんなものかな と!
挨拶をする際にキーワードになる単語を登録しました。
EntityNameは登録する単語を一言で表す言葉(日本語不可)、reference valueは登録したい単語、synonymには言い換えなどブレそうな言葉を入力します。
まとめていた方が見やすくて便利というだけで、ここでいう「おはよう」や「こんにちは」を別のEntityに登録しても問題なさそうな感じがします。難しく考えずにパパッと登録しても大丈夫そうですね!後から変更できますし!
次にIntentsを設定します。
IntentNameではここで何をするか(自分が分かれば良い)、User saysには実際にどんな言葉を投げかけるかの例(増やすと精度がUP)を入力します。Action欄の表のようなものは、Entitiesで登録したものと一致した場合自動でポンと出てきました。
Responseには、この「おはようをする」Intentに反応したとき返す文章を登録できます。現在3つ登録していますので、この3つの中からランダムで1つ返事を返します。
これで、これできっとBotちゃんは返事を返してくれるはず・・・・
ドキドキのお話しコーナー 結果は
成功!
ヤッター!!!!
ちゃんと挨拶に反応してくれました。
ほとんど設定していない状態で、どこまで反応してくれるか試してみました。
なんと”おは”と入っていても、おはしには反応しませんでした!!
synonymに登録した単語が入っていても、これは違うと判断してくれるんですね。優秀~!
でもおはしもは明らかに挨拶ではありませんね・・・このあたりの精度の高め方はまだわからないので勉強していきたいと思います。
今回はここで終わりとさせていただきます。
書かなきゃと思って書き始めた記事ですが、書き始めるととても楽しいですね。理解も深まりますし。これがアウトプットするということ…!
ところでWebHookというものを使うと、より細かい設定ができるそうです。もう少しIntentを増やしたら触ってみようと思います。
Botの頭が良くなったらまた報告していきます。
ではまた
おまけ
解明した謎
Action欄のREQUIREDにチェックを入れたときに出てくる「Prompts」のことです。
全く関係のない内容を入力したら返ってくるものだと思っていたのですが
そういうわけではなかった…!(真面目な対応が恥ずかしい)
実際はUser saysに登録された内容の内、ActionのEntityにある単語と一致しなかった場合にPromptsの内容が返ってくるようです。
なるほど~!