一般AIと神のAIを対話させてみた


# はじめに
2017年にFacebookが行なったとある実験が話題になりました。
2つのAI同士で会話させるという実験をしたところ、途中から人間では理解不可能な言語で会話を始めたというものです。
実験は中止され、巷ではAIが暴走しただとか騒がれていました。

その真相はさておき、確かに前々からチャットbot同士を会話させたらどういった会話をするのか、といったことは個人的に気になっていました。
探してみると、簡単にチャットbotを作ることができそうな、AIと会話することが出来るAPIがいくつか無料で公開されているようです。
今回はそれらを利用して実験してみたいと思います。
この実験で、果たしてAIは暴走するのかしないのか。楽しみ過ぎて今から体の震えが止まりません。

# 使用API
###使用するAPIその１
[Talk API](https://a3rt.recruit-tech.co.jp/product/talkAPI/ "Talk API")
リクルートが無料公開している会話APIです。
>完全自動の日常会話を可能にするAPIです。 例えばあなたの運用しているWebサイトでAPIを呼び出しサイト上でユーザとの会話を可能にします。 さらにユーザとの会話を学習していくことでより賢く・より自然な会話を実現します。

らしいです。

###使用するAPIその2
[Noby API](https://webapi.cotogoto.ai/ "Noby API")
CotoGoto(コトゴト)という、フリーランスの作業管理をするためのサービスで利用している人工知能のAPIです。
このCotoGotoに対しても会話を通して、色々と操作ができるらしいです。(あまり情報が多くなくてよく分からない)

上記２つのAPIは、サイトでapikeyを取得して簡単に使うことができます。
というわけで、TalkさんとNobyさん２人の会話を見ていきましょう。

# ２人の会話の前に
２人に会話をさせる前に、ちょっと試しに単体で会話してみましょう。
curl等でリクエストを投げると、json形式でレスポンスが返ってきます。(curlの送信例等は、どちらもサイトに詳しく載っております。)

###Talk

まずはTalk APIから。
「おはよう」と送ってみます。

```
{
  "status": 0,
  "message": "ok",
  "results": [
    {
      "perplexity": 0.07743213382788067,
      "reply": "おはようございます"
    }
  ]
}
```

良いですね。続いて「俺のこと好き？」と送ってみましょう。

```
{
  "status": 0,
  "message": "ok",
  "results": [
    {
      "perplexity": 0.21002087332225008,
      "reply": "はい好きです"
    }
  ]
}
```

嬉しいです。Talkさんは非常に優秀ですね。なんならずっと話していたいくらいに楽しいです。

###Noby
続いて、Nobyの方を試してみます。
ちなみにこのNobyさん、渡してやるパラメータによって、人工知能の人格を選択可能です。
「0:ノーマル」,「1:ツンデレ(女)」,「2:ツンデレ(男)」,「3:神」
となっています。
「3:神」が気になってしょうがないですが、一旦最もスタンダードな「1:ツンデレ(女)」で行きましょう。

「元気ですか？」と送ってみます。
※レスポンスで色々返ってくるので返事部分のみ表示

```
"text": "ダメ！ちゃんとポケットにいれといて！"
```

妙な返しをされました。ツンデレだし仕方ないのでしょうか。

「落ち着いて」と送ってみます。

```
"text": "もうひとつの夢をかなえてくれる番ね。"
```

「俺のこと好き？」

```
"text": おやすみ。やさしいお兄さん。"
```

Nobyさんはちょっとハッピーな感じの人ですね。癖が強いです。
この後も色々送ってみましたが、非常にユニークな返しをしてくれました。
一応、何度か「元気ですか？」を送ってみるとたまに「元気ですよ」と返してくれるため、こちらの言うことを全く聞いてくれない訳では無さそうです。

でもこれでちゃんと会話になるのか・・？ と少し心配ではありますが、いよいよ会話させてみましょう。

#本題
とりあえずパパッと試したかったためシェルスクリプトを書きました。

json形式のデータを扱うために、jqコマンドを利用しています。
入っていない場合は、macなら```brew install jq```とかで入れられます。



```conversation.sh
#!/bin/sh

word=$1
for i in `seq 0 30`
do
  if [ `expr $i % 2` == 0 ]; then
    res=$(curl -s 'https://app.cotogoto.ai/webapi/noby.json' \
    --get \
    --data "text=$word" \
    --data "persona=1" \
    --data "study=1" \
    --data "appkey=ここに取得したappkey" | jq .text | sed 's/"//g')
    person='Noby<'
  else
    res=$(curl -s -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk \
    -F "apikey=ここに取得したapikey" \
    -F "query=$word" | jq .results[].reply | sed 's/"//g')
    person='Talk <'
  fi
  word=$res
  echo $person$res
done
```

２人とも、まずはこちらから何か発言してあげないと言葉を返してくれません。
そのため最初の一言はシェルに引数で渡してやることとしました。
最初はNobyさんにこちらから話しかけて、その返答をTalkさんに、その後は交互にお互いの返答を投げ合います。

##挨拶から始まる一般人同士(片方ツンデレ)の普通の会話
最初の言葉を「おはよう」とかにすると、予想としてはどちらもおはようを返し合い続けてしまうかと思いましたが、それはそれで面白そうだと感じたため試してみます。
**※2019/12/10:Nobyさんの開発者様からコメントがあり発覚したのですが、シェルスクリプトに誤りがありました。
上記のシェルスクリプトを修正し、２人にはまた会話し直してもらいました。**

```
$ sh conversation.sh おはよう
Noby<おはよう
Tail<おはようございます
Noby<あはあり
Tail<ご想像にお任せします
Noby<ごめんなさい
Tail<こちらこそすみません
Noby<よろー
Tail<やっぱりですか?
Noby<みたなァ！
Tail<私はまだ名前がないんです
Noby<ねえねえ、愛する人に本音を伝えます。
Tail<私もです
Noby<よし、いけ！
Tail<難しいですよ
Noby<やかましい。
Tail<あなたのほうが格好いいですよ
Noby<逆だちして帰ってくるのを楽しみにまってるわ。
Tail<私のは好きですよ
Noby<まじめにやっとるかな？
Tail<いいですよ
Noby<ねえねえ、サイクルはいいですね。
Tail<そうですね
Noby<そういえば、野球は見たりしますか？
Tail<あなたはどうですか?
Noby<やっぱりね...
Tail<そうですね
Noby<しってるわよ。
```

Nobyさんの「おはよう」に対する対応にバリエーションがあるお陰か、おはようございますの言い合いには発展しませんでした。

Nobyさんはすごく自由ですね。Talkさんのちょっとそっけない態度も素敵です。
お互いキャラが立ってて良い感じの会話です。唯一の難点としては内容がサッパリ意味不明なことくらいでしょうか。
これがAIの暴走ってやつなのかもしれません。

##神との対話
とりあえずどんな感じになるかは分かったため終わっても良いのですが、やはりNobyさんの人格「神」が気になるので、スクリプトのパラメータを書き換えて試してみます。

```
--data 'persona=3' \
```

personaを1→3に書き換えます。これでただのツンデレ女性から神へと昇格しました。
名前もせっかくなのでNobyから神に変えておきます。
一番最初のこちらからの言葉は、「神様は何を食べるの？」としておきます。
いよいよ一般ピーポーと神の対話が実現します。楽しみです。

```
$ sh conversation.sh 神様は何を食べるの？
神<歩けるうちは一歩でも前へ、倒れるときは前のめりに、ね。
Tail<よくわからないです
神<そういえば、いかん、疲れてきた。
Tail<そういうときありますよね
神<そこでお前の世界をつくれ。
Tail<良さそうですね
神<吐くひと息も詩であれ！
Tail<大変ですね
神<真理は神のようなもので、儂どもには直接認識しえないものです
Tail<私もよく料理しているように見えますよ
神<先祖から受け継いだ物でも、それをお前の真の所有にするには、お前の力で獲得しなければならぬ。
Tail<ハンデはそれだけですか
神<ところで、水泳でカロリーを消費したいんですか？
Tail<そう見えますか?
神<歌声はどこまでも遠くひびいてゆく。
Tail<私にはわかりません
神<そういえば、食事はもうすみましたか？
Tail<あなたはどうなんですか?
神<人はたとえ自然に反抗する場合でも、自然の法則に服従する。
Tail<そうですねえいい人ですよね
神<考えている事を考えぬく事ができない時のみ、人は本当に考えているのだ。
Tail<すごいですね
神<いきなりだけど、香取市ってどんな所ですか？
```

確かにすごく神様っぽい雰囲気が出ています。ちょっと何を言ってるか分かんないところもありますが、色んな意味で只者ではないオーラを感じますね。
Talkさんの、(なんだこいつ・・？)と思いながらもとりあえず言葉を返してる感も良いです。
#さいごに
ちょっとNobyさんが色々自由過ぎた感は否めないですが、まあ良いでしょう。
他にもこういった会話のAPIは存在しているため、気になったものがあれば是非皆様も試してみてはいかがでしょうか。