FUORI DALLA ZANZARIERA

サイト受付AI
    

STEP1

簡単な応答システムを作ってみる

まずは簡単な応答システムを作ってみます。
参考にしたサイトは、こちらです。
入力された内容に対応する返答文を辞書として管理し、紐づく返答文を返却するプログラムです。

そのままのコードを書き写すだけでは勉強にならないので、手を加えてみます。
辞書ファイルはテキストファイルではなく、辞書クラスを作ってインスタンス生成するようにします。
今の段階では、設定のベタ書きでクラスにする意味はありません。
将来的に辞書クラスをキャラクタークラスとした場合には意味があります。
複数の受付AIによる掛け合いを実装したいので、キャラクターオブジェクトを生成するクラスを
用意しておくことは意味があります。

参考サイトに倣ってメインの処理を作成します。

▼front_desk_ai.py

            '''
            サイト受付API STEP1 簡単な応答をするプログラムを作る
            '''
            
            # 辞書クラスをインポートする
            from front_desk_ai_dict import frontDeskAiDict
            
            # 辞書クラスをインスタンス化する
            bot_dict_class = frontDeskAiDict()
            # 辞書情報を格納する
            bot_dict = bot_dict_class.front_desk_ai_dict_1
            # サイト受付入力メッセージを格納する
            input_message = bot_dict_class.front_desk_ai_def_req_message
            # サイト受付AIの名前を格納する
            ai_name = bot_dict_class.front_desk_ai_name
            # サイト受付共通メッセージを格納する
            common_message = bot_dict_class.front_desk_ai_def_res_message
            # サイト受付処理終了メッセージを格納する
            end_message = bot_dict_class.front_desk_ai_def_end_message
          

辞書クラスを読み込んでインスタンス化します。
生成したオブジェクトから受付AIの情報を取得します。


            # サイト受付処理終了メッセージが入力されたら処理を終了する
            while True:
                # 入力された情報を変数に格納する
                command = input(input_message)
            
                # 応答メッセージを初期化する
                responseMessage = ""
            
                # 辞書クラスの辞書1にキーが含まれているかチェック
                for param_key in bot_dict:
                    # 入力された情報と辞書1のキーが一致した場合に辞書1から紐づく値を取得する
                    if param_key in command:
                        responseMessage = bot_dict[param_key]
                        break
            
                # 辞書に含まれていない文字の指定の場合は、問い返す
                if not responseMessage:
                    responseMessage = ai_name + command + common_message
                # 辞書に含まれている文字の指定の場合は、紐づく応答メッセージを返却する
                else:
                    responseMessage = ai_name + responseMessage
          

応答部分の処理を記述します。入力を受け付けて、取得したメッセージを変数に格納します。
辞書クラスから取得した辞書情報はキーが入力されたメッセージ、値が応答メッセージを
格納しているため、入力メッセージと辞書情報のキーが一致していれば、
辞書情報から入力メッセージをキーに値を取得して応答メッセージ用の変数に格納します。
一致しない場合は、共通のメッセージで問い返すように応答メッセージ用の変数に格納します。


            # 応答メッセージを表示する
            print(responseMessage)

            # 終了が入力されたらループ処理を抜ける
            if end_message in command:
                break
          

応答システムなので、ループ処理で入力を受け付ける処理に戻ります。
このままでは無限ループになるため、終了コマンドとなるメッセージを定義し、
入力されたメッセージが一致した場合はループ処理を抜けます。

次に辞書クラスを作成します。

▼front_desk_ai_dict.py

            '''
            辞書クラス
            '''
            
            class frontDeskAiDict(object):
                '''
                サイト受付の応答する辞書を管理するクラス
                '''
            
                def __init__(self):
            
                    # 挨拶を管理する辞書配列
                    self.front_desk_ai_dict_1 = {
                        'おはよう':'オハヨウゴザイマス',
                        'こんにちは':'コンニチワ',
                        'こんばんわ':'コンバンワ',
                        'とりあえずガチャ回そう':'ガチャは悪い文明です',
                        'さようなら':'バイバイ'
                    }
            
                    # サイト受付AIに使う辞書以外のパラメータ
                    self.front_desk_ai_def_req_message = '発言を入力> '
                    self.front_desk_ai_name = 'リヨぐだ子> '
                    self.front_desk_ai_def_res_message = 'とは何ですか?'
                    self.front_desk_ai_def_end_message = 'さようなら'
          

__init__はインスタンス生成時に実行される処理を書きます。
辞書クラスとして必要な定義をオブジェクト自身に追加していきます。

実際に上記のコードを実行すると以下の画像のように特定のワードに応答してくれます。

コンソール画面

最近、色々なWebサイトで見かけるようになったチャットボットの基本的な仕組みは今回作ったプログラムです。
実際には入力された文章を解析し、言葉の意味を把握し応答する文言を生成して返却するところの自己学習がAI部分になります。
まだまだ、そこまで行くには道は遠いですが、少しずつ勉強していきます。
次回も楽しみに待っていただければ、幸いです。