猿でもわかる!EC2とChatGPT APIを利用したチャットbotの作り方

ドカタの転職日記

はじめに

最近巷でChatGPTが話題になっていますが、ChatGPT APIはご存知でしょうか。

簡単に言うと、ChatGPTの機能が自分で作成したサーバーで利用できるAPIです。

今回は、ChatGPT APIとAWSのEC2を利用して簡易的なChatBotアプリを作っていきます。

用語解説

・AWS:Amazonが提供するクラウドサービス

・EC2:AWS上に立てる仮想マシン

・APIキー:ChatGPTを利用するためのコード

必要なもの

以下に必要なものを列挙します。

・AWSのアカウント

・ChatGPTのアカウント

・ChatGPTのAPIキー

・作業用のPC

AWSアカウントとChatGPT APIキーについては、利用するためにクレジットカードの登録が必要です。

AWSでEC2を作成する

作成したAWSアカウントでAWSにログインします。

ログインURLはこちら

EC2サービスに移動し、EC2を作成します。

EC2の名前を決め、OSイメージをAmazon Linuxを選びます。

インスタンスタイプを「t2micro」を選択します。

キーペアを作成し、Desktopに保存します。

「インターネットからのHTTPSトラフィックを許可」と「インターネットからのHTTPトラフィックを許可」にチェックを入れます。

内容を確認し、画面右下の「インスタンスを起動」をクリックします。

しばらくするとEC2が起動します。

パブリックIPv4「52.73.181.216」のアドレスをメモします。

AWSでの操作は以上です。

EC2に接続する

作成したEC2に接続します。

本手順ではMac端末を利用するので、ターミナルアプリから接続します。

Windows端末の場合はTeraterm等のターミナルアプリをインストールし接続してください。

ターミナルを立ち上げます。(下のアイコン)

「cd Desktop」コマンドでデスクトップに移動します。

dokata@dokatanoAir ~ % cd Desktop

「ls」コマンドでAWS上で作成した「dokata.pem」が存在することを確認します。

dokata@dokatanoAir Desktop % ls
dokata.pem			

「chmod」コマンドで「dokata.pem」の権限を変更します。

dokata@dokatanoAir Desktop % chmod 600 dokata.pem

「dokata.pem」を利用してEC2に接続します。

「dokata.pem」と「52.73.181.216」はAWS上で作成したものを入力します。

dokata@dokatanoAir Desktop % ssh -i dokata.pem ec2-user@52.73.181.216

以下の質問をされるので、「yes」を入力します。

Warning: Identity file dokata.pem not accessible: No such file or directory.
The authenticity of host '52.73.181.216 (52.73.181.216)' can't be established.
ECDSA key fingerprint is SHA256:2hKsFfMaW3iBTAHrcqFtvPYeowIuvtFYrSPFeOYFfbY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

EC2にログインすることができました。

Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '52.73.181.216' (ECDSA) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-172-31-29-19 ~]$ 

ChatGPT APIキーを取得する

こちらにアクセスし、APIキーを取得します。

右上のアイコンを押し、「View API Keys」を押します。

左の項目の「API Keys」を押し、「Create new secret key」を押します。

※クレジットカードを登録していないと使えないので「Billing」から登録をしてからKeyを取得します。

チャットボットを構築する

今回は、html・CSS・Pythonを利用してチャットbotを構築します。

構築に必要なPythonモジュールをインストールします。

[ec2-user@ip-172-31-29-19 ~]$ sudo curl -O https://bootstrap.pypa.io/get-pip.py
[ec2-user@ip-172-31-29-19 ~]$ sudo python3 get-pip.py 
[ec2-user@ip-172-31-29-19 ~]$ sudo pip3 install Flask
[ec2-user@ip-172-31-29-19 ~]$ sudo pip3 install openai

まずは作業ディレクトリを作成します。

[ec2-user@ip-172-31-29-19 ~]$ mkdir /home/ec2-user/chatbot

chatbotディレクトリに移動します。

[ec2-user@ip-172-31-29-19 ~]$ cd chatbot/

Pythonファイル「app.py」を作成します。

[ec2-user@ip-172-31-29-19 ~]$ vi app.py

「i」ボタンを押し、入力モードにします。

app.pyに記述する内容は以下の通り。

「esc」ボタンを押し、「:wq!」を入力しエンターを押します。

from flask import Flask, render_template, request, jsonify
import openai

app = Flask(__name__)
openai.api_key = "作成したAPIキー"

@app.route('/')
def index():
    return render_template('index.html')

@app.route("/send-message", methods=["POST"])
def send_message():
    user_input = request.json.get("user_input")

    # ユーザーのメッセージをChatGPTに送信
    prompt = f"ユーザー: {user_input}\nボット:"

    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=prompt,
        temperature=0.7,
        max_tokens=150
    )

    # ChatGPTの応答を取得
    bot_response = response.choices[0].text.strip()

    return jsonify({"bot_response": bot_response})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

CSSファイルとHTMLファイルを配置するディレクトリを作成します。

[ec2-user@ip-172-31-29-19 chatbot]$ mkdir templates
[ec2-user@ip-172-31-29-19 chatbot]$ mkdir static
[ec2-user@ip-172-31-29-19 chatbot]$ cd templates

Pythonファイル「app.py」を作成します。

[ec2-user@ip-172-31-29-19 templates]$ vi index.html

「i」ボタンを押し、入力モードにします。

index.htmlに記述する内容は以下の通り。

「esc」ボタンを押し、「:wq!」を入力しエンターを押します。

<!-- index.html -->

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ChatGPT Chatbot</title>
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <div id="chat-container">
	    <div id="chat-log"></div>
        <input type="text" id="user-input" placeholder="メッセージを入力してください...">
        <button onclick="sendMessage()">送信</button>
    </div>

    <script>
        function sendMessage() {
            var user_input = document.getElementById('user-input').value;
            var chat_log = document.getElementById('chat-log');

            // ユーザーのメッセージを表示
            chat_log.innerHTML += '<div class="user-message">麦わらのルフィ: ' + user_input + '</div>';

            // ChatGPT APIにメッセージを送信してボットの応答を取得
            fetch('/send-message', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    user_input: user_input,
                }),
            })
            .then(response => response.json())
            .then(data => {
                // ボットの応答を表示
                chat_log.innerHTML += '<div class="bot-message">うずまきナルト: ' + data.bot_response + '</div>';
            })
            .catch(error => console.error('Error:', error));
            
            // 入力欄をクリア
            document.getElementById('user-input').value = '';
        }
    </script>
</body>
</html>

staticディレクトリに移動し、

CSSファイル「style.css」を作成します。

[ec2-user@ip-172-31-29-19 templates]$ cd ../static
[ec2-user@ip-172-31-29-19 static]$ vi style.css

「i」ボタンを押し、入力モードにします。

style.cssに記述する内容は以下の通り。

「esc」ボタンを押し、「:wq!」を入力しエンターを押します。

/* static/style.css */

#chat-container {
    max-width: 600px;
    margin: auto;
}

.user-message {
    background-color: #e0f7fa;
    padding: 10px;
    margin: 10px 0;
    border-radius: 5px;
}

.bot-message {
    background-color: #c8e6c9;
    padding: 10px;
    margin: 10px 0;
    border-radius: 5px;
}

これで構築は完了です。

チャットボットアプリを起動する

chatbotディレクトリに移動し、アプリを起動します。

[ec2-user@ip-172-31-29-19 chatbot]$ /home/ec2-user/chatbot

アプリを起動します。

[ec2-user@ip-172-31-29-19 chatbot]$ sudo python3 app.py &

ブラウザで「http://52.73.181.216」を検索します。

チャットボットアプリに接続できました。

質問をしてみましょう。

Dの意思を継ぐもの
Dの意思を継ぐもの

おれ、海賊王になれたのかぁ??

質問がちゃんと返ってきましたね。

まとめ

今回はChatGPT APIを利用した簡単なチャットボットを構築してみました。

ChatGPTの機能を利用すれば色々なアプリが作れそうですよね。

皆様もぜひ構築してみてください。

コメント