ChatGPTに作成してもらった人工無能チャットボットをWebアプリで動くように訂正してもらった

ChatGPTに作成してもらった人工無能チャットボットですが、ついでに辞書ファイルを外部化して、さらにWebアプリとしてブラウザから動くように訂正してもらいました。

今回はWebアプリとして「streamlit」を使うように指定しました。これはFlaskより、もっと手軽にWebアプリが作れる超便利なフレームワークです。もちろん事前にインストールが必要です。

ChatGPTへの指示文:

bot_dict の辞書部分を外部ファイルとして取り込む形にコードを訂正してください。また、Streamlit を使ってWebアプリとして動くように訂正してください。

回答:

外部ファイルからbot_dict辞書を読み込むようにコードを修正します。以下が修正後のコードになります。 bot_dict.txtファイルには以下のように会話の内容を保存しておきます。


こんにちは:こんにちは!|おはようございます!|やあ!
元気?:はい、元気です!|少し疲れていますが、大丈夫です!|元気だよ!
名前は?:私の名前はうずらです。|うずらといいます。|私はうずらです。
何歳?:私はまだ生まれたばかりで、年齢はありません。|私は年齢を持っていません。|私は永遠の存在です。
何が好き?:私は会話が好きです。|私は学習が好きです。|私は新しいことを学ぶのが好きです。
さようなら:さようなら!|またね!|またお話ししましょう!        
    

以下がStreamlitを使ってWebアプリとして動くように修正したコードになります。


import random
import streamlit as st

# チャットボットの辞書ファイルのパス
BOT_DICT_FILE_PATH = "bot_dict.txt"

# チャットボットの辞書をファイルから読み込む
def load_bot_dict(file_path):
    bot_dict = {}
    with open(file_path, encoding="utf-8") as f:
        for line in f:
            key, value = line.strip().split(":")
            bot_dict[key] = value.split("|")
    return bot_dict

# チャットボットの返答
def bot_reply(user_input, bot_dict):
    if user_input in bot_dict:
        return random.choice(bot_dict[user_input])
    else:
        return "ごめんなさい、よくわかりませんでした。"

# Streamlitアプリの設定
def app():
    st.title("うずらチャットボット")
    bot_dict = load_bot_dict(BOT_DICT_FILE_PATH)
    st.write("うずら: こんにちは!私はうずらといいます。あなたのお話し相手になります。")

    # ユーザーの入力を取得し、返答を生成する
    user_input = st.text_input("あなた: ")
    if user_input:
        response = bot_reply(user_input, bot_dict)
        st.write("うずら: " + response)

if __name__ == '__main__':
    app()

            
        

修正後のコードでは、Streamlitを使用してチャットボットをWebアプリとして実行します。app()関数はStreamlitアプリを設定し、Webページのタイトルとチャットボットの最初の挨拶文を表示します。また、text_inputを使用してユーザーからの入力を取得し、bot_reply関数でユーザーの入力に対する適切な返答を生成して、Streamlitのwrite関数を使用して画面に表示しています。

最後に、if __name__ == '__main__':ブロックでapp()関数を呼び出して、Webアプリを実行します。これにより、コマンドラインではなくWebブラウザでチャットボットを使用できます。

結果:

ターミナルから以下を実行して、無事に成功しました。uzura.py はChatGPTから提示されたコードを保存したものです。また、別途、辞書として bot_dict.txt も用意して、uzura.py と同じ場所においてます。


streamlit run uzura.py