リクルートの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を叩いて会話させてみました
コード
Ruby
#!/usr/bin/env ruby
# -*- encoding:utf-8 -*-
# use ruby 2.0 lang.
require 'docomoru'
require 'json'
require 'net/https'
require 'uri'
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'
uri = URI.parse(URL_Recruit)
client = Docomoru::Client.new(api_key: KEY_DoCoMo)
response = nil
request = Net::HTTP::Post.new(uri.request_uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
#http.set_debug_output $stderr
text = ARGV.shift || "良いお天気ですね"
100.times do |count|
response = client.create_dialogue(text)
hash = response.body
text = hash["utt"]
printf "(Do) %s\n" % text
params = {apikey: KEY_Recruit, query: text}
request.set_form_data params
begin
http.start do |h|
response = h.request(request)
json = JSON.parse(response.body)
text = json["results"][0]["reply"]
puts "%s (Re)"%(text).rjust(50)
end
rescue
puts response.body
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) TVはよく見ますか
そうですね (Re)
(Do) ですね
そうでしょう (Re)
(Do) うん
どうしました? (Re)
(Do) なんでもないよー
{"status": 2000, "message": "empty reply"}
(Do) そっか
ご理解ください (Re)
・
・
・
みたいな感じです
{"status": 2000, "message": "empty reply"}
というのがありますが、リクルートのAPIはときおり無言で返すことがあるためです。
100.timeのループよりloop do
のようが面白そうですが、動くことを確認してから変更してください。
ENV[ ]使ってAPI KEYを取得
する方がより良いのですが、とりあえずハードコーディングしています。
発展途上
ですね。どちらも利用者側で学習させられないのが残念です。
alien
13Contribution