LoginSignup
3
3

More than 5 years have passed since last update.

人工知能API「Wit.ai」で遊ぶ (2)

Posted at

はじめに

前回は、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」を入力してみましょう。

すると、以下のようにレスポンスが返却されました。
スクリーンショット 2018-01-06 3.56.28.png

少し見辛いので整形します。

{  
   "_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の実装箇所をみると、以下のようになっています。

node-wit/lib/wit.js
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など)を作ってみたいと思います。

注釈


  1. 以前、Wit.aiにはStoriesと呼ばれる機能があり、会話用のAPI(converse API)も用意され、複雑な会話のコンテキストを実現できるように実装されていたようですが、よりシンプルなmessage APIを推奨する方向に進んでいるようです。(https://wit.ai/blog/2017/07/27/sunsetting-stories

3
3
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
3
3