こんにちは、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/

夢解釈AIアプリの仕組み
今回のアプリでは、ユーザーが入力した夢の内容をChatGPTに送信し、その解釈結果を表示します。Streamlitはユーザーインターフェースの作成とAPIとのやり取りを担い、ChatGPTは夢の解釈を生成します。
ソースコード解説
以下は、夢解釈AIアプリのソースコードです。
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("夢の内容を入力してください。") # 入力がない場合の警告を表示コードの詳細解説
- ライブラリのインポート: 必要なライブラリ
time,streamlit,openaiをインポートします。timeはAPIのレート制限を回避するために使用します。openaiはOpenAI APIと通信するために使用します。 - Streamlitの設定:
st.title()でアプリのタイトルを設定し、st.write()で説明文を表示します。 - OpenAI APIキーの設定:
st.secrets["OPENAI_API_KEY"]を使用して、OpenAI APIキーを安全に設定します。APIキーはStreamlitのSecrets Managementで管理します。 - OpenAI APIクライアントの作成:
client = openai.OpenAI()でOpenAI APIのクライアントを作成します。 interpret_dream関数: この関数は、ChatGPT APIと通信して夢の解釈を取得します。
gpt-3.5-turboまたはgpt-4を使用できます。- APIに送信するメッセージを定義します。
systemメッセージでChatGPTの役割を指定し、userメッセージで夢の内容を送信します。 - APIからの応答を
returnします。 RateLimitErrorをキャッチし、最大5回リトライする処理を実装しています。
- 解釈の実行:
st.buttonで “解釈する” ボタンを作成します。- ボタンが押されたら、
dreamが空でないことを確認します。 st.spinnerで処理中であることを表示します。interpret_dream関数を呼び出して夢の解釈を取得します。st.writeを使用して解釈結果を表示します。
APIキーをStreamlitのSecrets Managementに設定する方法
StreamlitのSecrets Managementは、APIキーなどの機密情報を安全に管理するための機能です。
secrets.tomlファイルを作成: アプリケーションのルートディレクトリにsecrets.tomlファイルを作成します。- APIキーを記述:
secrets.tomlファイルに、以下の形式でAPIキーを記述します。OpenAIで取得したAPIキーをyour_api_keyと置き換えて下さい。
OPENAI_API_KEY = "your_api_key" config.tomlファイルを作成: アプリケーションのルートディレクトリにconfig.tomlファイルを作成し、secrets.tomlファイルの場所を指定します。
[secrets]
path = "secrets.toml"これで、st.secrets["OPENAI_API_KEY"] でAPIキーにアクセスできます。
config.tomlとsecrets.tomlについて
config.toml: Streamlitアプリの設定を記述するファイルです。テーマ、サーバー設定、Secrets Managementの設定などを記述できます。secrets.toml: APIキー、データベースのパスワードなど、機密情報を記述するファイルです。このファイルはバージョン管理システムに含めないようにする必要があります。
アプリの実行方法
- 上記のコードを
app.pyなどのファイル名で保存します。 - StreamlitとOpenAIのライブラリをインストールします。
pip install streamlit openai
- OpenAI APIキーを
secrets.tomlに設定し、config.tomlを作成します。 - ターミナルで
streamlit run app.pyを実行します。
まとめ
今回は、StreamlitとChatGPT APIを使って夢解釈AIアプリを作成しました。生成AIとStreamlitを組み合わせることで、アイデア次第で様々なWebアプリを簡単に開発できます。ぜひ、自分だけのオリジナルアプリを作ってみてください!
参考
アプリを作成する上で参考になるページをリストにします。
Pythonに関する書籍の<PR>です。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。
最後まで読んでいただきありがとうございました。


コメント