【Streamlit】LangChainとGPT-4.5-preview を使ったチャットアプリ構築

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

こんにちは、JS2IIUです。

OpenAI は 2025 年 2 月 27 日、最新のチャット向けモデルである GPT-4.5 のリサーチプレビューを公開しました。このモデルは、従来の GPT-4 系列に比べて、パターン認識や関連性の整理、創造的な洞察を生成する能力が向上しています。

この記事では、GPT-4.5-preview モデルを活用し、Streamlit と LangChain を使ってリアルタイムで応答を生成するチャットアプリの作成方法を解説します。

GPT-4.5-preview モデルの特徴

公式発表によると、GPT-4.5-preview には以下の特徴があります:

  1. 高度な理解と推論能力
  • より複雑な質問に対応可能。
  • 論理的推論と長文のコンテキスト保持が強化。
  1. パフォーマンス向上
  • GPT-4.0 と比較して応答速度が向上。
  • ストリーミング応答がスムーズで、対話体験が改善。
  1. 柔軟な出力
  • クリエイティブな文章作成や要約、コード生成が得意。
  • マルチモーダル対応(テキスト以外のデータにも対応予定)。

詳しくは OpenAI の公式ページ を参照してください。

サンプルプログラム

以下は、GPT-4.5-preview を使用した Streamlit チャットアプリのサンプルコードです。

Python
import streamlit as st
from langchain_community.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage, SystemMessage
import os

# OpenAI クライアントを生成
chat = ChatOpenAI(
    model="gpt-4.5-preview",  # GPT-4.5-preview モデルを指定
    temperature=0.7,           # 応答のランダム性を調整
    streaming=True,            # ストリーミング応答を有効化
    openai_api_key=os.getenv("OPENAI_API_KEY")  # 環境変数から API キーを取得
)

# セッションステートを初期化
if "messages" not in st.session_state:
    st.session_state.messages = [SystemMessage(content="You are a helpful assistant.")]

# タイトルを表示
st.title("GPT-4.5-preview チャット")

# メッセージ履歴を表示
for message in st.session_state.messages:
    if isinstance(message, HumanMessage):
        with st.chat_message("user"):
            st.markdown(message.content)
    elif isinstance(message, AIMessage):
        with st.chat_message("assistant"):
            st.markdown(message.content)

# ユーザー入力を処理
if prompt := st.chat_input("What is up?"):
    user_message = HumanMessage(content=prompt)
    st.session_state.messages.append(user_message)

    with st.chat_message("user"):
        st.markdown(prompt)

    # AI 応答を生成
    with st.chat_message("assistant"):
        full_response = ""
        placeholder = st.empty()

        for chunk in chat.stream(st.session_state.messages):
            if chunk.content:
                full_response += chunk.content
                placeholder.markdown(full_response + "")

        placeholder.markdown(full_response)

    # AI のメッセージを履歴に追加
    ai_message = AIMessage(content=full_response)
    st.session_state.messages.append(ai_message)

コード解説

1. 必要なライブラリのインポート

Python
import streamlit as st
from langchain_community.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage, SystemMessage
import os
  • Streamlit: Python で簡単に Web アプリを作成できるフレームワーク。
  • ChatOpenAI: OpenAI のチャットモデルを操作するためのラッパークラス。
  • HumanMessage, AIMessage, SystemMessage: メッセージの型を管理するデータクラス。
  • os: 環境変数から API キーを取得するための標準ライブラリ。

2. OpenAI クライアントの作成

Python
chat = ChatOpenAI(
    model="gpt-4.5-preview",
    temperature=0.7,
    streaming=True,
    openai_api_key=os.getenv("OPENAI_API_KEY")
)
  • model: 使用するモデルを指定。
  • temperature: 応答の多様性を制御(0.7 は適度なランダム性)。
  • streaming: ストリーミング出力を有効化し、応答をリアルタイム表示。
  • openai_api_key: 環境変数から API キーを取得。

3. メッセージ履歴の初期化

Python
if "messages" not in st.session_state:
    st.session_state.messages = [SystemMessage(content="You are a helpful assistant.")]

セッションステートを使用して、メッセージ履歴を保持します。

4. ユーザー入力の処理

Python
if prompt := st.chat_input("What is up?"):
    user_message = HumanMessage(content=prompt)
    st.session_state.messages.append(user_message)
  • st.chat_input: ユーザー入力を取得。
  • HumanMessage: ユーザーのメッセージをオブジェクトとして保持。

5. AI 応答の生成と表示

Python
with st.chat_message("assistant"):
    full_response = ""
    placeholder = st.empty()

    for chunk in chat.stream(st.session_state.messages):
        if chunk.content:
            full_response += chunk.content
            placeholder.markdown(full_response + "")

    placeholder.markdown(full_response)

ストリーミング応答をリアルタイムで表示します。

まとめ

このチュートリアルでは、GPT-4.5-preview モデルを利用した Streamlit チャットアプリの作成方法を解説しました。GPT-4.5-preview の高速な応答と高度な理解力を活かし、対話型アプリケーションを構築できます。

参考リンク

最後に、書籍のPRです。

最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。

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

コメント

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