16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GDSC JapanAdvent Calendar 2023

Day 23

Googleの新AI「Gemini」とPythonでChatbot を作ってみた

Last updated at Posted at 2023-12-24

はじめに

この記事は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/

今回は無料枠で動かしているので,最初にも書いた通り1分間60リクエストまでになっています.常識の範囲内で遊んでいただくようお願いします.

API Keyの取得

まず,次のサイトにアクセスしてください.

アクセスしたらGet API Key in Google AI Studioをクリックしてください.
そうするとGoogle AI Studioが立ち上がるのでGet API KeyからAPI Keyを取得してください.
このときに写真の黄色で塗りつぶされているところをメモしてください.あとで使うので忘れないようにしてくださいね.

スクリーンショット 2023-12-24 13.49.55.png

これで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は先程メモしたものを書いてください.

今回は簡単に作るためにAPI Keyをベタ書きしていますが,あんまりよろしくないです.特にコードを公開する場合は,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}")

デプロイ&テスト

コードが完成したらデプロイしましょう.やり方はこちらの記事が詳しく説明しているので,参考にしてください.

実際に動かしてみると

スクリーンショット 2023-12-24 17.01.13.png

うまくできていそうですね!

おわりに

Geminiを使って無料でChatbotをつくることができました.
Geminiは2024年のはじめ頃まで無料で使えるのでぜひ遊んでみてください.

また,Google Developer Student Clubsでは,アプリ開発をはじめとしてメンバー同士で教え合いながら,楽しくプロダクト開発をしています.興味のある方はぜひお近くのチャプターに参加してみてください!

16
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?