ドコモとリクルートの対話

#リクルートのAI

リクルートが無料のAIを公開しました
https://a3rt.recruit-tech.co.jp/
その中に会話AI(TalkAPI)があります
https://a3rt.recruit-tech.co.jp/product/talkAPI/

少し触ってみましたが、完成度は低いと感じました。

#ドコモのAI

だいぶ前ですがドコモも雑談対話のAPIを公開しています（2013年頃）
https://dev.smt.docomo.ne.jp
雑談対話APIがあります
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario

#比較してみるか．．．あっ、どうせなら会話させちゃえ
ということで、ドコモとリクルートのAPIを叩いて会話させてみました

##コード
```rb:Ruby
#!/usr/bin/env ruby
# -*- encoding:utf-8 -*-
# use ruby 2.0 lang.

require 'docomoru'
require 'json'

URL_DoCoMo  = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue'
KEY_DoCoMo  = 'XXXXX YOUR API KEY OF DOCOMO XXXXX'
URL_Recruit = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk'
KEY_Recruit = 'XXXXX YOUR API KEY OF RECRUIT XXXXX'

client = Docomoru::Client.new(api_key: KEY_DoCoMo)
response = nil

text = ARGV.shift || "良いお天気ですね"

loop do
    response = client.create_dialogue(text)
    hash = response.body
    text = hash["utt"]
    puts "(Do) %s" % text
    #%x(say -v Otoya #{text}) # macOSなら発話させられます

    params = {apikey: KEY_Recruit, query: text}
    begin
        response = Faraday.post URL_Recruit, params
        json = JSON.parse(response.body)
        text = json["results"][0]["reply"]
        puts "%s (Re)"%(text).rjust(60)
        #%x(say -v Kyoko #{text}) # macOSなら発話させられます
    rescue
        puts "... (Re)".rjust(60)
        #{"status": 2000, "message": "empty reply"}とリクルートのAPIはときおり無言で返すことがあるためです。
    end
end
```

##結果
```
(Do) お天気は爽やかですね
                                          そうだといいですね (Re)
(Do) 何かお話したいことありますか？
                                                 ありません (Re)
(Do) えー
                                      何かお困り事でしょうか? (Re)
(Do) 海と山どっちに行きたい？
                                         どちらも素敵ですよね (Re)
(Do) 今日も買い物には行かれたんですか？
                                              いいと思います (Re)
(Do) ですよね
                                      納得していただけましたか (Re)
(Do) 学生時代はサッカーをしていましたよ。
                                         私にもわからないです (Re)
(Do) これからの旅行の予定か、思い出に残っている旅行を教えて下さい！
                                            それはいいですね (Re)
(Do) いいいんですか？？でしょ
                                         何があったのですか? (Re)
(Do) わからん
                                       うーんもっと勉強します (Re)
(Do) 話は変わりますけど、世界一広い湖は、カスピ海だって知ってました？
                                          あるかどうかですよ (Re)
(Do) なに
                                       いえ少し気になりまして (Re)
(Do) ＴＶはよく見ますか
                                                そうですね (Re)
(Do) ですね
                                              そうでしょう (Re)
(Do) うん
                                             どうしました? (Re)
(Do) なんでもないよー
                                                     ... (Re)
(Do) そっか
                                             ご理解ください (Re)
・
・
・
```
みたいな感じです

### ENV[ ]使ってAPI KEYを取得
する方がより良いのですが、とりあえずハードコーディングしています。

## 発展途上（か限界か）

+ どちらも文脈は把握できてません。REST APIだからというより、やはり技術的に限界があるようです。
+ どちらも利用者側で学習させられないのが残念です。
+ しばらく様子を見てると、ドコモの方が優れているように感じます。（約3年前にも使ってみましたが当時と大差ありませんので、3年のアドバンテージというわけではなさそうです）
+ 他にもAPIがあるので鼎談とか座談会なんかも作れそうです。参考[BOTで使える会話API・ライブラリ・サービスまとめ](http://qiita.com/kenzo0202/items/582e3a5e06b64ab24964)

#やっぱり比較してみた

##コード
```rb:Ruby
#!/usr/bin/env ruby
# -*- encoding:utf-8 -*-
# use ruby 2.0 lang.

require 'docomoru'
require 'json'

URL_DoCoMo  = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue'
KEY_DoCoMo  = 'XXXXX YOUR API KEY OF DOCOMO XXXXX'
URL_Recruit = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk'
KEY_Recruit = 'XXXXX YOUR API KEY OF RECRUIT XXXXX'

client = Docomoru::Client.new(api_key: KEY_DoCoMo)
response = nil

DATA.read.each_line do |text|
    puts text

    response = client.create_dialogue(text)
    hash = response.body
    puts "(Do) %s" % hash["utt"]

    params = {apikey: KEY_Recruit, query: text}
    begin
        response = Faraday.post URL_Recruit, params
        json = JSON.parse(response.body)
        puts "(Re) %s" % json["results"][0]["reply"]
    rescue
        puts "(Re) ..."
    end
end
__END__
おはよう
こんにちは
こんばんは
おやすみ
今日は何日だっけ？
いま何時？
明日は何曜日？
総理大臣は誰？
フランス大統領には誰が当選した？
ドコモの社長は誰？
リクルートの社長は誰？
富士山の高さは？
世界で一番高い山は何？
日本で一番長い川は？
日本の人口は何人？
世界の人口は何人？
明日の天気はわかる？
今日の株価の終値は？
為替は1ドル何円？
おすすめの映画は？
音楽は何がヒットしてる？
```

##結果
```
おはよう
(Do) おはよんっ
(Re) おはようございます
こんにちは
(Do) こにゃにゃちわ
(Re) こんにちは
こんばんは
(Do) こんばんはーです
(Re) こんばんは
おやすみ
(Do) おやすみありがと?
(Re) ...
今日は何日だっけ？
(Do) 和食、洋食、中華どれが食べたいですか？
(Re) ...
いま何時？
(Do) よく旅行するんですか？
(Re) ごめんなさい今時計を持っていないのでわかりません
明日は何曜日？
(Do) 2017年 5月12日 金曜日です
(Re) 確認します
総理大臣は誰？
(Do) [内閣総理大臣] 安倍晋三だと思う
(Re) 私にはわかりません
フランス大統領には誰が当選した？
(Do) ルイナポレオンがフランス大統領に就任だそうです
(Re) 私にもわからないです
ドコモの社長は誰？
(Do) [株式会社NTTドコモ]　吉澤和弘（代表取締役社長）だと思う
(Re) ごめんなさい私にはわからないです
リクルートの社長は誰？
(Do) [株式会社リクルートホールディングス]　峰岸真澄（代表取締役社長）です
(Re) ごめんなさい私にはわからないです
富士山の高さは？
(Do) 3,776mです
(Re) どうでしょうか
世界で一番高い山は何？
(Do) エベレストです
(Re) いろんなことがありますね
日本で一番長い川は？
(Do) 信濃川です
(Re) 私はそんなに嫌いじゃないですよ
日本の人口は何人？
(Do) 128057352人だと思う
(Re) ごめんなさい私にはわからないです
世界の人口は何人？
(Do) 声をかけられるのです
(Re) あなたはどうですか?
明日の天気はわかる？
(Do) 昔の人はつばめの飛び方を見て、明日の天気がわかったんだって。
(Re) お天気だといいですね
今日の株価の終値は？
(Do) 最近気になるニュースなどはありますか？
(Re) ありますよ
為替は1ドル何円？
(Do) 円安傾向が続きます
(Re) ごめんなさい私にはわからないです
おすすめの映画は？
(Do) 映画が良いですね
(Re) 映画館でみるのもいいですね
音楽は何がヒットしてる？
(Do) 音楽は洋楽が好きですね
(Re) あなたはどうですか?
```