【Streamlit】生成AIで作る夢解釈アプリ

Streamlit
この記事は約9分で読めます。

こんにちは、JS2IIUです。
今回はStreamlitから、生成AIのAPIを利用したミニアプリを作ってみます。

ChatGPTなどの生成AIは、私たちの生活に革新をもたらしています。今回は、この生成AIとStreamlitというPythonライブラリを組み合わせて、夢解釈AIアプリを作ってみましょう。なお、この例を実際に動かすためにはOpenAIのAPIが動かせるようにAPIキーを取得しておく必要があります。

Streamlitとは?

Streamlitは、PythonでインタラクティブなWebアプリを簡単に作成できるオープンソースのライブラリです。データサイエンスや機械学習の分野で人気があり、コードを少し書くだけで、データの可視化やモデルのデプロイが可能です。Streamlitの最大の特徴は、シンプルな構文と直感的なAPIです。これにより、Web開発の経験が少ない人でも、簡単にアプリを作成できます。

これまでのStreamlitに関する記事をまとめてあります。参考にしてみて下さい。
https://js2iiu.com/category/programming/python/streamlit/

Streamlit
PythonのWEBフレームワークであるStreamlitについての記事を集めたページです。

夢解釈AIアプリの仕組み

今回のアプリでは、ユーザーが入力した夢の内容をChatGPTに送信し、その解釈結果を表示します。Streamlitはユーザーインターフェースの作成とAPIとのやり取りを担い、ChatGPTは夢の解釈を生成します。

ソースコード解説

以下は、夢解釈AIアプリのソースコードです。

Python
import time
import streamlit as st
import openai
from openai import RateLimitError

# Streamlitの設定
st.title("夢解釈AI")  # アプリのタイトルを設定
st.write("見た夢の内容を入力してください。")  # 説明文を表示

# OpenAI APIキーの設定
openai.api_key = st.secrets["OPENAI_API_KEY"]  # Secrets ManagementからAPIキーを取得

# Client
client = openai.OpenAI()  # OpenAI APIのクライアントを作成

# ChatGPT APIとやり取りする関数
def interpret_dream(dream):
    for _ in range(5):  # 最大5回リトライ
        try:
            response = client.chat.completions.create(  # ChatGPT APIを呼び出す
                model="gpt-3.5-turbo",  # または "gpt-4"
                messages=[
                    {"role": "system", "content": "あなたは夢分析のプロです。"},  # システムメッセージ
                    {"role": "user", "content": f"夢の内容:{dream}"},  # ユーザーメッセージ
                ]
            )
            return response.choices[0].message.content.strip()  # 解釈結果を返す
        except RateLimitError:  # レート制限エラーが発生した場合
            st.warning("レート制限に達しました。少し待ってから再試行します。")  # 警告を表示
            time.sleep(10)  # 10秒待機
    st.error("リクエストが失敗しました。後でもう一度お試しください。")  # エラーメッセージを表示
    return None  # 解釈結果が取得できなかった場合はNoneを返す

# 解釈ボタンが押されたら実行
if st.button("解釈する"):  # ボタンを作成
  if dream:  # 夢の内容が入力されている場合
    with st.spinner("解釈中..."):  # 処理中であることを表示
      interpretation = interpret_dream(dream)  # 夢の解釈を取得
      st.write("## 解釈結果")  # 結果のタイトルを表示
      st.write(interpretation)  # 解釈結果を表示
  else:
    st.warning("夢の内容を入力してください。")  # 入力がない場合の警告を表示

コードの詳細解説

  1. ライブラリのインポート: 必要なライブラリ time, streamlit, openai をインポートします。time はAPIのレート制限を回避するために使用します。openai はOpenAI APIと通信するために使用します。
  2. Streamlitの設定: st.title() でアプリのタイトルを設定し、 st.write() で説明文を表示します。
  3. OpenAI APIキーの設定: st.secrets["OPENAI_API_KEY"] を使用して、OpenAI APIキーを安全に設定します。APIキーはStreamlitのSecrets Managementで管理します。
  4. OpenAI APIクライアントの作成: client = openai.OpenAI() でOpenAI APIのクライアントを作成します。
  5. interpret_dream 関数: この関数は、ChatGPT APIと通信して夢の解釈を取得します。
  • gpt-3.5-turbo または gpt-4 を使用できます。
  • APIに送信するメッセージを定義します。system メッセージでChatGPTの役割を指定し、user メッセージで夢の内容を送信します。
  • APIからの応答を return します。
  • RateLimitError をキャッチし、最大5回リトライする処理を実装しています。
  1. 解釈の実行:
  • st.button で “解釈する” ボタンを作成します。
  • ボタンが押されたら、dream が空でないことを確認します。
  • st.spinner で処理中であることを表示します。
  • interpret_dream 関数を呼び出して夢の解釈を取得します。
  • st.write を使用して解釈結果を表示します。

APIキーをStreamlitのSecrets Managementに設定する方法

StreamlitのSecrets Managementは、APIキーなどの機密情報を安全に管理するための機能です。

  1. secrets.toml ファイルを作成: アプリケーションのルートディレクトリに secrets.toml ファイルを作成します。
  2. APIキーを記述: secrets.toml ファイルに、以下の形式でAPIキーを記述します。OpenAIで取得したAPIキーをyour_api_keyと置き換えて下さい。
TOML
   OPENAI_API_KEY = "your_api_key" 
  1. config.toml ファイルを作成: アプリケーションのルートディレクトリに config.toml ファイルを作成し、secrets.toml ファイルの場所を指定します。
TOML
   [secrets]
   path = "secrets.toml"

これで、st.secrets["OPENAI_API_KEY"] でAPIキーにアクセスできます。

config.tomlとsecrets.tomlについて

  • config.toml: Streamlitアプリの設定を記述するファイルです。テーマ、サーバー設定、Secrets Managementの設定などを記述できます。
  • secrets.toml: APIキー、データベースのパスワードなど、機密情報を記述するファイルです。このファイルはバージョン管理システムに含めないようにする必要があります。

アプリの実行方法

  1. 上記のコードを app.py などのファイル名で保存します。
  2. StreamlitとOpenAIのライブラリをインストールします。
   pip install streamlit openai
  1. OpenAI APIキーを secrets.toml に設定し、 config.toml を作成します。
  2. ターミナルで streamlit run app.py を実行します。

まとめ

今回は、StreamlitとChatGPT APIを使って夢解釈AIアプリを作成しました。生成AIとStreamlitを組み合わせることで、アイデア次第で様々なWebアプリを簡単に開発できます。ぜひ、自分だけのオリジナルアプリを作ってみてください!

参考

アプリを作成する上で参考になるページをリストにします。

Pythonに関する書籍の<PR>です。

24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。

最後まで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました