(57)【特許請求の範囲】
【請求項１】
ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムであって、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成部と、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファを含む記憶部と、
前記キャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイング部と、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示部と、を備え、
前記キャッシュバッファは、活動状態キャッシュバッファと非活動状態キャッシュバッファによって２重化され、前記活動状態キャッシュバッファにおいて、新たな応答メッセージのためのバッファのメモリ領域確保が失敗した場合に、使用中の前記発言キャッシュ要素の領域を前記活動状態キャッシュバッファから前記非活動状態キャッシュバッファに複製し、前記活動状態キャッシュバッファと前記非活動状態キャッシュバッファの活動状態と非活動状態を入れ替えるバッファ制御部を更に備え、
前記活動状態キャッシュバッファ及び前記非活動状態キャッシュバッファは、前記複数のユーザの想定される利用状況に基づきバッファサイズが決定され、
前記キャッシュバッファは、前記発言キャッシュ要素を含んだ一時記憶領域である発言キャッシュ要素を構成単位として複数格納し、
前記発言キャッシュ要素は、チャンネルＩＤ、前記発言キャッシュ要素、同一チャンネルの次の発言キャッシュ要素ヘのポインタ、及び別チャンネルの発言キャッシュ要素へのポインタ、を含む、
チャットボットシステム。
【請求項２】
ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムにおけるチャット制御のための方法であって、前記チャットボットシステムが、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成ステップと、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイングステップと、
前記キャッシュバッファに、チャンネルＩＤ、前記発言キャッシュ要素、同一チャンネルの次の発言キャッシュ要素ヘのポインタ、及び別チャンネルの発言キャッシュ要素へのポインタ、を含む発言キャッシュ要素を含んだ一時記憶領域である発言キャッシュ要素を構成単位として複数格納するステップと、
前記キャッシュバッファが、活動状態キャッシュバッファと非活動状態キャッシュバッファによって２重化され、前記活動状態キャッシュバッファにおいて、新たな応答メッセージのためのバッファのメモリ領域確保が失敗した場合に、使用中の前記発言キャッシュ要素の領域を前記活動状態キャッシュバッファから前記非活動状態キャッシュバッファに複製し、前記活動状態キャッシュバッファと前記非活動状態キャッシュバッファの活動状態と非活動状態を入れ替えるバッファ制御ステップと、
前記活動状態キャッシュバッファ及び前記非活動状態キャッシュバッファが、前記複数のユーザの想定される利用状況に基づきバッファサイズを決定するステップと、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示ステップと、
を実行する方法。
【請求項３】
ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムにおけるチャット制御のためのコンピュータプログラムであって、コンピュータに、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成ステップと、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイングステップと、
前記キャッシュバッファに、チャンネルＩＤ、前記発言キャッシュ要素、同一チャンネルの次の発言キャッシュ要素ヘのポインタ、及び別チャンネルの発言キャッシュ要素へのポインタ、を含む発言キャッシュ要素を含んだ一時記憶領域である発言キャッシュ要素を構成単位として複数格納するステップと、
前記キャッシュバッファが、活動状態キャッシュバッファと非活動状態キャッシュバッファによって２重化され、前記活動状態キャッシュバッファにおいて、新たな応答メッセージのためのバッファのメモリ領域確保が失敗した場合に、使用中の前記発言キャッシュ要素の領域を前記活動状態キャッシュバッファから前記非活動状態キャッシュバッファに複製し、前記活動状態キャッシュバッファと前記非活動状態キャッシュバッファの活動状態と非活動状態を入れ替えるバッファ制御ステップと、
前記活動状態キャッシュバッファ及び前記非活動状態キャッシュバッファが、前記複数のユーザの想定される利用状況に基づきバッファサイズを決定するステップと、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示ステップと、
をコンピュータに実行させる、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、チャットボットシステムに関する。特に、複数ユーザに応答するネットワーク上でチャットサービスを提供するためのチャットボットシステムに関する。
【背景技術】
【０００２】
近年、コンピュータネットワークの普及により、オンラインネットワーク上のチャットボットシステムで複数のユーザが会話することで、様々な情報交換を行うことが容易になってきた。例えば、特許文献１には、オンラインチャットシステムにおける、音声によって複数のユーザが対話する音声対話システムに関して、ユーザ間の通話量を適切に制御する音声対話システムが開示されている。また、特許文献２には、各ユーザが、自ら自動対話プログラム（ＣＧＩスクリプト）を作成しなくとも、自己固有かつ個性を有する人工無能を動作させて、他者と擬似対話させることができるネットワーク擬似会話システムが開示されている。なお、人工無能（人工無脳とも書く）とは、自動対話プログラムに従い、ユーザとの間で擬似的に会話（チャット）を成立させるコンピュータシステムであり、本明細書ではチャットボットシステムと呼んでいる。
【特許文献１】特開平９−８３６５５号公報
【特許文献２】特開２００４−１７８２９９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
企業が一般顧客に対してネットワーク上で提供するサービスで、低コストのＣＳ（Ｃｕｓｔｏｍｅｒ  Ｓｕｐｐｏｒｔ）手段のひとつとして、チャットネットワークなどを利用した会話の自動応答による方法が考えられる。しかしながら、上記特許文献１，２に記載のような既存の自動応答技術は、１つのシステムにつき１人の相手をすることを想定しているため、多数のユーザを相手にするためには多数の計算機資源、すなわち、メモリ、ＣＰＵ時間などを相手にする人数分の計算機資源を消費する。また、一般的には単純な会話を想定しているため、長文の複雑な発言を適切なタイミングで行うことができない。すなわち、従来の自動応答システムでは、１行程度の一問一答形式であることが多く、システムからの回答を長文（例えば数ページ）に構成することが難しく、いきなり数ページ分の回答が表示されてしまうことになる。
【０００４】
本発明は、上記課題に鑑み、複数のユーザに対して長文の応答メッセージを効率よくキャッシュし、提示するチャットボットシステムをＣＳ手段として提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明では以下のような解決手段を提供する。
【０００６】
（１）  ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムであって、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成部と、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファを含む記憶部と、
前記キャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイング部と、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示部と、
を備える、チャットボットシステム。
【０００７】
（１）の構成によれば、本発明のチャットボットシステムは、応答メッセージを格納するためのキャッシュバッファを記憶部に備える。このキャッシュバッファにユーザごとに割り当てられたチャンネル別の応答メッセージを適切な長さの要素に分割して、キューイングして格納するチャンネル別キューイング部を備えている。そして、応答メッセージ提示部は、活動状態のバッファからチャンネル別のユーザそれぞれに対して、応答メッセージを要素単位でユーザ発言に対し適切な時間間隔（例えば数秒）を空けてユーザに理解できるペースで少しずつ提示（発言）する。提示の方法は、文字列の表示であっても音声による発話であってもよい。
【０００８】
このようにすることによって、単一のチャットボットシステムであっても長文の応答メッセージをその要素ごとにキャッシュするので、複数のユーザに効率よく提示することができる。
【０００９】
カスタマーサポート情報は一般に情報量が多い。一度に大量の情報を発話した場合、ユーザは消化不良を起こす。したがって、この非同期長文発言手段により、ユーザは消化不良を起こすことなく、必要な情報を受け取ることができるようになる。また、カスタマーサポートは同時に複数の質問を受けることが想定される。チャンネル別キャッシュの手段により、複数のボットサーバを稼働させることなく、効率的に、複数の質問を処理できるようになる。
【００１０】
（２）  前記キャッシュバッファは、活動状態キャッシュバッファと非活動状態キャッシュバッファによって２重化され、前記活動状態キャッシュバッファにおいて、新たな応答メッセージのためのバッファのメモリ領域確保が失敗した場合に、使用中の前記発言キャッシュ要素の領域を前記活動状態キャッシュバッファから前記非活動状態キャッシュバッファに複製し、前記活動状態キャッシュバッファと前記非活動状態キャッシュバッファの活動状態と非活動状態を入れ替えるバッファ制御部を更に備え、
前記活動状態キャッシュバッファ及び前記非活動状態キャッシュバッファは、前記複数のユーザの想定される利用状況に基づきバッファサイズが決定される、（１）に記載のチャットボットシステム。
【００１１】
（２）の構成によれば、キャッシュバッファは、活動状態（アクティブ）のバッファと非活動状態（インアクティブ）のバッファに２重化される。バッファ制御部は、活動状態のバッファにおいて使用中の要素の領域（以降、発言キャッシュ要素と呼ぶ）を非活動状態のバッファに複製した後、活動状態のバッファと非活動状態のバッファを入れ替える。
【００１２】
複数チャンネルで回答を行う場合、キャッシュバッファが１つである場合には、発言処理が済んで未使用になった領域を再利用できるのは、全チャンネルで同時にキャッシュがクリアされるタイミングのみである。チャンネル数が十分多いとき、このようなタイミングはなかなか訪れないことが予想される。長文バッファ２重化の手段により、それ以外のタイミングでも再利用できるようになり、メモリ資源を効率的に利用した運用が可能になる。
【００１３】
なお、いずれのバッファのサイズもユーザの想定される利用状況に基づいて最適なものとすることができる。例えば、参加するユーザ数が多い場合は、バッファサイズを大きく、少ない場合はバッファサイズを小さくする。このようにすることで、システム起動時にアクティブ、インアクティブの２つのバッファを確保するだけで、多数のユーザに対してチャットを続けていくことができる。
【００１４】
（３）  前記キャッシュバッファは、前記発言キャッシュ要素を含んだ一時記憶領域である発言キャッシュ要素を構成単位として複数格納し、
前記発言キャッシュ要素は、チャンネルＩＤ、前記発言キャッシュ要素、同一チャンネルの次の発言キャッシュ要素へのポインタ、及び別チャンネルの発言キャッシュ要素へのポインタ、を含む（２）に記載のチャットボットシステム。
【００１５】
（３）の構成によれば、キャッシュバッファにおけるチャンネルと発言キャッシュ要素との２次元のキューイング構造を実現できる。
【００１６】
（４）  前記ユーザが入力した制御キーワードによって、前記応答メッセージの中止、停止、再開を行う（３）に記載のチャットボットシステム。
【００１７】
長文の情報提供時に、ユーザが他の急を要する処理を行う必要が生じた場合、発言中の情報を適切に読む機会、あるいは、チャットの他の機能を使って情報を得る機会を失ってしまう。（４）の構成によれば、キーワードによる制御手段により、ユーザの都合に合わせて長文発言を取り止め、一時停止、再開することが可能になり、ユーザの利便性が向上する。
【００１８】
（５）  一時停止用フラグを前記発言キャッシュ要素に更に保持し、前記応答メッセージの処理中に前記活動状態キャッシュバッファにおいて前記一時停止用フラグを検出すると、前記一時停止用フラグより以降の同一チャンネルの発言を停止する、（４）に記載のチャットボットシステム。
【００１９】
一時停止機能を実装する場合、一時停止用のバッファを別に確保する方法が考えられるが、この場合メモリ資源を余分に消費する。（５）の構成によれば、一時停止用フラグにより、余分なバッファ用メモリを使用することなく、効率的に一時停止機能を実装することができる。
【００２０】
（６）  一時停止中のチャンネルに新たな応答メッセージが生じた場合に、前記一時停止中の要素より前に前記新たな応答メッセージを追加する、（５）に記載のチャットボットシステム。
【００２１】
（６）の構成によれば、一時停止の後の再開が矛盾なく行える。
【００２２】
（７）  ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムにおけるチャット制御のための方法であって、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成ステップと、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイングステップと、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示ステップと、
を含む、方法。
【００２３】
（７）の構成によれば、（１）のチャットボットシステムと同様な作用効果を実現する方法を提供できる。
【００２４】
（８）  ネットワークに接続された複数のユーザの端末からの質問文に自動応答するチャットボットシステムにおけるチャット制御のためのコンピュータプログラムであって、
前記ユーザの質問文に対する応答メッセージを生成する応答メッセージ生成ステップと、
前記生成された応答メッセージを一時的に格納するためのキャッシュバッファに、前記ユーザごとに割り当てられたチャンネル別に、前記応答メッセージが所定の長さ以上の場合に発言キャッシュ要素に分割してキューイングして格納する応答メッセージキューイングステップと、
前記キャッシュバッファに分割して格納された前記応答メッセージの各発言キャッシュ要素を、前記ユーザの発言に対し適切な時間間隔を空けて、前記ユーザの端末に提示する応答メッセージ提示ステップと、
をコンピュータに実行させる、コンピュータプログラム。
【００２５】
（８）の構成によれば、（１）のチャットボットシステムと同様な作用効果を実現するコンピュータプログラムを提供できる。
【発明の効果】
【００２６】
本発明によれば、複数のユーザに対して長文の応答メッセージを効率よくキャッシュし、提示するチャットボットシステムを提供することができる。
【発明を実施するための最良の形態】
【００２７】
以下、本発明の実施形態について図を参照しながら説明する。
【００２８】
［チャットボットシステムの機能ブロック］
図１は、本発明の好適な実施形態の一例に係るチャットボットシステム１０の機能ブロックを示す図である。
【００２９】
図示するように、チャットボットシステム１０は、主として、通信部１１、応答メッセージ生成部１２、応答メッセージキューイング部１３、記憶部１４、バッファ制御部１５、応答メッセージ提示部１６から構成される。ただし、このような構成はあくまで例示であり、機能的に同等であれば他の構成やその他のバリエーションを排除するものではない。また、図ではチャットボットシステム１０は、単一の装置として示されているが、複数の装置に機能を分割して実現してもよい。
【００３０】
通信部１１は、ネットワークを介してユーザ端末（図示せず）と接続され、ユーザ端末からの質問文を受信したり、質問文に対する本システムからの応答メッセージを該ユーザ端末に送信する。
【００３１】
応答メッセージ生成部１２は、ユーザからの質問文を受信すると、その質問文に適切な応答メッセージを生成する。応答メッセージは、質問文とその回答を予め格納した知識データベースを使用して、人工無能によって生成されてよい。
【００３２】
応答メッセージキューイング部１３は、応答メッセージ生成部１２によって生成された応答メッセージが所定の長さ（イメージ的にはパッと見てすぐに理解できる範囲を超えた文字数。例えば、３０〜４０文字程度）以上の「長文」であった場合に、その応答メッセージを段落など適切な長さに分割し、キャッシュバッファにキューイングする。キューイングする単位は、後述するように、「発言キャッシュ要素」と呼ばれ、長文発言ヒープと呼ばれる短期記憶領域にキュー構造を構成する。
【００３３】
記憶部１４は、上記のキャッシュバッファを備え、更にキャッシュバッファは、活動状態であるアクティブ・キャッシュバッファ１７と、非活動状態のインアクティブ・キャッシュバッファ１８との２重化された構成も持つ。ここで、活動状態のバッファとは、そのバッファに応答メッセージがキューイングされ、かつ、そのキューから順次応答メッセージがユーザに提示される処理が行われているバッファのことを意味する。また、非活動状態のバッファは、現在処理が行われていない待機中のバッファであり、活動状態のバッファが一杯になりそうな場合に使用される。
【００３４】
バッファ制御部１５は、上記の活動状態のバッファと非活動状態のバッファを管理し、活動状態のバッファに新たな応答メッセージをキューイングできないときは、非活動状態のバッファに対して、活動状態のバッファで処理中の内容をコピーした後、活動状態のバッファと非活動状態のバッファを入れ替える。
【００３５】
応答メッセージ提示部１６は、活動状態バッファ（アクティブ・キャッシュバッファ）から、発言キャッシュ要素を順次取り出し、通信部１１を介して、質問文を発したユーザ端末に対して応答メッセージをユーザの発言とは非同期（適切な時間間隔を空けて）に発言キャッシュ要素単位で少しずつ出力する。
【００３６】
図２は、従来のチャットボットシステムと、本発明のチャットボットシステム１０の使用される環境の違いを示したものである。従来のチャットボットシステムでは、１システムにつき１人の相手をすることを想定しているため、多数の相手をするためには、人数分だけの多くの計算機資源（メモリ、ＣＰＵ時間など）を消費する。また、単純な会話を想定しているため、長文の複雑な発言を適切なタイミングで行うことができない。また、１行程度の一問一答形式であることが多く、チャットボットシステムからの回答を長文にすることが難しい。
【００３７】
一方、本発明のチャットボットシステムでは、単一のチャットボットシステム１０で多数のチャンネルに対応する。これにより、多数のユーザに対しても１つのプロセスで済み、計算機資源を有効に利用することが可能となる。また。長文の回答であっても適切な単位に分割してキューイングするので、ユーザが理解しやすいタイミングで応答することができる。
【００３８】
図３は、本発明のチャットボットシステムにおいて、長文の応答メッセージを分割してキューイングする概念を示したものである。この例では、ユーザの質問に対する長文の応答メッセージ（以下、長文発言と呼ぶ）が、「Ａをクリック、Ｂを選択。Ｃになったら、Ｄをクリック。Ｅが表示されたら、Ｆを入力。Ｇを聞かれるので、Ｈを回答する。」のように生成されたと仮定している。図示するように、この長文発言は、意味を持つ適切な段落（発言キャッシュ要素）に分割されて発言キューにキューイングされる。ここで、意味を持つ適切な段落に分割すること自体は、句読点などの区切り点を予め回答文に用意する他、公知の言語処理の技術を利用してよい。本発明のチャットボットシステムでは、適切なタイミングで（ユーザの発言に対し適切な時間間隔を空けて）、発言キューから分割された発言キャッシュ要素を順次取り出して発言（出力）する。例えば、「Ａをクリック」、「Ｂを選択」と発言した後、一定時間（例えば１秒）後に、次の「Ｃになったら」を発言するように制御することができる。
【００３９】
図４は、長文バッファの２重化についての概念図を示したものである。既に説明したように、チャットボットシステム１０は、バッファ制御部１５を備え、発言キューを格納するためのバッファを２重に持ち、長文発言用のメモリ領域確保に失敗したときは、もう一方にバッファ（インアクティブ・バッファ）に必要なキャッシュ（発言キャッシュ要素）のみをアクティブ・バッファからコピーして、再度メモリ領域確保を試みる。
【００４０】
図４（ａ）で示すように、アクティブなバッファにおいて、発言キャッシュ要素Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆが使用中であり、新たに３つの発言キャッシュ要素Ｘ，Ｙ，Ｚをキューイングしようとしたときに、このままでは使用済みの領域（濃い網掛けで示す領域）を開放しない限り、現状アクティブなバッファには入りきらない。そこで、使用済みの領域をいちいち開放するのではなく、図４（ｂ）に示すように、使用中のＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆのみをインアクティブのバッファにコピーする。次に、図４（ｃ）に示すように、アクティブとインアクティブを入れ替える。そして、インアクティブのバッファを全て未使用とし、最後に、Ｘ，Ｙ，Ｚをアクティブバッファにキューイングする。
【００４１】
このようにすることで、想定される利用状況から最適なバッファ量を見積もれば、システム起動時にアクティブ、インアクティブの２つのバッファを確保するだけで発言を多数のユーザに続けていくことが可能になる。
【００４２】
［チャットボットシステムのソフトウェア構成］
本発明の好適な実施形態におけるチャットボットシステムのハードウェア構成については後述の図２７で説明する。
【００４３】
図５は、本発明の好適な実施形態におけるチャットボットシステム１０をソフトウェアシステムにより実現する場合のモジュール構成を示したものである。チャットボットシステム１０（以下、チャットボットサーバと呼ぶこともある）のＩＲＣクライアントモジュールは、ＩＲＣ（Ｉｎｔｅｒｎｅｔ  Ｒｅｌａｙ  Ｃｈａｔ）サーバが提供するＩＲＣネットワークを介して、ユーザとの対話を行う。なお、ＩＲＣサーバとは、インターネット上の文字チャット専用システムで複数のサーバ上で、情報がリレー、交換しながらつながっているサーバをいう。ＩＲＣクライアントは、ここではＩＲＣプロトコルに基づきＩＲＣサーバとのやりとりを行うプログラムモジュールをいう。また、カーネルモジュールは、チャットボットシステムの起動や終了などの全般的な処理を行う。
【００４４】
ヒープモジュールは、長文発言用の２重キャッシュバッファを管理する長文発言ヒープＡモジュールと長文発言ヒープＢモジュール、及びその他のヒープ（長文発言でない場合のヒープや、実装する場合に必要なその他の記憶領域）を管理するその他ヒープモジュールで構成される。ヒープモジュールは、メモリリークを防止するために、起動時にヒープモジュールに必要なメモリ資源を確保した後は、一切動的なメモリ確保を行わない。
【００４５】
チャットボットサーバは次の手順で起動するものとする。長文発言ヒープＡ、Ｂ、その他ヒープのメモリ領域をオペレーティングシステムより確保する。確保できない場合は起動を失敗し、エラーを報告する。ＩＲＣクライアントの発言モニタに制御を移す。長文発言制御応答、その他応答で定義された発言がなされた場合は、該当するＩＲＣクライアントの応答モジュールにより応答処理を行う。
【００４６】
図６は、チャットボットサーバの各モジュールが行う長文の非同期発言の処理を示したものである。発言モニタモジュールは、ユーザの発言へ応答する。その他の応答モジュールは、長文発言を応答するため、現在アクティブな長文発言ヒープ（ここでは長文発言ヒープＡ）へ発言を格納し、制御を発言モニタモジュールに戻す。発言モニタモジュールは、ユーザの発言に応答、制御を繰り返す。一定時間を経ると、発言モニタは、長文発言ヒープＡから一要素の発言を行う。そして、再び発言モニタモジュールに制御が戻る。又、図示していないが、長文発言制御応答モジュールは、ユーザが入力した制御キーワードに対する処理を行う。
【００４７】
［バッファ構造］
図７は、長文発言ヒープの構造を示したものである。長文発言ヒープ（キャッシュバッファ）には、複数の発言キャッシュ要素がキューイングして格納される。キューイングは、図の横方向で示すチャンネル毎と、縦方向で示すメッセージの発言キャッシュ要素ごとになされる。それぞれの発言キャッシュ要素は、［チャンネル］、［メッセージ］、［次チャンネル］、［次メッセージ］、及び［一時停止フラグ］の５つのデータフィールドを持つ。
【００４８】
ここで、［チャンネル］フィールドは、ユーザごとに対応するチャンネルのＩＤであり、チャンネル番号であってもよい。［メッセージ］フィールドは、発言キャッシュ要素に分割された応答メッセージの内容を格納するフィールドであり、固定サイズで定義されている。［次チャンネル］フィールドは、別のチャンネル（別ユーザの）への発言キャッシュ要素へのポインタであり、［次メッセージ］フィールドは、同じチャンネル内の次の発言キャッシュ要素へのポインタである。また、［一時停止フラグ］は、応答メッセージの発言を一時停止するための制御フラグである。
【００４９】
本チャットボットサーバは、制御用のキーワードに反応することで、長文発言の取り止めや、一時停止、再開を行うことができる。［一時停止フラグ］は、長文発言ヒープを構成する発言キャッシュ要素を探索するときに、このフラグが現れた場合、それ以降の同一チャンネルの発言を停止するための制御フラグである。キーワードによる制御時には、このフラグを操作して発言キャッシュ要素の一時停止、再開を行う。一時停止中のチャンネルに新たに長文発言が生じた場合は、その発言より前の発言キャッシュ要素に追加する。
【００５０】
［キュー追加フロー］
図８，９，１０は、キャッシュバッファに発言キャッシュ要素をキューに追加する処理を示したフローチャートである。図８は、メインフローであり、図９は、同じチャンネルにキューが存在するときの処理、図１０は、同じチャンネルにキューが存在しないときの処理である。
【００５１】
フローチャートの説明の前に、以降に登場する各種のポインタについて説明する。
［長文キューポインタ］は、次に発言処理を行う発言キャッシュ要素を指すポインタである。また、［次メッセージポインタ］は、［長文キューポインタ］の指す発言キャッシュ要素中の［次メッセージ］の値を格納するポインタである。また、［先頭キューポインタ］は、キャッシュバッファから、新たに発言キャッシュ要素のメモリ領域を確保したときの先頭の要素を指すポインタである。ポインタにはその他、ワーク用に使用する［ｗｏｒｋポインタ］や終了位置を示す［終了ポインタ］が存在する。
【００５２】
まず、図８のステップＳ１０１において、追加するキューに必要なバッファを確保する。次に、ステップＳ１０２において、確保したバッファに、［チャンネル］、［メッセージ］、［次メッセージ］の値を設定する。そして、ステップＳ１０３において、［先頭キューポインタ］に確保したバッファの先頭キューのポインタ値を代入する。
【００５３】
次に、ステップＳ１０４において、［長文キューポインタ］がｎｕｌｌであるかをチェックし、ｎｕｌｌであればステップＳ１０７に移り、［長文キューポインタ］に［先頭キューポインタ］の値を代入して処理を終わる。ステップＳ１０４で［長文キューポインタ］がｎｕｌｌでなければ、ステップＳ１０５において、［ｗｏｒｋポインタ］に［長文キューポインタ］の値を代入する。そして、ステップＳ１０６において、［ｗｏｒｋポインタ］が指す発言キャッシュ要素中の［チャンネル］（図中では、［ｗｏｒｋポインタ］→チャンネルと略記する。以下同様）、［先頭キューポインタ］が指す発言キャッシュ要素中の［チャンネル］（図中では、［先頭キューポインタ］→チャンネル）とを比較し、一致すれば、図９のステップＳ１１１へ移動し、一致しなければ図１０のステップＳ１２１に処理を渡す。
【００５４】
図９は、同じチャンネルにキューが存在するときの処理である。まず、［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次メッセージ］がｎｕｌｌであるかをチェックする。ｎｕｌｌであれば、ステップＳ１１３に移り、［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次メッセージ］に［先頭キューポインタ］の値を代入する。ｎｕｌｌでなければ、ステップＳ１１２に移り、［ｗｏｒｋポインタ］に、［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次メッセージ］の値を代入する。その後、図８のステップＳ１０６に戻る。
【００５５】
図１０は、同じチャンネルにキューが存在しないときの処理である。まず、ステップＳ１２１において、［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次チャンネル］がｎｕｌｌであるかをチェックする。ｎｕｌｌであれば、ステップＳ１２３に移り、［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次チャンネル］に［先頭キューポインタ］の値を代入して処理を終わる。ｎｕｌｌでなければ、ステップＳ１２２に移り、［ｗｏｒｋポインタ］に［ｗｏｒｋポインタ］の指す発言キャッシュ要素中の［次チャンネル］の値を代入する。その後、図８のステップＳ１０６に戻る。
【００５６】
図１１は、単一チャンネルにおけるキュー新規追加のメモリメージを示した図である。ここでは、長文が何もキューイングされていない状態から、分割された長文発言キャッシュ要素ｅ１，ｅ２，ｅ３（以下、単にｅ１，ｅ２，ｅ３と呼ぶ）がキューイングされるフローを示す。
（１）アクティブなバッファからｅ１，ｅ２，ｅ３用のバッファを確保する。
（２）確保したバッファにチャンネル、メッセージ、次メッセージを設定する。
（３）長文キューポインタがｎｕｌｌかどうかをチェックする。
（４）長文キューポインタがｎｕｌｌの場合は、最初のメッセージのポインタ（この場合は、ｅ１）を設定する。
【００５７】
図１２は、単一チャンネルにおけるキュー新規追加のより詳細なメモリメージを示した図である。図の符号（ａ），（ｂ），（ｃ），（ｄ）に対応して以下の処理を行う。なお、以降、「次メッセージ」を「次メ」と、「次チャンネル」を「次チャ」と略記することにする。
（ａ）バッファを確保する。この時点で各ポインタは全てｎｕｌｌである。
（ｂ）チャンネル、メッセージ、次メッセージの値を設定する。
（ｃ）先頭キューポインタに確保したバッファの先頭キューポインタを代入する。
（ｄ）長文キューポインタに先頭キューポインタの値を代入する。
【００５８】
図１３は、別チャンネルキュー追加のメモリメージ図である。ここでは、長文がキューイングされている状態から、別のチャンネルの分割されたｅ１０，ｅ１１，ｅ１２がキューイングされるフローを以下に示す。
（１）アクティブなバッファからｅ１０，ｅ１１，ｅ１２用のバッファを確保する。
（２）確保したバッファにチャンネル、メッセージ、次メッセージを設定する。
（３）長文キューポインタがｎｕｌｌかどうかチェックする。
（４）長文キューポインタがｎｕｌｌでない場合、ｗｏｒｋポインタに長文キューポインタの値（ｅ１）をコピーする。
（５）ｗｏｒｋポインタの指しているキューの処理を開始する。
（６）ｗｏｒｋポインタの指しているキューのチャンネルと今回追加するキューの先頭（ｅ１０）のチャンネルが等しいかどうかチェックする。
（７）チャンネルが異なる場合は、ｗｏｒｋポインタの指しているキューの次チャンネルがｎｕｌｌかどうかチェックする。
（８）ｗｏｒｋポインタの指しているキューの次チャンネルがｎｕｌｌの場合、次チャンネルに先頭キューのポインタ（ｅ１０）を設定する。
【００５９】
図１４は、別チャンネルキュー追加のメモリメージのより詳細な図である。以下の（ａ）〜（ｅ）のステップは図中の符号に対応している。
（ａ）バッファを確保する。この時点で各ポインタは全てｎｕｌｌである。
（ｂ）チャンネル、メッセージ、次メッセージの値を設定する。
（ｃ）先頭キューポインタに確保したバッファの先頭ポインタを代入する。長文キューポインタがｎｕｌｌでなければ、ｗｏｒｋポインタに長文キューポインタを代入する。
（ｃ’）ｗｏｒｋポインタ→チャンネル（ｅ１のチャンネル＝１）と、先頭キューポインタ→チャンネル（ｅ１０のチャンネル＝２）が等しくない場合は、ｗｏｒｋポインタ→次チャンネル（ｅ１の次チャンネル＝ｎｕｌｌ）がｎｕｌｌかどうかをチェックし、ｎｕｌｌであれば（ｄ）に進む。
（ｄ）ｗｏｒｋポインタ→次チャンネル（ｅ１次チャンネル）に先頭キューポインタを代入する。
３チャンネル以上を追加する場合は、ｗｏｒｋポインタ→次チャンネルがｎｕｌｌになるまで図８のステップＳ１０６、図１０のステップＳ１２１，Ｓ１２２を繰り返す。
【００６０】
図１５は、同チャンネルキュー追加のメモリメージ図である。ここでは、長文がキューイングされている状態から、同一のチャンネルの分割されたｅ４，ｅ５，ｅ６がキューイングされるフローを以下に示す。
（１）アクティブなバッファからｅ４，ｅ５，ｅ６用のバッファを確保する。
（２）確保したバッファにチャンネル、メッセージ、次メッセージを設定する。
（３）長文キューポインタがｎｕｌｌかどうかチェックする。
（４）長文キューポインタがｎｕｌｌでない場合、ｗｏｒｋポインタに長文キューポインタの値（ｅ１）をコピーする。
（５）ｗｏｒｋポインタの指しているキューの処理を開始する。
（６）ｗｏｒｋポインタの指しているキューのチャンネルと今回追加するキューの先頭（ｅ４）のチャンネルが同じかどうかチェックする。
（７）チャンネルが同じ場合は、ｗｏｒｋポインタの指しているキューの次メッセージがｎｕｌｌかどうかチェックする。
（８）ｗｏｒｋポインタの指しているキューの次メッセージがｎｕｌｌの場合、次メッセージに先頭キューのポインタ（ｅ４）を設定する。
【００６１】
図１６〜図１７は、同チャンネルキュー追加のメモリメージのより詳細な図である。以下の（ａ）〜（ｆ）のステップは図中の符号に対応している。
まず、図１６において、
（ａ）バッファを確保する。この時点で各ポインタは全てｎｕｌｌである。
（ｂ）チャンネル、メッセージ、次メッセージの値を設定する。
（ｃ）先頭キューポインタに確保したバッファの先頭ポインタを代入する。長文キューポインタがｎｕｌｌでなければ、ｗｏｒｋポインタに長文キューポインタを代入する。
（ｄ）ｗｏｒｋポインタ→チャンネル（ｅ１のチャンネル＝１）と、先頭キューポインタ→チャンネル（ｅ４のチャンネル＝１）が等しければ、ｗｏｒｋポインタ→次メッセージ（ｅ１の次メッセージ＝ｅ２）がｎｕｌｌかどうかをチェックし、ｎｕｌｌでなければ、ｗｏｒｋポインタ→次メッセージ（ｅ１の次メッセージ＝ｅ２）を代入する。
【００６２】
次に、図１７に移り、
（ｅ）ｗｏｒｋポインタ→チャンネル（ｅ２のチャンネル＝１）と、先頭キューポインタ→チャンネル（ｅ４のチャンネル＝１）が等しい場合は、ｗｏｒｋポインタ→次メッセージ（ｅ２の次メッセージ＝ｅ３）がｎｕｌｌであるかどうかチェックし、ｎｕｌｌでなければｗｏｒｋポインタにｗｏｒｋポインタ→次メッセージ（ｅ２の次メッセージ＝ｅ３）を代入する。
（ｆ）ｗｏｒｋポインタ→チャンネル（ｅ３のチャンネル＝１）と、先頭キューポインタ→チャンネル（ｅ４のチャンネル＝１）が等しい場合は、ｗｏｒｋポインタ→次メッセージ（ｅ３の次メッセージ＝ｎｕｌｌ）がｎｕｌｌかどうかチェックし、ｎｕｌｌであれば、ｗｏｒｋポインタ→次メッセージ（ｅ３の次メッセージ）に先頭キューポインタを代入する。
【００６３】
［発言フロー］
図１８は、発言処理のフローチャートを示したものである。
【００６４】
まず、ステップＳ２０１において、［長文キューポインタ］がｎｕｌｌかどうかをチェックする。ｎｕｌｌであれば、処理を終了する。ｎｕｌｌでなければ、ステップＳ２０２において、［終了ポインタ］に［長文キューポインタ］→次メッセージの値を代入する。そして、ステップＳ２０３において、［終了ポインタ］の値と［長文キューポインタ］の値を比較し、一致していれば処理を終了する。一致していなければ、ステップＳ２０４において、［次メッセージポインタ］に［［長文キューポインタ］→次メッセージ］の値を代入する。
【００６５】
次に、ステップＳ２０５において、［ｗｏｒｋポインタ］に［長文キューポインタ］の値を代入する。そして、ステップＳ２０６において、［ｗｏｒｋポインタ］→［次チャンネル］がｎｕｌｌであるかどうかをチェックし、ｎｕｌｌでなければ、ステップＳ２０７において、［ｗｏｒｋポインタ］に［ｗｏｒｋポインタ］→［次チャンネル］の値を代入する。ｎｕｌｌであれば、ステップＳ２０８に移り、［ｗｏｒｋポインタ］→［次チャンネル］に、［次メッセージポインタ］の値を代入する。そして、ステップＳ２０９において、［長文キューポインタ］→メッセージ］の内容を発言する。更に、ステップＳ２１０において、［長文キューポインタ］に、［長文キューポインタ］→［次チャンネル］の値を代入して、ステップＳ２０３に戻る。
【００６６】
図１９は、単一チャンネルにおける発言フローのメモリメージを示した図である。ここでは、以下のような長文発言のフローを示す。
（１）長文キューポインタがｎｕｌｌかどうかをチェックする。
（２）長文キューポインタがｎｕｌｌでない場合は、ポインタの指しているキュー（ｅ１）の処理を開始する。
（３）次メッセージの値（ｅ２）を次メッセージポインタにコピーする。
（４）次チャンネルがｎｕｌｌかどうかチェックする。
（５）次チャンネルがｎｕｌｌの場合、次メッセージポインタの値（ｅ２）を次チャンネルにコピーする。
（６）キュー（ｅ１）のメッセージ（Ａ）を発言する。
（７）次チャンネルの値（ｅ２）を長文キューポインタにコピーする。
【００６７】
図２０は、単一チャンネルにおける発言フローのメモリメージのより詳細を示した図である。以下の（ａ）〜（ｅ）のステップは図中の符号に対応している。
【００６８】
（ａ）長文キューポインタがｎｕｌｌでなければ、終了ポインタに長文キューポインタ→次メッセージ（ｅ２）を代入する。
（ｂ）終了ポインタが長文キューポインタに等しくなければ、次メッセージポインタに長文キューポインタ→次メッセージ（ｅ２）を代入する。
（ｃ）ｗｏｒｋポインタに長文キューポインタ（ｅ１）を代入する。
（ｄ）ｗｏｒｋポインタ→次チャンネル（ｅ１→次チャンネル＝ｎｕｌｌ）がｎｕｌｌであれば、ｗｏｒｋポインタ→次チャンネルに次メッセージポインタ（ｅ２）を代入する。
（ｅ）長文キューポインタ（ｅ１）のメッセージを発言する。そして、長文キューポインタに長文キューポインタ→次チャンネル（ｅ２）を代入する。そして、終了ポインタと長文キューポインタが等しい場合は処理を終了する。
【００６９】
図２１〜２４は、複数チャンネルにおける発言フローのメモリメージを示した図である。ここでは、複数チャンネルがキューイングされている場合の長文発言フローを示す。以下の（ａ）〜（ｌ）のステップは図中の符号に対応している。
【００７０】
まず、図２１を参照する。
（ａ）長文キューポインタがｎｕｌｌでなければ、終了ポインタに長文キューポインタ→次メッセージ（ｅ２）を代入する。
（ｂ）終了ポインタが長文ポインタに等しくなければ、次メッセージポインタに長文キューポインタ→次メッセージ（ｅ２）を代入する。
（ｃ）ｗｏｒｋポインタに長文キューポインタ（ｅ１）を代入する。
（ｄ）ｗｏｒｋポインタ→次チャンネル（ｅ１→次チャンネル＝ｅ１０）がｎｕｌｌでないない場合は、ｗｏｒｋポインタにｗｏｒｋポインタ→次チャンネル（ｅ１０）を代入する。
【００７１】
次に、図２２に移る。
（ｅ）ｗｏｒｋポインタ→次チャンネル（ｅ１０→次チャンネル＝ｎｕｌｌ）がｎｕｌｌの場合、ｗｏｒｋポインタ→次チャンネルに次メッセージポインタを代入する。
（ｆ）長文キューポインタ（ｅ１）のメッセージを発言する。そして、長文キューポインタに長文キューポインタ→次チャンネル（ｅ１０）を代入する。
【００７２】
次に、図２３に移る。
（ｇ）終了ポインタと長文キューポインタが等しくなければ、次メッセージポインタに長文キューポインタ→次メッセージ（ｅ１１）を代入する。
（ｈ）ｗｏｒｋポインタに長文キューポインタを代入する。
（ｉ）ｗｏｒｋポインタ→次チャンネルがｎｕｌｌでなければ、ｗｏｒｋポインタにｗｏｒｋポインタ→次チャンネル（ｅ２）を代入する。
【００７３】
次に、図２４に移る。
（ｊ）ｗｏｒｋポインタ→次チャンネル（ｅ２→次チャンネル＝ｎｕｌｌ）がｎｕｌｌであれば、ｗｏｒｋポインタ→次チャンネルに次メッセージポインタを代入する。
（ｋ）長文キューポインタ（ｅ１０）のメッセージを発言する。そして、長文キューポインタに長文キューポインタ→次チャンネル（ｅ２）を代入する。
（ｌ）終了ポインタと長文キューポインタが等しいので処理を終了する。
終了時のメモリメージは、ｅ１，ｅ１０は処理済みで、長文キューポインタは、次回発言する先頭のｅ２を指す。また、各チャンネルは、各チャンネルの先頭メッセージが次のチャンネルによって指されている。
【００７４】
図２５、図２６は、３チャンネルにおける発言フローのメモリメージを示した図である。（ａ）は３チャンネルがキューイングされた状態を示しており、順次（ｂ）、（ｃ）、（ｄ）、（ｅ）、（ｆ）、（ｇ）、と発言の処理が進んでいき、（ｈ）は終了時のメモリメージである。
【００７５】
［チャットボットシステムのハードウェア構成］
図２７は、本発明の好適な実施形態の一例に係るチャットボットシステム１０（以下、単にチャットボットシステムと呼ぶ）のハードウェア構成を示す図である。
【００７６】
チャットボットシステム１０は、制御部１３０を構成するＣＰＵ１３１（マルチプロセッサ構成ではＣＰＵ１３２など複数のＣＰＵが追加されてもよい）、バスライン１０５、通信Ｉ／Ｆ（Ｉ／Ｆ：インターフェイス）１２０、メインメモリ１７０、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）１８０、ＵＳＢポート１９０、Ｉ／Ｏコントローラ１６０、キーボード及びマウスなどの入力装置１１０、並びに表示装置１４０を備える。
【００７７】
Ｉ／Ｏコントローラ１６０には、テープドライブ１５１、ハードディスク１５３、光ディスクドライブ１５２、及び半導体メモリ１５４などの記憶装置１５０を接続することができる。
【００７８】
ＢＩＯＳ１８０は、チャットボットシステム１０の起動時にＣＰＵ１３１が実行するブートプログラムや、チャットボットシステム１０のハードウェアに依存するプログラムなどを格納する。
【００７９】
ハードディスク１５３は、チャットボットシステムとして機能するための各種プログラム及び本発明の機能を実行するプログラムを記憶する。
【００８０】
光ディスクドライブ１５２としては、例えば、ＤＶＤ−ＲＯＭドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＡＭドライブ、ＣＤ−ＲＡＭドライブを使用することができる。この場合は各ドライブに対応した光ディスク１５２１を使用する。光ディスク１５２１から光ディスクドライブ１５２によりプログラム又はデータを読み取り、Ｉ／Ｏコントローラ１６０を介してメインメモリ１７０又はハードディスク１５３に提供することもできる。又、同様にテープドライブ１５１に対応したテープメディア１５１１を主としてバックアップのために使用することもできる。
【００８１】
チャットボットシステム１０に提供されるプログラムは、ハードディスク１５３、光ディスク１５２１、又はメモリカードなどの記録媒体に格納されて提供される。このプログラムは、Ｉ／Ｏコントローラ１６０を介して、記録媒体から読み出され、又は通信Ｉ／Ｆ１２０を介してダウンロードされることによって、チャットボットシステム１０にインストールされ実行されてもよい。
【００８２】
上述のプログラムは、内部又は外部の記憶媒体に格納されてもよい。ここで、記憶媒体としては、ハードディスク１５３、光ディスク１５２１、又はメモリカードの他に、ＭＤなどの光磁気記録媒体、テープメディア１５１１を用いることができる。又、専用通信回線やインターネットなどの通信回線に接続されたサーバシステムに設けたハードディスク１５３又は光ディスクライブラリなどの記憶装置を記録媒体として使用し、通信ネットワークを介してプログラムをチャットボットシステム１０に提供してもよい。
【００８３】
ここで、表示装置１４０は、ユーザによるデータの入力を受け付ける画面を表示したり、チャットボットシステム１０による演算処理結果の画面を表示したりするものであり、ブラウン管表示装置（ＣＲＴ）、液晶表示装置（ＬＣＤ）などのディスプレイ装置を含む。
【００８４】
ここで、入力装置１１０は、操作員による入力の受け付けを行うものであり、キーボード及びマウスなどにより構成してよい。
【００８５】
又、通信Ｉ／Ｆ１２０は、チャットボットシステム１０を専用ネットワーク又は公共ネットワークを介して端末と接続できるようにするためのネットワーク・アダプタである。通信Ｉ／Ｆ１２０は、モデム、ケーブル・モデム及びイーサネット（登録商標）・アダプタを含んでよい。
【００８６】
以上の例は、チャットボットシステム１０のハードウェア構成について主に説明したが、一般的なコンピュータに、プログラムをインストールして、そのコンピュータをチャットボットシステムとして動作させ、上記で説明した機能を実現することもできる。
【００８７】
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。又、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施例に記載されたものに限定されるものではない。
【図面の簡単な説明】
【００８８】
【図１】本発明の好適な実施形態の一例に係るチャットボットシステム１０の機能ブロックを示す図である。
【図２】従来のチャットボットシステムと、本発明のチャットボットシステム１０の使用される環境の違いを示した図である。
【図３】本発明のチャットボットシステムにおいて、長文の応答メッセージを分割してキューイングする概念を示した図である。
【図４】長文バッファの２重化についての概念図である。
【図５】本発明の好適な実施形態におけるチャットボットシステム１０をソフトウェアシステムにより実現する場合のモジュール構成を示した図である。
【図６】チャットボットサーバの各モジュールが行う長文の非同期発言の処理を示した図である。
【図７】長文発言ヒープの構造を示した図である。
【図８】キャッシュバッファに発言キャッシュ要素をキューに追加する処理を示したフローチャート（メインフロー）である。
【図９】キャッシュバッファに発言キャッシュ要素をキューに追加する処理を示したフローチャート（同じチャンネルにキューが存在するときの処理）である。
【図１０】キャッシュバッファに発言キャッシュ要素をキューに追加する処理を示したフローチャート（同じチャンネルにキューが存在しないときの処理）である。
【図１１】単一チャンネルにおけるキュー新規追加のメモリメージを示した図である。
【図１２】単一チャンネルにおけるキュー新規追加のより詳細なメモリメージを示した図である。
【図１３】別チャンネルキュー追加のメモリメージ図である。
【図１４】別チャンネルキュー追加のメモリメージのより詳細な図である。
【図１５】同チャンネルキュー追加のメモリメージ図である。
【図１６】同チャンネルキュー追加のメモリメージのより詳細な図（その１）である。
【図１７】同チャンネルキュー追加のメモリメージのより詳細な図（その２）である。
【図１８】発言処理のフローチャートを示したものである。
【図１９】単一チャンネルにおける発言フローのメモリメージを示した図である。
【図２０】単一チャンネルにおける発言フローのメモリメージのより詳細を示した図である。
【図２１】複数チャンネルにおける発言フローのメモリメージを示した図（その１）である。
【図２２】複数チャンネルにおける発言フローのメモリメージを示した図（その２）である。
【図２３】複数チャンネルにおける発言フローのメモリメージを示した図（その３）である。
【図２４】複数チャンネルにおける発言フローのメモリメージを示した図（その４）である。
【図２５】３チャンネルにおける発言フローのメモリメージを示した図（その１）である。
【図２６】３チャンネルにおける発言フローのメモリメージを示した図（その２）である。
【図２７】本発明の好適な実施形態の一例に係るチャットボットシステム１０のハードウェア構成を示す図である。
【符号の説明】
【００８９】
１０  チャットボットシステム
１１  通信部
１２  応答メッセージ生成部
１３  応答メッセージキューイング部
１４  記憶部
１５  バッファ制御部
１６  応答メッセージ提示部
１７  アクティブ・キャッシュバッファ
１８  インアクティブ・キャッシュバッファ
【図１】
0004885070.tif 000002
【図２】
0004885070.tif 000003
【図３】
0004885070.tif 000004
【図４】
0004885070.tif 000005
【図５】
0004885070.tif 000006
【図６】
0004885070.tif 000007
【図７】
0004885070.tif 000008
【図８】
0004885070.tif 000009
【図９】
0004885070.tif 000010
【図１０】
0004885070.tif 000011
【図１１】
0004885070.tif 000012
【図１２】
0004885070.tif 000013
【図１３】
0004885070.tif 000014
【図１４】
0004885070.tif 000015
【図１５】
0004885070.tif 000016
【図１６】
0004885070.tif 000017
【図１７】
0004885070.tif 000018
【図１８】
0004885070.tif 000019
【図１９】
0004885070.tif 000020
【図２０】
0004885070.tif 000021
【図２１】
0004885070.tif 000022
【図２２】
0004885070.tif 000023
【図２３】
0004885070.tif 000024
【図２４】
0004885070.tif 000025
【図２５】
0004885070.tif 000026
【図２６】
0004885070.tif 000027
【図２７】
0004885070.tif 000028