2023.12.27
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ

お久しぶりです。
JGです。
今回はGoogleのGeminiを紹介したいと思いますが、これはGoogleが開発したChatGPTのようなものでAIを扱うことができるものです。
Geminiの特長はテキスト、画像、音声、動画等様々な種類のデータを同時に理解できる点です。
GeminiはNanoとProとUltraと3つもモデルがあり、 Ultraはまだ公開されておらず、 ProのAPIが2024年の始めまでは無料で使えるのでその紹介をしていきます。
環境構築
下記のドキュメントを元に説明しますが、前提条件としてPython3.9以上がインストールされている必要があります。
Windowsでの手順を説明しておりますが、Macでも同じだと思います。
https://ai.google.dev/tutorials/python_quickstart
1.コマンドプロンプト等で下記を実行する
pip install -q -U google-generativeai
pip install Pillow
2.API KEYはGoogle AI StudioのGet API keyで取得する
先ほど紹介したドキュメントの「Get an API key」からアクセスして取得できます。
共通処理の実装
今回は3つの機能を紹介しますが、共通処理を先に紹介します。
必要なライブラリの呼び出しや文字化け対策を行っており、 GOOGLE_API_KEYに取得したAPI Keyを指定する必要があります。
# -*- coding: utf-8 -*-
import google.generativeai as genai
# 文字化け
import io, sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding = 'utf-8')
GOOGLE_API_KEY = ''
genai.configure(api_key = GOOGLE_API_KEY)
テキスト入力からテキストを生成する
gemini-proを呼び出し、generate_contentに質問したい内容をテキストで指定してPythonを実行すれば、レスポンスが返ってきます。
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content('PHPの特徴は')
for chunk in response:
print(chunk.text)
print("_"*80)
こちらが今回の実行例です。

もしWindowsのGit Bash等で文字化けするときは下記を実行してみて下さい。
export PYTHONIOENCODING=utf8
画像とテキスト入力からテキストを生成する
gemini-pro-visionを呼び出し、generate_contentに質問したい内容をテキストで指定し、そして画像ファイルをpythonファイルと同じ階層に指定しPythonを実行すれば、レスポンスが返ってきます。
import PIL.Image
model = genai.GenerativeModel('gemini-pro-vision')
img = PIL.Image.open('images.jpg')
response = model.generate_content(['これは何ですか', img], stream = True)
for chunk in response:
print(chunk.text)
print("_"*80)
今回は海の画像を指定したので、下記のような実行例になりました。

チャットでの会話
gemini-pro を呼び出し、start_chatを使えば実現できます。今回は「exit」を入力したらチャットを終了するようにしています。
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history = [])
while True:
prompt = input('あなたの入力内容\n')
if prompt == 'exit':
break
response = chat.send_message(prompt, stream = True)
print("_"*80)
print('geminiの返答内容')
for chunk in response:
print(chunk.text)
print("_"*80)
こちらが今回の実行例です。

最後に
今回はGeminiをPythonで試してみましたが、こんなに簡単にできてしまいますので興味を持ったかたは是非試してみてください。
それでは失礼します。