この記事について
Pythonで手軽にフロントエンドを作れるライブラリ「Streamlit」を、久しぶりに触れてみました。その中で特に気になった新機能があったので、いくつかピックアップしてご紹介します。
Streamlitのリリースノートを見てみる
記事執筆時点(4/5)の最新バージョンはv1.44.0
のようでした。
https://docs.streamlit.io/develop/quick-reference/release-notes/2025
今回は1.44.0のアップデートを2つ、1.43.0のアップデート(2025/3/4)を1つ取り上げてみたいと思います。
前提 実行環境はuvを使っています。uvがインストールされていることを前提に以下記載しています。詳しくは公式ページをご覧ください。
ざっくり導入手順
プロジェクトを作成
uv init
インストール対象のライブラリを追加
uv add streamlit
仮想環境が自動的に作成されるのでactivate
. .venv/bin/activate
実際にライブラリをインストール
uv sync
①st.chat_input
がファイル入力を受け付けるようになった(v1.43.0)
📁 Announcing the option to accept files with st.chat_input!
従来、ファイルアップロードをできるUIを作るには、st.file_uploader
を使う必要がありましたが、
st.chat_input
において、accept_file
をTrueにすることで、ファイルアップロード用のUIを表示できるようになりました。(以下参照)
file_type
を指定することで、アップロードすることのできる拡張子を指定することができます。
このアップデートで、マルチモーダルなチャットUIの構築がさらに手軽になった印象です。
prompt = st.chat_input(
"メッセージとファイルを入力してください",
accept_file=True,
file_type=["jpg", "jpeg", "png"]
)
とても雑な作りですがこんなAIとマルチモーダルに対話するUIが簡単に作れました。詳細なコードの解説はここでは割愛しますが、入力されたプロンプトから質問のtextとアップロードされたfileを抽出し、それをAmazon BedrockのConverseAPIに渡す形で作っています。(作成にあたっては一部こちらを参照しました)
(イメージ)
if prompt:
question = prompt["text"]
files = prompt["files"]
if files:
uploaded_file = files[0]
.....
# bedrockのAPIを呼び出す処理(question,uploaded_fileを引数で渡してあげる)
chat_inputを使って入力されたpromptの中身をターミナルに出力して確認してみると、以下のような形式になっています。
ChatInputValue(text='説明して', files=[UploadedFile(file_id='XXXX', name='0000096860.pdf', type='application/pdf', size=2031020, _file_urls=file_id: "XXXXX"
upload_url: "XXXXXXXXXX"
delete_url: "XXXXXXXXX"
)])
②エラーの内容を、Google検索やChatGPTで質問できるようになった(v1.44.0)
🤖 st.exception includes links to open Google or ChatGPT with the contents of the exception. This includes uncaught exceptions displayed in the app.
エラー内容を、ChatGPTやGoogleで検索できるようになりました。
簡単な例ではありますが、Pythonコードを書きエラーを発生させてみます。
import streamlit as st
st.title("📌 Streamlit v1.44.0新機能")
try:
x = 1 / 0 # わざとゼロ除算してみる
except Exception as e:
st.exception(e)
$ streamlit run app.py
でローカル(localhost:8501
)でアプリをstreamlitで立ち上げ、ブラウザを確認してみます。
ゼロ除算をしているのでこのコードは当然エラーになります。
エラー画面に注目すると、Ask Google
Ask ChatGPT
というリンクが表示されています。
実際に各リンクを押してみると、Ask Google
の方はエラー内容を自動的に検索ボックスに入れて検索、Ask ChatGPT
の方ではエラー内容自動的にチャットに入力し、ChatGPT内で質問が走るようになっていました。
開発をしていてエラーに直面した際、エラー内容をいちいちペタペタ貼って検索するのは面倒ではあるので、その手間を省いてくれる点で役立ちそうです。
Ask ChatGPTの方に関しては、エラー内容がそのままチャットに入力→送信されるので、プロジェクト固有の情報が入っているソースコードなどで利用する際は、安全性はしっかりと確認した上で利用した方がいいかもしれません。
③ユーザーのlocaleを取得できるようになった(v.1.44.0)
🗺️ You can access the user's locale through st.context (#10563).
st.context provides a read-only interface to access headers and cookies for the current user session.
st.context
を使うことで、ユーザーのlocale(言語設定)を取得できるようになりました。これにより、アプリ側で表示言語を切り替えるといった多言語対応がより実現しやすくなりそうです。
こちらも簡単なコードではありますが試してみます。
import streamlit as st
context = st.context
locale = context.locale
st.write(locale)
if locale == "ja":
st.write("こんにちは")
else:
st.write("Hello!")
ユーザーのロケールを正しく取得していることがわかりました。
まとめ・所感
簡単ではありましたが、今回はstreamlitの機能をいくつかピックアップして紹介してみました。
最近ではOIDCによるユーザー認証が追加されたり(v1.42.0〜)と、開発者にとって便利な機能が続々と追加されているStreamlitですが、今回取り上げた機能は「劇的な変化」ではないものの、あると嬉しい便利機能がしっかりと詰まっていると感じました。今後のアップデートも引き続き追っていきたいと思います。
おまけ
Streamlitを使ったLLMチャットアプリの作り方が解説されている公式チュートリアルです。興味がある方はこちらもぜひチェックしてみてください。