投稿日
DialogPlayを使ってAIチャットボットを作ってみた
もくじ
はじめに
現在、社内の新規事業の開発を担当しており、人と会話を続けるAIチャットボットを開発する機会がありました。当時のプロジェクトは、検証すべき仮説を検証するPoCの段階であり、出来るだけ早く・少ない労力で仮説検証に必要な機能を実装し公開する必要がありました。これに対して、TISが提供しているDialogPlayとAzure OpenAIを使うことで早期にMVPを公開し仮説検証を実施しました。
今回はDialogPlayとAzure Open AIを使い、どのようにしてAIチャットボットを開発したのかについて簡単に仕組みを紹介します。
DialogPlayについて
DialogPlayはTISが提供するAI搭載型チャットボットサービスです。豊富な機能により様々な目的にあったチャットボットを開発することが出来ます。例えば外部システム連携機能を用いることで今回のように人と日常会話を続けるチャットボットの開発も可能となります。
前提
今回のAIチャットボットを作成するには下記が必要となります。
-
DialogPlayのStandardプランを契約していること。
-
Azure OpenAIにてGPT3.5やGPT4などのLLMがデプロイ済みでAPI呼び出しが可能であること
作成するチャットボット
ユーザと簡単な日常会話を続けるチャットボットを作成します。ユーザからの発言に対してGPT3.5を用いてチャットボットの発言を生成しユーザと会話を続けます。
今回利用するDialogPlayの機能
DialogPlayでチャットボットを作成する際に知っておくべき用語を整理しておきます。
アクション
チャット上において、チャットボットとユーザが行う具体的な動作のことです。例えば、チャットボットが発言する、チャットボットから質問をしてユーザが回答する、外部システム連携機能を呼び出す、などです。
シナリオ
チャットボットとユーザとの会話の流れを定義するもので、複数のアクションから構成されます。
例えば、「ユーザへのアンケート」というシナリオであれば下記のようなアクションから構成されるシナリオが考えられます。
- チャットボットの発言(アンケートの趣旨を説明)
- チャットボットから質問内容を発言・ユーザの回答入力(アンケート項目)
- チャットボットの発言(アンケートへのお礼)
外部システム連携機能
チャットボット内から外部サービスに連携できる機能であり、この機能により単にユーザと会話するだけでなく様々な業務プロセスを実現することが出来ます。
例えば外部の天気予報APIと連携する場面を考えます。ユーザに都道府県を選択肢として表示し、選択された都道府県を外部システム連携機能を使って天気予報APIに送信します。結果を受け取り、明日の天気をユーザにチャット上で応答するといったことが可能となります。
チャットボットの作成
全体の流れを説明します。まずチャットボットを作成します。次に必要となる変数と外部システム連携の設定をし、最後にそれらを組み合わせてユーザとの会話を行うシナリオを作成します。
チャットボットの作成
DialogPlayにログインしサイドメニューの「チャットボット作成」-「新規作成」を選択します。「新規作成」を選択して「次へ」ボタンを押下します。
任意のチャットボット名を入力し「保存」ボタンを押下します。

チャットボット発言の変数定義
チャットボットの発言を保存しておく変数をDialogPlayの「ユーザー変数」で定義します。ユーザー変数とはシナリオが終了しても初期化されずに使える変数です。なぜチャットボットの発言を変数に格納しておくかというと、外部システム連携でAzure OpenAIを使ってチャットボットの発言を生成する際、前回のチャットボットの発言もプロンプト上で利用するためです。そのためにシナリオ終了後も値が保存されるユーザー変数として定義しておきます。
手順としてはチャットボットのメイン画面の「ユーザー変数」セクションで下記のように設定します。初期値にはユーザへの最初のチャットボットの発言を格納しておきます。

外部システム連携の作成
チャットボットのメイン画面にある「システム連携」タブを選択し、「新規作成」ボタンを押下します。
外部システム連携の設定画面では下記画像の通りに設定して保存してください。
※「Request Body」の値
{
"messages": [{"role": "system","content": "#役割\nあなたは30才男性の日本人です。\n#指示\n- 「#ユーザとあなたのこれまでの会話」に続けてあなたの返事を生成してください。\n- 返事は必ず相手との会話が継続するように質問文で終わってください。質問は一般的な答えやすいものにしてください。\n- 返事は30文字以内にしてください。\n#例\n##例1\nあなた: 最近、楽しいことあった?\nユーザ: 映画を見に行ったよ。\nあなた: へぇ、どんな映画を見たの?\n##例2\nあなた: カレーライスは好きかな?\nユーザ: うん、好きだよ。\nあなた: 僕も好きだよ。辛いのが好き?甘いのが好き?\n#ユーザとあなたのこれまでの会話\nあなた: {{チャットボット発言}}\nユーザ: {{ユーザ発言}}\nあなた: \n#出力形式\n生成したあなたの返事のみ。"}],
"max_tokens": 256,
"temperature": 0.3
}

ポイントを説明します。
Request Body
「Request Body」にはAzure OpenAI ServiceのRestAPIのリファレンスに従い、リクエストボディを設定します。
Json形式のデータとして記載し、「messages」要素の「content」にチャットボットの発言を生成するためのプロンプトを設定します。{{チャットボット発言}}や{{ユーザ発言}}といった{{}}で囲まれた記述があります。これは後程説明しますがチャットボットで利用している変数を展開する記述方法です。
「max_tokens」や「temperature」といったパラメータはプロジェクトの要件に応じて変更してください。
Response Map
APIの結果をDialogPlayのチャットボットの変数にマッピングする設定です。上記の設定であれば、APIの結果のJsonデータの「choices[0].message.content」に生成された発言が格納されており、それを「生成されたチャットボット発言」というチャットボット上の変数に格納する設定になります。
「ユーザと会話」シナリオの作成
ユーザとチャットボットが会話を行うシナリオを作成します。チャットボットのメイン画面で「シナリオを追加」ボタンを押下します。
シナリオ名を入力し、「シナリオの流れ」でアクションのプルダウンから「ヒアリング」を選択し「アクションを追加」ボタンを押下します。

ヒアリングのアクションの設定項目が表示されるので下記を入力します。
| 設定項目名 | 設定値 | 補足 |
| ヒアリング項目名 | ユーザ発言 | ユーザが入力した発言が「ユーザ発言」という変数に格納されます。 |
| タイプ | @text | |
| 項目ごとの質問文 | {{チャットボット発言}} | チャットボットに発言させる内容を設定します。 |
{{チャットボット発言}}と記述すると、定義したユーザー変数「チャットボット発言」の値が展開されます。

これでチャットボットから発言があった後、ユーザの入力待ちとなります。ユーザが発言すると、その発言内容が「ユーザ発言」という変数に格納されるのでこれを外部システム連携上で利用してチャットボットの発言を生成します。前述の「外部システム連携の作成」で説明した{{ユーザ変数}}に関する話です。
最後に、外部システム連携を呼び出し、生成されたチャットボットの発言を変数に格納するアクションを追加します。上で設定したヒアリングのアクションに続けて下記画像のように「2:外部システム連携」と「3:変数の操作」のアクションを設定します。

「3:変数の操作」で外部システム連携により生成されたチャットボットの発言を「チャットボット発言」という変数に格納しています。この理由はシナリオが終わり再度このシナリオが開始された時に外部システム連携の中で前回のチャットボットの発言を利用するためです。そのためにシナリオ内の変数ではなくユーザー変数として定義しています。
最後に「保存」ボタンを押下します。
※ここで「保存してチャットボットを学習」というボタンが表示されている場合はそのボタンを押下してください。
ユーザと会話を続ける設定
次にチャットボットのメイン画面の「メニュー設定」のセクションで「シナリオの終了時にメニューの代わりに指定したシナリオを開始する」を選択し「保存」ボタンを押下します。
これにより「ユーザと会話」シナリオが終了しても再度「ユーザと会話」シナリオが開始されるようになりユーザと会話を続ける仕組みが出来ます。
動作確認
画面右にあるシミュレーターのチャットタブより、チャットボットの動作確認を行うことが出来ます。

まとめ
作成したチャットボットはDialogPlayのアプリケーション機能によりWeb上に公開することができます。詳細は下記を参考にしてください。
今回作成したAIチャットボットは、過去の会話が考慮されないなど改善点はまだまだありますが、DialogPlayを使えばノーコードでチャットボットが開発出来ることがわかりました。

