ノーコードで対話エージェントを簡単に作れるサービスを開発した話

![](https://i.imgur.com/arMRyHe.png)
# 対象読者
- 対話エージェントの作成に興味がある方
- 雑談ができるチャットボットの利用に興味がある方
- キャラクターにインタラクティブな会話機能を持たせたい方
- 手軽に対話エージェントやチャットボットを作ってみたい方

# この記事の要旨

- ノーコードで対話エージェントを簡単に作れるサービスを公開した
- エージェントになりきってAIインタビュアーの質問に答えていくだけでトレーニングできる
- WebサイトやLINE、Slackで動作する対話エージェントが作れる
- APIからの利用も可能

# サービスの紹介
[サービスページ](https://chaplus.work)
[ドキュメント](https://www.notion.so/Chaplus-2f83b458cbd6478ca2edb872616d5dac)

「Chaplus (Chat + Plusの造語)」というサービスを先日公開しました。
誰でも簡単に対話エージェントを構築し、様々な場面で活用ができることを目的に開発しました。

※対話エージェント = 人間の問いかけに対して自動応答をするシステム

Chaplusはプログラミングをすることなく、Web上のチャット画面やLINE、Slack上で会話することができる対話エージェントを簡単に作成することができます。
![](https://i.imgur.com/fHYQVB8.png)

ユーザからの発話を確認&分析しながら改良を重ねるための機能も備え、対話エージェントを改善していくことができます。

※本サービスはベータ版です。試行錯誤の段階のため不具合もまだあるかと思いますが、ご容赦くださいm 不具合報告やご要望等は[Twitterアカウント](https://twitter.com/maKunugi)までお寄せいただけますと幸いです。

![](https://i.imgur.com/JcqbUzG.jpg)

![](https://i.imgur.com/7ycpYlq.png)

## エージェントのトレーニング
Chaplusではエージェントの提供者が発話のペア(質問＋応答)を入力していき、エージェントのセリフを増やしていくルールベースの手法を採用しています。

対話エージェントを作成する手法は主に、
1. ルールベース
2. 検索ベース (≒抽出ベース)
3. 生成ベース

の３つがあります。Chaplusでは、一番コストをかけずにエージェントのキャラクター性を損なわずに会話ができる「ルールベース」をメインで採用し、一部補助として「検索ベース」を採用しています。

この手法を用いる場合に欠かせないのは、十分な量の質問＆応答の発話ペアデータです。
ある程度の発話ペアが揃っていないと、ユーザとの会話を成立させることはできません。これが対話エージェントを作る上で一番厄介な課題です。

Chaplusでは、効率よく発話ペアを揃えられるよう4つのエージェントの「トレーニング」機能を提供しています。

※ Chaplusでは、発話ペアを入力する作業のことを、エージェントを育てるというニュアンスとして捉えるため、「**トレーニング**」と呼んでいます。

![](https://i.imgur.com/ZyRt2xo.png)

1. 対話形式でのトレーニング
2. トピックの手動登録・編集
3. 雑談表現の手動登録・編集
4. 答えられなかった応答のトレーニング

### 対話形式でのトレーニング
エージェントに話させたい重要な「**トピック**」は手動で登録をしますが、エージェントに対してユーザが行う発話は無数に存在します。「おはよう」という挨拶もあれば、相槌、雑談など、多種多様です。
こういった表現を手動で登録していくのは非常に骨が折れる作業です。

Chaplusでは効率よくユーザから話しかけられやすい言葉を網羅できるよう、対話形式のトレーニングを用意しています。

![](https://i.imgur.com/aj8h0ag.png)

インタビュアーの質問にひたすら答えていくことで、様々な慣用表現や雑談への応答を登録していくことができます。この質問内容は、個人で運用している音声対話アプリで集めた発話ログの直近約200万件程度の発話から、頻出した表現を抜き出して利用しています。完全ではないですが、よく話しかけられるであろう表現を効率的に網羅できます。

上述の音声対話アプリについてはこちらで紹介をしています。
[個人開発アプリで10万DL達成するまでの試行錯誤をまとめてみた](https://qiita.com/maKunugi/items/86afc7e12fc96c709c84)

## 手動でのトレーニング
特に話させたい内容は、手動でトレーニングができます。
Chaplusでは、エージェントに特に話させたい話題を「**トピック**」、その他の重要ではないが会話を行う上で必要な表現を「**雑談表現**」と定義し、それぞれを階層構造で管理します。

![](https://i.imgur.com/kpKVDYg.png)
![](https://i.imgur.com/SlQnmvh.png)

## 答えられなかった発話のトレーニング
どれほど頑張っても、ユーザの発話を完璧に網羅できる発話ペアを揃えるのは困難です。
実際に対話エージェントを公開しても、答えられない発話は多く存在するでしょう。
そこで、Chaplusでは答えられなかった発話を可視化し、素早くトレーニングできる機能を用意しています。エージェント公開後、うまく答えられなかった発話を潰していくことで、改良ができます。

![](https://i.imgur.com/M229sAV.png)

![](https://i.imgur.com/BVW78LG.png)

これらのトレーニング機能が、対話エージェントを簡単に構築するために特にこだわったポイントであり、このサービスの肝となっている部分です。

# なぜ作ったのか
ここまで唐突にサービス紹介をしてしまいましたが、なぜ作ったかについても簡単に触れさせてください。

端的に言うと、対話エージェント(対話システム)関連のプロダクトを個人開発する中で、この分野の魅力や可能性を強く感じたためです。

私は学生時代(８年前程)から「対話システム」領域に興味があり、現在に至るまでその分野のサービス(音声対話アプリ、対話用API、チャットボット作成ツールなど)を個人開発していました。

下記はそのアウトプットの一部です。

[Botが雑談に応えられるようにするWEB APIを公開してみた話【個人開発】](https://qiita.com/maKunugi/items/b1afb6441571119729a7)

[個人開発アプリで10万DL達成するまでの試行錯誤をまとめてみた](https://qiita.com/maKunugi/items/86afc7e12fc96c709c84)

[マークダウンでチャットボットをサクッと書けるサービスを作ってみた話](https://qiita.com/maKunugi/items/42b0806896d4160bc646)

まだまだ理想のプロダクトを作ることはできていないものの、プロダクトを作ってグロースやユーザからのフィードバックをもらう中で、この分野に対する興味がより強まりました。

対話システムの活用は、サービスにユーザとの一方通行でないインタラクティブなコミュニケーションを取り入れることができ、様々な良い効果をもたらします。カスタマーサポートの効率化やユーザとの接点の増加、サービスへ愛着を持ってもらいやすくなるなど、たくさんの可能性を秘めています。

この数年で、チャットボットや音声アシスタントが注目を浴びるなど、対話システムの注目度は着実に上がっていますが、まだまだ世の中に浸透はしていません。そこには技術的なハードル等もありますが、まだまだ活用される機会自体が少ないのも実状です。本当に微々たる力にしかなれませんが、このサービスをきっかけに対話システムを試し、何かを得てもらえたらと思い、開発をしました。



※2021年2月に角川新書から出版された「[AIの雑談力](https://www.kadokawa.co.jp/product/321902000134/)」という書籍が、この分野の魅力や可能性、現状が非常にわかりやすく紹介されているのでおすすめです。

# 利用方法
利用方法の詳細は[こちら](https://www.notion.so/Chaplus-2f83b458cbd6478ca2edb872616d5dac)に詳しく記述しました。
本記事では、掻い摘んで利用方法をざっと紹介します。

## 新規エージェントの作成
[サービス](https://chaplus.work)にサインインをすると、「新規作成」ボタンが表示されるのでクリックします。

![](https://i.imgur.com/pOm9PLn.png)

名前、提供者名、アイコン、紹介文を設定し、対話エージェントを作成します。

![](https://i.imgur.com/ExkCY1X.png)

これでエージェント自体は作成が完了です。

![](https://i.imgur.com/DazqOUp.png)

試しに「会話をプレビュー」から、公開設定ページを開き、チャット画面を立ち上げてみましょう。

![](https://i.imgur.com/7TdkSqi.png)

まだトレーニングはしていないので、「トレーニングの反映」はせず、「会話をテストする」を押します。

![](https://i.imgur.com/NG5Slq4.png)

すると、先ほど作成した対話エージェントのチャット画面が起動することが確認できます。
ChaplusではこのWebブラウザで動くチャット画面のURLを配布して、様々なユーザに対話エージェントと会話をしてもらうことが可能です。 (チャット画面を共有する他に、LINE、Slack、Rest APIを使った会話方法があります。)

まだ何も話せないので、トレーニングを行ってみましょう。

## 対話エージェントのトレーニング
[トレーニング](https://chaplus.work/admin/trainings)ページを開くと、４つのトレーニングページへのリンクがあります。

![](https://i.imgur.com/aRWEO9N.png)

まずは対話形式のトレーニングで、会話用のコンテンツを追加していきましょう。
「対話形式でトレーニング」をクリックしましょう。

![](https://i.imgur.com/sCeirF8.png)

トレーニング用のチャット画面が起動します。

![](https://i.imgur.com/p0Tkwb4.png)

インタビュアーが様々な質問を投げかけてくるので、作成する対話エージェントになりきって応答を返しましょう。

ある程度応答を返したら、「対話した内容を保存」を押してトレーニング内容を保存します。

![](https://i.imgur.com/aen0eKB.png)

保存が完了すると、対話した内容がエージェントの語彙として登録されます。

![](https://i.imgur.com/PnfwPoq.png)

対話して登録されたコンテンツは、トピック一覧や雑談表現一覧画面にも反映され、手動で内容の編集を行えます。

![](https://i.imgur.com/H5vvSa4.png)

![](https://i.imgur.com/BuxPhFg.png)


## トレーニング内容を反映する
トレーニングが終わったら「公開設定」ページを開きます。

![](https://i.imgur.com/RJVzNWS.png)

先程のトレーニングの内容が会話に反映されるよう、「トレーニングを反映する」をクリックします。

![](https://i.imgur.com/X7BY3gr.png)

反映が完了したら「会話をテストする」から、チャットボットを開き会話をしてみましょう。

![](https://i.imgur.com/q8hgNcB.png)

トレーニングした内容が反映されているかを確認しましょう。
内容に修正が必要な場合は、ここまでの手順を繰り返します。

チャット画面起動時の発話や発話候補(クイックリプライ)の内容、うまく答えられなかった場合に発する言葉などの設定をしたい場合は、「エージェントの設定」ページを開いて調整します。

※トレーニングした内容で応答が返せないときに、勝手に応答を返してくれる隠し機能も実験的に導入しています。

![](https://i.imgur.com/gJFMmMC.png)

## 公開

ここまでの手順を繰り返して、エージェントを公開する段階になったら、「公開設定」ページからエージェントを公開しましょう。

![](https://i.imgur.com/GoPGebp.png)

エージェントの公開の範囲には「一般公開」と「限定公開」の２種類あります。

### 一般公開

誰でもエージェントと会話をすることができます。一般公開が完了すると、「チャットページのURL」と「埋め込みタグ」が発行されます。
![](https://i.imgur.com/M6RPHsR.png)


### 限定公開

限定公開をしたエージェントは、チャット画面では作成者のみ会話が可能です。チャット画面は他のユーザに共有することはできませんが、外部サービス連携が可能です。チャット画面を一般公開せずに、LINEやSlack、Rest APIでの利用をしたいときなどに利用します。
![](https://i.imgur.com/h8NYvLK.png)


LINEやSlack、REST APIから作成した対話エージェントを利用したい場合は、[こちら](https://www.notion.so/3693222992544725942ceb172b21cb03)の手順をご参照ください。

## ログの確認と分析
公開した対話エージェントが行ったやりとりは「ログ」ページで確認ができます。

![](https://i.imgur.com/Zi3dDQI.png)

ログは

- 最近の発話
- ユーザごとの発話
- 答えられなかった発話

の３つでフィルタリングすることができます。うまく答えられなかった表現等を見つけながら、適宜トレーニングを行うことで、対話エージェントの精度を向上させることができます。

![](https://i.imgur.com/ivRbkNc.png)

![](https://i.imgur.com/KL6ASwJ.png)

ユーザの反応を見ながら、改良を重ねていきましょう。

## APIからの利用
Rest APIを利用して作成した対話エージェントと会話をすることも可能です。
詳細はこちらの[ドキュメント](https://www.notion.so/API-f3373b5634d6408e8dbc81ecbc639187)をご参照ください。

Chaplusでは、LINEとSlackに対応をしていますが、それ以外のプラットフォームでも会話が行えるようAPIを提供しています。(APIの利用には、コーディングが必要です。)

上述した手順で対話エージェントを公開すると、「公開設定」ページにてAPI連携ができるようになります。

![](https://i.imgur.com/unDfCEd.png)

「APIを有効にする」を押して、APIを有効化しましょう。

![](https://i.imgur.com/lfYkdjj.png)

APIを有効にすると、APIのリクエストに必要な「API KEY」、「エージェントID」、そして動作確認で利用できるCurlサンプルを入手できます。

リクエストの内容はシンプルで、下記のパラメータを含むJSONをAPIにPOSTしてあげます。

![](https://i.imgur.com/MheGi81.png)

Curlサンプル

```shell=
curl -H "Content-Type: application/json" -X POST -d '{"api_key":"<api key>","agent_id":"<agent_id>","utterance":"<発話>"}'<エンドポイント>
```

このリクエストを利用することで、特定の発話に対する対話エージェントの応答を取得することができます。

レスポンスサンプル

```json=
{
    "utterance": "ニックネームはなんですか？",
    "bestResponse": {
        "utterance": "ジョンと呼んでください！",
        "score": 67.527468,
        "options": [
            "他の話題",
            "プロフィールについて",
            "好きな食べ物はなんですか？",
            "趣味はなんですか？"
        ],
        "topic": "プロフィールについて"
    }
}
```

![](https://i.imgur.com/pgogY2I.png)

上記は、「ニックネームはなんですか？」という発話に対する応答を取得した例です。
応答は「bestResponse」というオブジェクトに格納され、オブジェクト内の「utterance」に対話エージェントの応答が含まれています。
応答の他に「options」というパラメータには、「クイックリプライ」に利用ができる文言が格納されており、次にユーザが発話すると良さそうな発話候補を必要に応じて利用することができます。


# まとめ
長々とサービス紹介をさせていただきましたが、ここまでお読みいただきありがとうございます。あまり詳細な技術について触れることができませんでしたが、このサービスの開発を通じて様々な技術的挑戦もできたので、利用した関連技術についていずれ紹介もしたいと思っています。

このサービスではなんでも返答できる「賢い対話AI」を作ることはできませんが、作り込んでいくことで愛着の湧く対話エージェントを手軽に構築することはできると思うので、ご興味をお持ちいただけた方はぜひお試しいただけると嬉しいです。このサービスが役に立ちそうであれば、今後さらに改良して精度や使い勝手を高めていきたいと思っています！

ご要望やバグ報告等は[Twitterアカウント](https://twitter.com/maKunugi)までお気軽にお寄せください。