【Streamlit】LangChainとClaude 3.7を活用したチャットアプリの構築

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

こんにちは、JS2IIUです。

近年、AI技術の進歩により、自然言語処理モデルの性能が飛躍的に向上しています。その中でも、Anthropic社が開発したClaudeシリーズは、高度な推論能力と安全性を兼ね備えたモデルとして注目されています。

本記事では、最新モデルであるClaude 3.7 Sonnetの特徴と、LangChainおよびStreamlitを活用したチャットアプリの構築方法を解説します。

Claude 3.7 Sonnetの特徴と従来モデルとの違い

Claude 3.7 Sonnetは、Anthropic社が2025年2月に発表した最新の大規模言語モデルです。

特徴

  • ハイブリッド推論:迅速な応答と詳細な推論を統合し、利用者のニーズに応じた最適な回答を提供
  • コーディング能力の向上:複雑なコード生成やデバッグの精度向上
  • ユーザー制御の強化:APIユーザーがモデルの推論に費やすトークン数を制御し、応答速度と品質のバランスを調整可能

従来のClaudeモデルと比較して、Claude 3.7 Sonnetは処理速度と理解力の両面で著しい向上を遂げており、より複雑な対話や分析に対応できます。

チャットアプリの全体コード

以下に、Streamlit上でLangChainとClaude 3.7を活用したチャットアプリのコードを示します。

Python
import streamlit as st
from langchain_community.chat_models import ChatAnthropic
from langchain.schema import HumanMessage
from langsmith import trace
import os

# APIキーを環境変数から取得
os.environ["ANTHROPIC_API_KEY"] = "YOUR_ANTHROPIC_API_KEY"
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "YOUR_LANGSMITH_API_KEY"

# モデルの初期化
model = ChatAnthropic(model_name="claude-3.7-sonnet-20250219", max_tokens=1024, temperature=0.7)

# セッション状態の初期化
def init_session():
    if "messages" not in st.session_state:
        st.session_state.messages = []

# チャット履歴の表示
def display_chat_history():
    for message in st.session_state.messages:
        with st.chat_message(message["role"]):
            st.write(message["content"])

# Claude 3.7にメッセージを送信し、応答を得る
def get_claude_response(user_input):
    human_message = HumanMessage(content=user_input)
    with trace("claude_chat_interaction"):
        response = model([human_message])
    return response.content

# Streamlitアプリの構築
def main():
    st.title("Claude 3.7 Sonnet Chat with LangChain & LangSmith")

    init_session()
    display_chat_history()

    user_input = st.chat_input("メッセージを入力してください")
    if user_input:
        # ユーザー入力をチャット履歴に追加
        st.session_state.messages.append({"role": "user", "content": user_input})

        # Claude 3.7に送信し、応答を取得
        with st.chat_message("assistant"):
            response = get_claude_response(user_input)
            st.write(response)

        # 応答をチャット履歴に追加
        st.session_state.messages.append({"role": "assistant", "content": response})

if __name__ == "__main__":
    main()

コード解説

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

以下のライブラリを使用します。

  • streamlit:Webアプリケーションの作成に使用
  • langchain_community.chat_models:LangChainのAnthropicモデルを利用
  • langchain.schema:メッセージのスキーマを定義
  • langsmith:トレースを記録するために使用
  • os:環境変数を操作

2. APIキーの設定

環境変数を利用してAPIキーを設定します。事前に環境変数にセットしておくことができればこのコード部分は省略できます。

Python
os.environ["ANTHROPIC_API_KEY"] = "YOUR_ANTHROPIC_API_KEY"
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "YOUR_LANGSMITH_API_KEY"

YOUR_ANTHROPIC_API_KEYおよびYOUR_LANGSMITH_API_KEYを各自のAPIキーに置き換えてください。

3. モデルの初期化

ChatAnthropicを使って、Claude 3.7 Sonnetを初期化します。

Python
model = ChatAnthropic(model_name="claude-3.7-sonnet-20250219", max_tokens=1024, temperature=0.7)
  • model_name:使用するモデルの名前
  • max_tokens:生成されるトークン数の上限
  • temperature:生成の多様性を制御

4. チャット履歴の管理

st.session_stateを使用してチャット履歴を保持します。

Python
def init_session():
    if "messages" not in st.session_state:
        st.session_state.messages = []

5. 応答の取得

ユーザー入力をHumanMessageに変換し、モデルに渡します。

Python
def get_claude_response(user_input):
    human_message = HumanMessage(content=user_input)
    with trace("claude_chat_interaction"):
        response = model([human_message])
    return response.content

6. Streamlitアプリの構築

タイトルと入力欄を作成し、ユーザー入力を処理します。

Python
def main():
    st.title("Claude 3.7 Sonnet Chat with LangChain & LangSmith")

まとめ

本記事では、Claude 3.7 Sonnetの特徴と、StreamlitとLangChainを利用したチャットアプリの構築手順を紹介しました。

このアプリを活用することで、高性能なAIモデルを使った対話型アプリケーションを手軽に実装できます。

参考リンク

最後に、書籍のPRです。

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

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

コメント

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