こんにちは、JS2IIUです。
Streamlitのst.chat_message()を使ってチャットを表示することができます。以前の記事「【Streamlit】LangChainでGPT-4oを使ったチャットアプリ」ではOpenAIのAPIを使いました。今回は同じことをGoogleのGeminiを使ってやってみたいと思います。今回もよろしくお願いします。
Google Gemini
Google Geminiは、Googleが開発した最新の大規模言語モデル (LLM) です。高い自然言語処理能力を持ち、幅広い応用が可能です。たとえば、ユーザーとの会話、文書生成、要約作成、コード補完など、多岐にわたるタスクに対応できます。
Geminiには複数のバージョンが存在し、その中の「Gemini-1.5-Flash」は、応答の速さと精度のバランスが優れており、リアルタイムの会話アプリケーションに適しています。
この記事では、Streamlitを使用してGemini-1.5-Flashモデルを使ったシンプルなチャットアプリを構築する方法を解説します。
Google Geminiの基本的な使い方
Python3.9以降で実行します。google-generativeaiのインストールが必要です。また、事前にAPIキーの取得が必要です。こちらのページを参照してAPIキーを取得して下さい。Gemini Developer API | Gemma open models | Google AI for Developers
pip install -q -U google-generativeai以下は、Pythonコードを使ってGoogle Geminiに接続し、簡単なチャットを行うサンプルです。
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content("What will generative AI be able to do in 10 years?")
print(response.text)上記コードでは、Geminiモデルへの接続と基本的な応答の取得方法を示しています。APIキーを入力し、モデルとやり取りする際のメッセージを指定することで、モデルからの応答を得ることができます。
LangChain
LangChainについては、こちらの記事を参照して下さい。まだLangChainをインストールしていない場合は、pip install langchainでインストールして下さい。
LangChainでgeminiを使えるようにする
LangChainからGeminiを使うための方法については公式ページに詳しく解説されています。
ChatGoogleGenerativeAI | 🦜️🔗 LangChain
最初にインストール
pip install -qU langchain-google-genai基本的な使い方です
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(
model="gemini-1.5-pro",
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
# other params...
)Streamlitでチャットアプリを構築
以下は、Gemini-1.5-Flashを使用してチャットアプリを構築するStreamlitのサンプルコードです。
import streamlit as st
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.schema import SystemMessage, HumanMessage, AIMessage
import os
# 環境変数を設定
os.environ["GOOGLE_API_KEY"] = "YOUR_KEY_HERE" # ここにAPIキーを入力してください
os.environ["LANGSMITH_API_KEY"] = "YOUR_KEY_HERE" # ここにAPIキーを入力してください
os.environ["LANGSMITH_TRACING"] = "true"
# Streamlitアプリの初期化
st.title("Gemini 1.5 Flash Chat App")
# セッションステートを使用してチャット履歴を保存
if "messages" not in st.session_state:
st.session_state.messages = [SystemMessage(content="You are a helpful assistant.")]
# LLMの初期化
llm = ChatGoogleGenerativeAI(
model='gemini-1.5-flash',
temperature=0,
max_tokens=None,
timeout=None,
max_retries=2,
)
# チャット履歴を表示
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("You:"):
user_message = HumanMessage(content=prompt)
st.session_state.messages.append(user_message)
# 表示
with st.chat_message("user"):
st.markdown(prompt)
full_response = llm.invoke(st.session_state.messages)
with st.chat_message("assistant"):
message_placeholder = st.empty()
message_placeholder.markdown(full_response.content)
# 応答をチャット履歴に追加
ai_message = AIMessage(content=full_response.content)
st.session_state.messages.append(ai_message)
サンプルコードの解説
このプログラムは、Streamlitを使ってGoogleのGemini 1.5 Flashという大規模言語モデル(LLM)とチャットできるウェブアプリケーションを作成するものです。
プログラムの解説
- 必要なライブラリのインポート:
streamlit: ウェブアプリケーションの構築に使用するライブラリlangchain_google_genai: GoogleのGenerative AIにアクセスするためのLangChainライブラリlangchain.schema: LangChainで使用するメッセージオブジェクト(SystemMessage,HumanMessage,AIMessage)os: 環境変数を設定するためのライブラリ
- 環境変数の設定:
- この環境変数の設定は可能ならコードに含めないで、事前に設定を済ませておいて下さい。
GOOGLE_API_KEY: Google CloudのAPIキーを設定します。LANGSMITH_API_KEY: LangSmithのAPIキーを設定します。(LangSmithは、LLMアプリケーションの開発、デバッグ、監視、評価のためのプラットフォームです。)LANGSMITH_TRACING: LangSmithのトレースを有効にします。- LangSmithの設定はオプションです。設定しなくても動作します。
- Streamlitアプリの初期化:
st.title("Gemini 1.5 Flash Chat App"): アプリのタイトルを設定します。
- チャット履歴の保存:
st.session_state.messages: Streamlitのセッションステート機能を使用して、チャット履歴を保存します。SystemMessage(content="You are a helpful assistant."): 最初のメッセージとして、アシスタントへの指示をSystemMessageとして設定します。
- LLMの初期化:
ChatGoogleGenerativeAI(): GoogleのGenerative AIにアクセスするためのオブジェクトを作成します。model='gemini-1.5-flash': 使用するモデルを指定します。temperature=0: 温度パラメータを設定します。0は最も確定的で、値が大きいほどランダム性が増します。max_tokens=None: 生成されるトークンの最大数を指定します。timeout=None: タイムアウト時間を指定します。max_retries=2: 再試行回数を指定します。
- チャット履歴の表示:
for message in st.session_state.messages: チャット履歴に保存されているメッセージをループ処理します。isinstance(message, HumanMessage): メッセージがユーザーからのメッセージかどうかを判定します。with st.chat_message("user"):: ユーザーのメッセージとして表示します。
isinstance(message, AIMessage): メッセージがアシスタントからのメッセージかどうかを判定します。with st.chat_message("assistant"):: アシスタントのメッセージとして表示します。
- ユーザー入力の処理:
if prompt := st.chat_input("You:"):: ユーザーからの入力を取得します。user_message = HumanMessage(content=prompt): ユーザーの入力をHumanMessageオブジェクトに変換します。st.session_state.messages.append(user_message): チャット履歴にユーザーのメッセージを追加します。with st.chat_message("user"):: ユーザーのメッセージを表示します。
- LLMからの応答の取得:
full_response = llm.invoke(st.session_state.messages): LLMにチャット履歴を渡して応答を取得します。
- LLMからの応答の表示:
with st.chat_message("assistant"):: アシスタントのメッセージとして表示します。message_placeholder = st.empty(): メッセージを表示するためのプレースホルダーを作成します。message_placeholder.markdown(full_response.content): LLMからの応答を表示します。
- 応答のチャット履歴への追加:
ai_message = AIMessage(content=full_response.content): LLMからの応答をAIMessageオブジェクトに変換します。st.session_state.messages.append(ai_message): チャット履歴にアシスタントのメッセージを追加します。
プログラムの実行方法
- 必要なライブラリをインストールします。Bash
pip install streamlit langchain_google_genai - APIキーを環境変数に設定します。
- プログラムを実行します。Bash
streamlit run your_app.py
注意点
- このプログラムを実行するには、Google Cloud PlatformのアカウントとAPIキーが必要です。
- LangSmithを使用するには、LangSmithのアカウントとAPIキーが必要です。(使用しなくてもOK)
まとめ
このプログラムは、StreamlitとLangChainを使用して、GoogleのGemini 1.5 Flashとチャットできるシンプルなウェブアプリケーションを作成する方法を示しています。このプログラムをベースに、チャット履歴の保存、ユーザー認証、エラー処理などの機能を追加して、より高度なチャットアプリケーションを構築することができます。
関連リンク
同様にLangChainからOpenAIのgpt-o4やAnthropicのClaudeを使ったチャットアプリの構築についてはこちらの記事を参照して下さい。
最後に、書籍のPRです。
最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。
最後まで読んでいただきありがとうございます。73

