Googleの新AI「Gemini」とPythonでChatbot を作ってみた
はじめに
この記事はGDSC Japan Advent Calendar 2023 の23日目の記事です.
Google Developer Student Clubs TUAT Founder のほきです.
2023年12月6日にGoogleが新しい生成AI「Gemini」を発表して,大きな話題となっていますね.Geminiはテキストだけでなく画像・動画が扱えるマルチモーダルな生成AIで,発表によると性能はGPT-4を超えるそうです.
そんな最強AI「Gemini Pro API」が2024年のはじめ頃までは1分間60リクエストまで無料で使えるので,PythonでChatbotを作成してみました.コードも載せておくので是非真似して遊んでみてください.
デモ
最初に今回作るChatbotの全体像を示しておきます.次のリンクから動かして遊んでみてください.
https://appapppy-ezwvbs4zdgnnythwotss5o.streamlit.app/
API Keyの取得
まず,次のサイトにアクセスしてください.
アクセスしたらGet API Key in Google AI Studio
をクリックしてください.
そうするとGoogle AI Studioが立ち上がるのでGet API Key
からAPI Keyを取得してください.
このときに写真の黄色で塗りつぶされているところをメモしてください.あとで使うので忘れないようにしてくださいね.
これでAPI Keyを取得することができました.
コーディング
はじめにこのコードは次のGitHubリポジトリを参考に作っています.作成者の方ありがとうございます.
今回はStreamlitを使って簡単にChatbotを作りたいと思います.
Streamlit は,機械学習やデータサイエンス向けのオープンソースWebフレームワークで,
- HTMLやCSS,JavaScriptといったフロントエンドの知識が不要で,Pythonで全てのコードを記述することができる
- Matplotlibなどを用いてグラフをそのまま表示することができる
- 公式でデプロイ用のクラウドサーバーが用意されているため,簡単に無料でデプロイできる
といった特徴があります.DjangoやFlaskと比べると細かいところをいじれない欠点はありますが,お手軽に作れるのは魅力的です.
ではまず必要なライブラリをインポートしましょう.
import streamlit as st
import google.generativeai as genai
また,Streamlit Cloudを使うことを考え,requirements.txt
に使うライブラリを書いておきましょう.
次に,モデルを定義します.
# Google Generative AI(Gemini API)のAPIキー設定
genai.configure(api_key=YOUR_API_KEY)
# Geminiモデルの設定
model = genai.GenerativeModel('gemini-pro')
YOUR_API_KEYは先程メモしたものを書いてください.
これで準備は完了です.
それでは,ユーザーが入力→Geminiを使って応答を作成→応答を表示の部分を作っていきます.
といってもとても簡単で数行でかけます.
# ユーザー入力の取得
prompt = st.text_input("Your message:")
# Gemini APIを使って応答を生成
response = model.generate_content(prompt)
# 応答をテキストとして取得
assistant_response = response.text
# 応答を表示
st.text(f"Assistant: {assistant_response}")
こんな感じでChatのメイン機能が出来上がりました.
他にもデザインやメッセージリストを作成して既存のメッセージを表示する機能を加えて出来上がったコードは次のとおりです.
import streamlit as st
import google.generativeai as genai
# Streamlitのタイトルと説明
st.title("💬 Chatbot")
st.caption("🚀 A streamlit chatbot powered by Google AI")
# Google Generative AI(Gemini API)のAPIキー設定
genai.configure(api_key=YOUR_API_KEY)
# Geminiモデルの設定
model = genai.GenerativeModel('gemini-pro')
# セッション状態にメッセージリストがない場合は初期化
if "messages" not in st.session_state:
st.session_state["messages"] = [{"role": "assistant", "content": "How can I help you?"}]
# 既存のメッセージを表示
for msg in st.session_state.messages:
# ここではシンプルなテキスト表示を使用
st.text(f"{msg['role']}: {msg['content']}")
# ユーザー入力の取得
prompt = st.text_input("Your message:")
if prompt:
# ユーザー入力をセッション状態に追加
st.session_state.messages.append({"role": "user", "content": prompt})
# Gemini APIを使って応答を生成
response = model.generate_content(prompt)
# 応答をテキストとして取得(ここではresponse.textと仮定)
assistant_response = response.text
# 応答をセッション状態に追加し、表示
st.session_state.messages.append({"role": "assistant", "content": assistant_response})
st.text(f"Assistant: {assistant_response}")
デプロイ&テスト
コードが完成したらデプロイしましょう.やり方はこちらの記事が詳しく説明しているので,参考にしてください.
実際に動かしてみると
うまくできていそうですね!
おわりに
Geminiを使って無料でChatbotをつくることができました.
Geminiは2024年のはじめ頃まで無料で使えるのでぜひ遊んでみてください.
また,Google Developer Student Clubsでは,アプリ開発をはじめとしてメンバー同士で教え合いながら,楽しくプロダクト開発をしています.興味のある方はぜひお近くのチャプターに参加してみてください!
Discussion