- tech系
Dialogflow(api.ai)とCloud Functionsを使ってチャットボットを作ってみた
こんにちは。クラウドエース編集部です。
最近チャットボットの話題をよく聞きます。本記事では、DialogflowとCloud Functionsを組み合わせる事で簡単にチャットボットを作成する事が出来るので紹介していきたいと思います。
Dialogflowとは?
機械学習をし、人間が何を言おうとしているのかという言葉を解析するプラットフォームです。
例えば、「お腹すいた」という言葉は様々な伝え方があると思います。それは「おなかすいた」、「腹減った」や、「何か食べたい」だったりします。
人間ならばこれらの言葉の意味を理解して「ああ、この人はお腹がすいているんだ」と理解することが出来ますが、機械ではそう簡単にはいきません。
機械学習を利用して、サンプルデータからパターンを見つけ出し、そのパターンから予測する事で、質問の意図を正確にシステムへ伝えられるようにし、質問の意図に合致した回答を導き出すことが必要になります。
今回は、Dialogflowを活用して少しマイナーなカタンやアグリコラといったボードゲームの質問に答えてくれるチャットボットを作ってみたいと思います。趣味全開ですいません。
基本的な概要としては以下の図の様になります。
では早速作っていきましょう
エージェントの作成
まず以下URLからDialogFlowにログインします。
https://console.dialogflow.com/api-client/#/login
「Sign in」ボタンを押下しましたら以下画面に移るので、「Create Agent」を押下
エージェント作成画面に移るので
以下を設定してください。
- AgentName:エージェント名
- DESCRIPTION:このエージェントの説明
- DEFAULT LANGUAGE :使用言語
設定しましたら、右上の「SAVE」を押下でエージェントが作成されます。
Entitiesの登録
Entitiesとは会話の要素です、例えばご飯という要素ならば白米、焼き魚、野菜などがご飯に当たります。その要素をDialogflowに認識させるための作業です。
まず、左側のリストから「Entities」を押下し、表示された画面から右上の「CREATE ENTITY」を押下する事でEntitiesを作成する事が出来ます。
今回はEntityNameにboardgameを指定しました。
boardgameを構成する物にはパンデミックやアグリコラというboardgameの名前を指定します。
作成したら右上の「SAVE」を押下しましょう。
Intentsの登録
Intentsとは会話の流れです。「おはよう」とか「こんにちは」なら挨拶という会話の流れになります。今回は、ボードゲームの質問に答えてくれるチャットボットですので、boardgame_questionというIntentsを作成します。
まず左側のリストから「Intents」を押下し、その後に「CREATE INTENT」を押下します。
Intent nameはボードゲームに対する質問なのでboardgame_question。
User saysはこの会話を始める時に使われそうな質問の一覧です、このリストの数が多ければ多いほどDialogflowは学習して行きます。User saysを登録した時に対応するEntityがあれば、黄色で囲われ、Actionの場所に自動的に登録されます。
Text responseはこの会話の回答です、複数登録するとランダムで回答が変化します。
作成したら右上の「SAVE」を押下しましょう。
これだけでもチャットボットとしては機能します、試してみましょう。
右側にあるTry it nowに質問を投げかければ、もしIntentsに対応する質問であれば、Dialogflowが判断して回答をしてくれます。
成功です。
先ほどのUser saysに登録していなかった質問にも答える事ができました。
WebHookの作成
これでは登録した回答しか答える事は出来ません。
そこで、WebHookを使ってもっと細かく回答出来るようにしましょう。
まずCloud functionsを作成します。
GoogleCloudConsoleからCloud functionsを選択し、関数を作成を押下します。
名前:chatbot-test
トリガー:HTTPトリガー
URL:後で必要になるのでメモしておきましょう
ソースコード:インラインエディタ
index.js
exports.chatbottest = function chatbottest(req, res) {
let mes;
if(!req.body.result.parameters.boardgame){
mes = “パンデミック、アグリコラ、カタンについてお答えできます。”;
}
else if(req.body.result.parameters.boardgame == “パンデミック”){
mes = “病原体から世界を救うボードゲームです”;
}
else if(req.body.result.parameters.boardgame == “アグリコラ”){
mes = “荒れ果てた土地で豊かな農場を作るゲームです”;
}
else if(req.body.result.parameters.boardgame == “カタン”){
mes = “未開拓のカタン島で部族を栄えさせるゲームです”;
}
else{
mes = “すいません、知らないボードゲームです”;
}
res.setHeader(‘Content-Type’, ‘application/json’);
res.send(JSON.stringify({“speech”: mes, “displayText”: mes}));
};
package.json
{
"name": "sample-http",
"version": "0.0.1"
}
ステージバケット:dialogflow-test
実行する関数:chatbottest
ソースの内容ですが、Dialogflowから渡されたparametersにboardgameが入力されていたら各ボードゲームの説明をmesに入れてDialogflowに返す、無かったらparametersの入力を促す質問を返すというだけの単純な物です。
ステージバケットが存在しなければ「参照」ボタン押下からバケットの作成が可能です。
以上でCloud Functionsの作成は終了です。
一番下の「作成」を押下してFunctionを作成しましょう。
名前の横に緑色のチェックが付いていればOKです。
Webhookの設定
左側のリストから「Fulfillment」を押下してWebhookをENABLEDにします
URLの欄に先ほどメモしたURLを張り付けて
画面下部にある「SAVE」を押下します。
次にIntentsのWebhook設定です
先ほど設定したboardgame_questionの下部のText responseをすべて削除しましょう。
そしてUse webhookにチェックを付けます。
これで完成です!
ではDialogflowにボードゲームの事を聞いてみましょう
ボードゲーム個別の質問に答える事に成功しました!
PARAMETERのVALUEが変われば回答も対応した回答に変わります。
Cloud Functionsに渡した時点でプログラム側で色々といじれる様になるのでDBと接続して回答をストックするとか、他のAPIと連携してもっと面白い物が作れると思います。
まとめ
DialogflowとCloud Functionsを使って簡単にチャットボットを作成する事が出来ました。
もっと詳しく知りたいという方は下記参考リンクをご参照ください。
今回ご紹介したプロダクトの他にも、Google Cloud では豊富な機械学習サービスが提供されています。クラウドエースでは、豊富な知見を持つエンジニアがご要望にあわせて最適な形で開発・技術支援をいたします。
世界最先端の機械学習テクノロジーを導入したい!という方におすすめ
参考リンク
Dialogflow
https://dialogflow.com/docs/getting-started/basics
Cloud Functions
https://cloud.google.com/functions/docs/
Google Cloud ならクラウドエース
クラウドエースは Google Cloud に特化したシステムインテグレーターです。国内トップクラス、400社以上の支援実績と知見をもとに、Google Cloudの導入から設計開発まであらゆるご要望にお応えいたします。
Google Cloud やクラウドに関するご不明点がございましたら、お気軽にご相談ください。
こちらの無料資料では、Google Cloud とクラウドエースについてさらに詳しく記載していますので、ぜひ合わせて御覧ください。
この記事を共有する