コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

リクルートのAIを使ってAIについて分かった気になろう会

AIとはなんぞや

いやー最近AIってのが流行ってますね。僕もブログ長いことやっていて思うんですけどAIについてよくわかってないな〜って。なので良い機会なのでAIとは何かを調べてみました。

人間の知的能力をコンピュータ上で実現する、様々な技術・ソフトウェア・コンピューターシステム。応用例は自然言語処理機械翻訳かな漢字変換構文解析等)、専門家の推論・判断を模倣するエキスパートシステム、画像データを解析して特定のパターンを検出・抽出したりする画像認識等がある。

AIってこんなやつです。機械学習と似たようなこと言ってますね。それもそのはず、AIの中の一ジャンルが機械学習ですので似たようなことになるのです。

そういったわけでして今回はこのようなものを使って遊んでいきたいと思います。
PRODUCT|A3RT
リクルートの提供するAIです。


いくつか種類があるから複数記事にして書き放題。そんなことを思ってたんですがいくつかの機能は実用化し辛い感あるので発想力が試される……。そんな中で今回はこのAPIを使って遊んでいきます。
a3rt.recruit-tech.co.jp

Talk APIはChatbotを作成するためのAPIです。 Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。 Talk APIを活用したChatbotによって様々なアプリケーション上でユーザとの対話を自動化し、 どのようなタイミングにおいても即座にユーザからの問いかけに対して応答することができます。

これです。シンプルにチャットbot制作に役立つかもしれないあれです。

早速やってみます。チャットボットだということですので前回に引き続きチャットワークAPIとGASを利用してなんやかんやいじっていきます。

できました。実行するとこんな感じになります。上が前回いじった曜日をだすやつで、その文章に対しての返答です。

f:id:andron:20180416203914p:plain
……。は?何言ってんだこいつ(辛辣)?


以下、ソース。

function myFunction() {
  var token = "チャットワークトークン";
  var rid = "ルームID";
  var msg = getMonday()
  sendMessage(token,rid,msg);
  body = talkAPI(msg);
  sendMessage(token,rid,body);
}

// メッセージの送信
function sendMessage(token,rid,body){
  var params = {
    headers : {"X-ChatWorkToken" : token},
    method : "post",
    payload : {
      body : body
    }
  }; 
  var url = "https://api.chatwork.com/v2/rooms/" + rid + "/messages";
  UrlFetchApp.fetch(url, params);
}

// TalkAPI
function talkAPI(msg)
{
  var formData = {
    apikey: 'tokenAPIキー',
    query: msg
  }
  var options = {
    'method' : 'post',
    'payload' : formData
  }
   
  var result = UrlFetchApp.fetch("https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk", options)
  var jsonData = JSON.parse(result.getContentText());
  return jsonData.results[0].reply;
}

// 月曜判定
function getMonday(){
  var dateObj = new Date();
  var weekList = ["日", "月", "火", "水", "木", "金", "土" ];
  var weekDay = weekList[dateObj.getDay()];
  if(weekDay == "月"){
    bodyMsg = "今日は"+weekDay+"曜日です。";
  }else{
    bodyMsg = weekDay+"曜日です。";
  }
  return bodyMsg;
}

とりあえず今回はこんな感じです。前回メインにあった月曜判定が下に行きました。APIキー関連はそのうち別ファイルに分けて管理するなどを考えていきたい。コピペして貼り付けた時にうっかり公開する可能性が出てきて怖くなってきました。

あと長文を投げすぎるとAPIがうまく動いてくれないらしく、エラー(配列空になって)でおちるっぽいです。シリみたいに「すみません何言ってるかわかりませんでした」って言ってくれればいいのに……。まあ動くので今後、これ修正するかは検討ということでよろしくお願いします。



ちなみにエラーはこんな感じ。

undefined からプロパティ「0」を読み取れません。