StreamlitでマルチモーダルなChatアプリを作る

2024/06/04に公開

やること

前回、Streamlitで簡単なWebアプリを作成した。
今回は、StreamlitでマルチモーダルなChatアプリを作る。

参考資料

https://zenn.dev/headwaters/articles/c8e785ac4193d0

https://zenn.dev/headwaters/articles/9d4410846fd6b9

前提

  • Azure Open AI Service上にGPT-4oをデプロイ済みであること

  • Keyとendpointを取得済みであること

環境

  • python:3.10.12
  • openai:1.30.3

手順

  1. 以下のコマンドを実行する
mkdir streamlit
cd streamlit
python -m venv myenv
myenv\Scripts\activate
pip install streamlit openai
code .
  1. 以下のコードを書いたファイル(app.py)を作成
import streamlit as st
from openai import AzureOpenAI
import base64

client = AzureOpenAI(
    api_version="2023-05-15",
    api_key="<key>",
    azure_endpoint="<endpoint>"
)

# Streamlitの設定
st.title("Chat with Azure OpenAI")
st.write("Enter your message below and get a response from the model!")

# ユーザー入力
user_input = st.text_input("You: ", "")

# 画像アップロードとOCR機能
def encode_image(image):
    return base64.b64encode(image.read()).decode("utf-8")

uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])

if uploaded_file is not None:
    base64_image = encode_image(uploaded_file)
    user_input = "Describe this image:"

if st.button("Send"):
    if user_input:
        if uploaded_file is not None:
            messages = [
                {"role": "system", "content": "You are a helpful assistant."},
                {"role": "user", "content": [
                    {"type": "text", "text": user_input},
                    {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}}
                ]}
            ]
        else:
            messages = [
                {"role": "system", "content": "You are a helpful assistant."},
                {"role": "user", "content": user_input},
            ]

        # API呼び出し
        response = client.chat.completions.create(
            model="gpt-4o",
            messages=messages
        )
        # レスポンスを表示
        assistant_response = response.choices[0].message.content
        st.write(f"Assistant: {assistant_response}")
    else:
        st.write("Please enter a message.")
  1. 以下のコマンドを実行
streamlit run app.py
  1. 以下にアクセスすると、Streamlitアプリが立ち上がることを確認
http://localhost:8501

動作確認

  1. チャットしてみる

  2. 画像をuploadし解説してもらう

まとめ

さくっとマルチモーダルなChatアプリを作成しました。
PoC案件でサクッと動くものを作りたいときに便利だなーと思いました。
実行中のアイコンかわいいー。

ヘッドウォータース

Discussion