サイトアイコン アマチュア無線局JS2IIU

【Streamlit】LangChainでGPT-4oを使ったチャットアプリ

こんにちは、JS2IIUです。

近年、OpenAIのAPIを活用したアプリケーションが注目を集めています。その中でも、LangChainは強力なフレームワークであり、対話型AIを構築するための便利なツールです。本記事では、LangChainの基本的な使い方を紹介し、Streamlitを使ってリアルタイムのチャットアプリを作成する方法を解説します。今回もよろしくお願いします。

LangChainとは?

LangChainは、自然言語処理(NLP)アプリケーションの開発を簡単にするためのPythonフレームワークです。特に以下の特徴を持っています:

LangChainを使うことで、複雑なチャットアプリやカスタムAIソリューションを効率的に構築できます。

LangChain
LangChain provides the engineering platform and open source frameworks developers use to build, test, and deploy reliable AI agents.

LangChainの導入方法

以下のコマンドでLangChainをインストールできます:

Bash
pip install langchain openai

また、Streamlitも必要なので以下をインストールしてください:

Bash
pip install streamlit

さらに、OpenAIのAPIを利用するためにAPIキーが必要です。以下の公式サイトで取得できます:
OpenAI API

基本的な使い方

LangChainでは、以下のようにチャットモデルを定義し、メッセージを送信して応答を取得します:

Python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

# OpenAIクライアントの初期化
chat = ChatOpenAI(model="gpt-4", openai_api_key="YOUR_API_KEY")

# ユーザーメッセージを送信
response = chat([HumanMessage(content="こんにちは、元気ですか?")])

# 応答を表示
print(response.content)

Streamlitを使ったリアルタイムチャットアプリのサンプル

以下は、LangChainとStreamlitを組み合わせたチャットアプリの完全なサンプルコードです。

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

# OpenAIクライアントを生成
chat = ChatOpenAI(
    model="gpt-4",  # 適切なモデル名を指定してください
    temperature=0.7,
    streaming=True,
    openai_api_key="YOUR API KEY HERE"  # ここにあなたのAPIキーを入力してください
)

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

# メッセージ履歴を表示
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)

    # OpenAI APIを使ってAIからの応答をストリーミングで生成
    with st.chat_message("assistant"):
        full_response = ""
        placeholder = st.empty()  # プレースホルダーを作成
        for chunk in chat.stream(st.session_state.messages):
            content = chunk.content
            if content:
                full_response += content
                placeholder.markdown(full_response + "")  # 途中経過を表示
        placeholder.markdown(full_response)  # 最終的な応答を表示

    # AIのメッセージを履歴に追加
    ai_message = AIMessage(content=full_response)
    st.session_state.messages.append(ai_message)
https://js2iiu.com/wp-content/uploads/2025/01/lc_01.mov

サンプルコードのポイント解説

このプログラムは、Streamlitを使ったリアルタイムのチャットアプリケーションです。LangChainを利用してOpenAIのAPIと連携し、AIからの応答をストリーミングで受け取る仕組みを実現しています。以下にプログラムの各部分を詳細に解説します。

1. インポートセクション

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

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

Python
chat = ChatOpenAI(
    model="gpt-4",
    temperature=0.7,
    streaming=True,
    openai_api_key="YOUR API KEY HERE"
)

3. セッションステートの初期化

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

4. メッセージ履歴の表示

Python
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)

5. ユーザー入力の取得

Python
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)

6. AI応答の生成とストリーミング表示

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

7. AIメッセージを履歴に追加

Python
ai_message = AIMessage(content=full_response)
st.session_state.messages.append(ai_message)

プログラムの全体的な流れ

  1. セッション開始時に履歴を初期化。
  2. 過去のメッセージ履歴を画面に表示。
  3. ユーザーがメッセージを入力。
  4. OpenAIのAPIにメッセージ履歴を送信し、ストリーミングでAI応答を取得。
  5. AIの応答を画面にリアルタイム表示。
  6. 応答が完了したら履歴に追加。

このプログラムの利点

  1. リアルタイム性: ストリーミングで応答をリアルタイムに表示することで、待ち時間を短く感じさせます。
  2. 履歴管理: st.session_stateを使ってメッセージ履歴を管理し、過去のやり取りを簡単に参照可能。
  3. 拡張性: LangChainを使うことで、プロンプトエンジニアリングやモデルチェーンなどの高度な機能に対応可能。

実行手順

  1. 必要なライブラリをインストール:
Bash
   pip install streamlit langchain openai
  1. スクリプトを実行:
Bash
   streamlit run your_script_name.py
  1. ブラウザでアプリを開き、チャットを開始します。

参考リンク

最後に、書籍のPRです。

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

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

モバイルバージョンを終了