流行りのChatbotツールを作ってみた!!
Chatbotによる会話ツールを作成したいために、本日はRECRUITが展開している、機械学習のソリューションであるA3RTの中の1つ、Talk APIを使ったことをまとめていきたいと思います
Chatbotを簡単に説明すると、会話を自動で行うことができるということですね
今回、私が作成するアプリでは、自動というのは、相手側のことを指します こちらから言葉を作成して送信をすると、自動で返事が送られてきます
Chatbot同士で会話もできますが、こちらは全自動で会話が繰り広げられます
Talk APIは「Chatbotを作成するためのAPIです。 Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。 」と紹介されています
Talk APIの使い方
エンドポイントのURL(https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk)にリクエストをPOSTで投げると、JSON形式でレスポンスがきます
リクエストで必須とされているのは、APIキーとquery(メッセージ内容)です
APIキーは、Talk APIのサイトに飛んで、画面下部にあるAPI KEY 発行から登録をすると配布されます
queryはアプリ内でテキスト入力をしてから、ボタンなどのイベントで送信するのが一般的かと思います
レスポンスでは、statusとmessageとresultsがあります
statusには、応答のステータスコードが入っています
messageには、ステータスコードに対応するメッセージが入っています
resultsには、さらにperplexityとreplyがあります
しかし、statusが正常の場合のみに限ります、エラーで返ってくると何も入っていないので、実装時には注意が必要です
perplexityは予測性能の数値が入っていますが、サイト内にも詳しい記述がないので、値がどのようなことを示すのかが分かりません
replyには、リクエストで送ったqueryに対する応答が入っています
レスポンスの一例がこちらです
{“status”: 0, “message”: “ok”, “results”: [{“perplexity”: 1.992911665639458, “reply”: “\u306a\u306b\u304b\u3042\u308a\u307e\u3057\u305f\u304b?”}]}
Talk APIの実装
実際にTalk APIにリクエストするところからレスポンスを受け取るところまでの実装を記述していきます
通信ライブラリには、OkHttp3を使用しています
public class TalkAysncTask extends AsyncTask<String, String, String> {
private static final String API_KEY = YOUR API KEY;
private static final String API_URL =
"https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk";
interface Callback{
void onReturn(String s);
}
private Callback callback;
TalkAysncTask(Context context){
callback = (Callback) context;
}
@Override
protected String doInBackground(String... params) {
RequestBody body = new FormBody.Builder()
.add("apikey", API_KEY)
.add("query", params[0])
.build();
Request request = new Request.Builder()
.url(API_URL)
.post(body)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.build();
try{
Response response = client.newCall(request).execute();
return response.body().string();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Log.d("debug", s);
callback.onReturn(s);
}
}
コードの説明をしていきます
API_KEYは、配布されたキーです
API_URLは、リクエスト先のURLです
レスポンスが来た時にActivityに通知をしたいので、コールバックとしてonReturnを実装しました
これは、onPostExecuteで使用します
通信部分では、RequestBodyに必要な情報を入れています
RequestにはPostで先ほど作成したbodyを送ること、送る先であるURLを設定します
これで、準備は完了なのでClientを作成して通信をします
レスポンスはResponseのbodyから取得できます
取得できたbodyをコールバックでActivityに通知して完了です
あとは、Activity側でやりたいことを実装するだけです
終わりに
初めてこのようなAPIを使用しましたが、利用する側は簡単に利用できるようになっていて、非常に便利だと思いました
しかし、Talk APIは出たばかりなのか会話が成り立たないことが多々ありますし、レスポンスのreplyの中身がないこともあります
これからの学習に期待したいです
Talk APIなどのChatbotは多くのことに利用されていますが、私としてはコミュニケーションをとるのが苦手な人の手助けなどできるアプリを作れたらと考えています しかし、頼ってばかりいると対人がより苦手になるかもしれませんね
火曜日担当:poppy
admin at 2017年05月16日 10:00:48