横浜市のごみ分別AIで使われているチャットボット Repl-AI でできること・その１（新規登録・サンプルシナリオ・カスタマイズ）

最近ニュースでも話題になっている[横浜市のごみ分別AI](http://www.city.yokohama.lg.jp/shigen/sub-shimin/dashikata/)．

* [「旦那捨てたい」に神回答　横浜市のごみ分別AIがまるで人生相談](https://withnews.jp/article/f0170816003qq000000000000000W06910101qq000015743A)
* [【悲報】横浜市のごみ分別AI、卑猥なワードに詳しすぎるｗｗｗｗｗｗｗｗｗｗｗ](http://rabitsokuhou.2chblog.jp/archives/68665019.html)

このシステムの根幹を担うのは，**powered by** に記載のチャットボット [Repl-AI](https://repl-ai.jp) ．
NTTドコモが2016年から開発しているサービスで，プログラムの知識がなくてもルールベースのチャットボットが構築できる．

横浜市のごみ分別AIは，市民の検索性を高めるだけでなく、[ごみに対する取り組みのPRや、問い合わせ電話の削減を目的に作られている](https://repl-ai.jp/#docs/guides/casestudy)とのこと．

実際に Repl-AI を使ってできることをまとめる．

# 新規登録はカンタン（無料）

## docomo Developer support に新規登録

[https://repl-ai.jp/](https://repl-ai.jp/) にアクセスし，右上の新規登録ボタンから登録を行う．
docomo Developer support に新規登録することで，Repl-AI も使えるようになる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/5367d049-0389-1fb6-fc88-2b51bab20f05.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/f307d842-f4b1-97c6-0fe3-d95bf5d2fbe8.png)

## ログイン

docomo Developer support に登録したメールアドレスとパスワードで，Repl-AI にログインできる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/1263b322-de3d-caee-53d6-ce041a5323f3.png)


### ※ SNSアカウントで新規登録した場合の注意

SNSアカウントで新規登録した場合は，別途パスワードを登録する必要がある．
メールアドレスはSNSに登録しているメールアドレス．
![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/7d52f6f1-a8cb-41a3-4e25-e3653ffb4bda.png)

一旦ログアウトして，ログインボックス下記にある「パスワードを忘れた方はこちら」よりパスワードを設定する．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/7b6a7d22-b702-011b-1f04-c755b9fa387e.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/4be630ec-2b9a-272f-9e4c-a9120e5b0570.png)

# サンプルシナリオ

ログインするとサンプルシナリオが自動生成されている．
リンクをクリックして，挨拶シナリオを試してみる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/70e3bda4-1a2e-6cf7-9c73-dd76305b8966.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/e9a0bdf7-f4c0-4abd-1242-c830a25ea9fb.png)

## まずはシミュレータで対話を試す

画面右下のチャットアイコンをクリックすると，シミュレータが起動し対話を試すことが出来る．
`init` と入力してボットから会話をスタートする．

![demo_1.gif](https://qiita-image-store.s3.amazonaws.com/0/31862/00af583a-5680-b8fe-1470-dcfe1ed2c507.gif)

挨拶シナリオでは，あいさつをしてボットに名前を覚えさせることができる．
一度覚えさせた後，リロードして再度シミュレータを起動し `init` を入力すると，先程の対話で教えた名前を記憶しているのが確認できる．
また，対話に併せて赤色の対話BOX `システム発話` がハイライトされ，対話の流れが視覚的にわかる．

## シナリオの詳細

上記の対話がどのように構築されているかみてみる．

### 1. ボットから対話スタート

`init` と入力すると `システム発話起点` のBOXから対話がスタートし，繋がっている２つのBOXに遷移する．

システム発話BOXには，どのような時にボットが発話するかの条件が設定できる．

`BOX上側の✎をクリック > 詳細設定 > どんな時に` 
このBOXには `name` が `undefined` という条件が設定されている一方，もうひとつのBOXは条件が `いつでも` になっている．
条件が設定されている方が先に評価され，条件が設定されていない方が後に評価される．

つまり，`name` が未設定の場合は下のBOX，設定済みの場合は上のBOXに遷移する分岐が実現されている．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/7fa0e29a-011f-fcad-008a-9a7d24522a1f.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/a3eaccaa-d046-2f02-3931-41e4f18fa004.png)

実際の発話内容は `システム発話BOX下側の✎をクリック > 発話内容` に入力したテキストがランダムで選択される．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/77e64d2c-216a-9bd8-8c1f-20ea23b27f0e.png)

### 2. ユーザー入力に対応

`ユーザー発話BOX下側の✎をクリック > 発話内容` にユーザーの入力パターンを定義する．
`*` はユーザーが入力した任意の文字列に対応する．
例えば「`TANAKAです`」とユーザーが入力すると，「`TANAKA`」がユーザー発話として設定される．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/29dbbfef-def3-f4cf-2049-51f40aaf1126.png)

続くシステム発話BOXの `発話内容` に `ユーザー発話` を記述しておくと，入力された「`TANAKA`」を呼び出すことができる．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/28d51315-af8c-f0b4-2858-271cbb574d6c.png)

### 3. 変数に記憶

さらに，プログラムでいう変数に文字列を格納することもできる．
ここでは `ユーザー発話` の文字列 `TANAKA` を `name` という変数に格納している．

![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/82dd884e-5c61-869b-c489-9ae0e8bbf58f.png)

### 4. 記憶した変数を呼び出す

`システム発話BOX下側の✎をクリック > 発話内容` で `覚えた内容` に `name` を指定することで，`TANAKA` を呼び出すことができる.
![image.png](https://qiita-image-store.s3.amazonaws.com/0/31862/3e5f6813-c162-759b-780d-82f334f4c4e7.png)


# GUIでシナリオを編集する

GUIの直感的な操作でシナリオが編集できる.

* 要素の追加：サイドバーから要素をドラッグ＆ドロップ
* REDO / UNDO (ツールボタンかショートカット)
* コピー、ペースト、複製
* BOX同士を線でつなげる
* 拡大縮小
* 検索
* 要素の整列

![demo_3.gif](https://qiita-image-store.s3.amazonaws.com/0/31862/f2fce243-dc7b-7fb0-5fb3-65671c48336a.gif)

# サンプルシナリオをカスタマイズ

サンプルの挨拶シナリオに `ユーザーからの入力がされたパターン` を追加し，ユーザー入力に対して，雑談を返してくれるようにする．

1. `ユーザー発話起点` 追加
2. `ユーザー発話` 追加
3. `連携ボットBOX > 雑談対話ボット` 追加
4. 線でつなげる
5. `シナリオを保存して公開`
6. シミュレータで試す

![demo_4.gif](https://qiita-image-store.s3.amazonaws.com/0/31862/79da026e-84b6-9814-56ed-53c94cb77a13.gif)

このように雑談ボットは，[裏側ではdocomoの雑談対話APIを使用している](https://repl-ai.jp/#docs/tutorial/callingbots#anchor_5) ようで，入力内容にある程度マッチした返答を返してくれる．


# 関連記事
- [横浜市のごみ分別AIで使われているチャットボット Repl-AI でできること・その２（表現ゆらぎ吸収）](http://qiita.com/tanakaworld/items/8954a399faf8cac0a503)