はじめに
前回は、Wit.aiのサイトから実際にAppを登録し、インプットする文章を「インテント」と「エンティティ」に分けてWit.aiに認識させるところまで進めました。
今回は文章を外部サーバから送信し、Wit.aiからレスポンスを受信するところまで進めてみます。これができれば、後は受け取ったレスポンスの値によって、適切な外部APIと接続するなどして実際にサービスにしていくこともできそうです。
node-wit
Wit.aiは様々な言語で開発していくことが可能な人工知能ですが、今回はNode.js SDKである、node-wit
を利用してみます。
node-wit
https://github.com/wit-ai/node-wit
リポジトリをcloneしてきた後は、
yarn --save node-wit
yarn
で必要なモジュールをインストールします。
exampleを触ってみる
まずはReadMeにしたがってexampleにあるbasic.jsを実行してみます。
node examples/basic.js <MY_TOKEN>
MY_TOKEN
にはWit.aiのメニューにあるSetting画面からClient Access Tokenを取得し、指定します。
上記のコマンドをコンソールから実行すると、対話モードに入るので前回入力した「Turn on the TV」を入力してみましょう。
少し見辛いので整形します。
{
"_text":"Turn on the TV",
"entities":{
"state":[
{
"confidence":0.94501193062763,
"value":"on",
"type":"value"
}
],
"target":[
{
"confidence":0.94276322425952,
"value":"TV",
"type":"value"
}
],
"intent":[
{
"confidence":1,
"value":"turn"
}
]
},
"msg_id":"0TZTR7O1aHtRSwdJV"
}
なるほど。
前回学習させたインテントである「turn」とエンティティ「state」「target」がちゃんと認識されており、そのvalueが返却されています。
この中身を見つつ、ハンドリングしていく感じでしょうか。
内部処理を覗く
ちょっと気になるのでnode-witの中身を覗いてみましょう。
ざっとReadMeを読んだ感じだと、DEPRECATED
なAPIばかり。1
まともに使えそうなものはmessage APIくらいでした。
message APIの実装箇所をみると、以下のようになっています。
this.message = (message, context, n, verbose, junk) => {
let qs = 'q=' + encodeURIComponent(message);
if (context) {
qs += '&context=' + encodeURIComponent(JSON.stringify(context));
}
if (typeof n === 'number') {
qs += '&n=' + encodeURIComponent(JSON.stringify(n));
}
if (verbose != null) {
qs += '&verbose=' + encodeURIComponent(JSON.stringify(verbose));
}
if (junk != null) {
qs += '&junk=true');
}
const method = 'GET';
const fullURL = witURL + '/message?' + qs
const handler = makeWitResponseHandler(logger, 'message');
logger.debug(method, fullURL);
return fetch(fullURL, {
method,
headers,
})
.then(response => Promise.all([response.json(), response.status]))
.then(handler)
;
};
やってることはとても単純。
Wit.aiが提供しているテキスト解読用のAPI(message API)の高レベルAPIになっており、適切なクエリパラメータを付与しているだけのようです。
https://wit.ai/docs/http/20170307#get--message-link
おわりに
今回Wit.aiのほんの触りの部分だけ書いてみましたが、思ったより扱いやすく、1日もあれば簡単なBotサービスを作れそうな印象を受けました。
今後、時間を見つけて実際にサービス(Line Botなど)を作ってみたいと思います。
注釈
-
以前、Wit.aiには
Stories
と呼ばれる機能があり、会話用のAPI(converse API)も用意され、複雑な会話のコンテキストを実現できるように実装されていたようですが、よりシンプルなmessage APIを推奨する方向に進んでいるようです。(https://wit.ai/blog/2017/07/27/sunsetting-stories) ↩