爆速でChatGPTのチャットボットを作成してみた
こんにちは。
ChatGPTの話題が早すぎるのと凄すぎるので目まぐるしい毎日を過ごしております。
そんなわけで早速OpenAIのAPIを使って、爆速でチャットボットを作ってみました。
その手順と実行までの流れをまとめましたので紹介します。
それではよろしくお願いします。
OpenAIのアカウント作成
まずはOpenAIのAPIを使用するには、APIキーが必要となります。
なので、OpenAIのアカウントを作成しましょう。
作成したら、右上のアカウントから 「View API keys」をクリックします。
画面真ん中にある「+Create new secret key」をクリックします。
するとAPIキーのコピー画面が出るので、これをコピーしておきます。
OpenAIのAPI使用料金について(無料枠あり)
OpenAIのAPIを使う際は料金が発生します。(オープン・・?)
今回作成するようなチャットボットだと1000トークンあたり0.002$かかるようです。
で、3か月間は18$分無料で使えます。
openai.com
トークン制はややわかりにくいですが、大体1単語あたり1トークンかかるぐらいのイメージで良いかと思います。
なので、よっぽど3か月分お試しするには十分かと思います。
ちなみに使用状況はOpenAIのマイページから確認できます。
Streamlitで手軽に実装
速攻でWEBアプリとして試すには、Streamlitは最適です。
私のこれまでのブログでも、Streamlitについては紹介していますので、ご興味あればご確認ください。
まず、必要なライブラリをインストールしてください。
$ pip install openai $ pip install streamlit
インストールが完了すればこれで準備は完了です。
ソースコードはこちらのGitにアップしました。
github.com
なんと40行以内で実装できてしまいました。
いくつかポイントを解説します。
response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=chat_log, max_tokens=1000, )
ChatGPTからレスポンスを返す処理です。
引数のmessagesに入力情報を渡します。
ここでmessagesがちょっと特殊な辞書型で、
{"role": "user", "content": input_text}
のようになってます。
roleのuserがユーザーの入力で、assistantがチャットGPT側の出力になります。
これをリストで順番に格納することで、会話が成立します。
この順番に格納しないと、ChatGPT側が前の会話を覚えていない回答をしますので注意が必要です。
Streamlitのリストを保持するコードは以下です。
@st.cache_resource def chat_save(): chat_dict_list = [] return chat_dict_list
Streamlitは常にプログラムのコードを回しているので、空のリストが保持できない(初期化してしまう)問題があります。
そういう時に、Streamlitのメソッドにcache_resourceというものがあります。
これにより初期化されないパイプラインとしてリストの情報を保持できるため、Chatの履歴を保存することができます。
StreamlitのCacheについて、詳細が気になる方向けに公式のリンクを貼っておきます。
docs.streamlit.io
動かしてみる
では動かしてみましょう。
まず最初に取得したAPIキーを、ソースコード7行目の"your openapi key"に入力します。
そしたら保存して、以下のコマンドを入力して実行しましょう。
$ streamlit run app.py
すると以下のようなWEBページが立ち上がれば成功です。
では早速メッセージをうってみましょう。
ChatGPTは何ができるのか、いろいろ教えてくれていますね。
ではこの会話の履歴を把握して回答してくれるか確認するため、次のような質問をします。
ちゃんと前の会話を覚えて会話してくれていることが確認できました。
チャットボットとして上手く機能していそうですね。
まとめ
今回ChatGPTを使って、とても簡単にチャットボットを作ってみました。
Streamlitと組み合わせれば、プロトタイプが速攻で出来てしまう時代になったことにとても感動しています。
今までのありとあらゆる既存コンテンツにChatGPTが組み込まれる日がついにきました。
今回私が作成したチャットボットを機に、皆さんがChatGPTと向き合ってみて、我々の日常にどう役立ちそうか、考えるきっかけになれば幸いです。