見出し画像

初めてのgoogle gemini(python)

とりあえずgoogle gemini pro APIをpythonで使ってみました。
とりあえず動くコードの実現は非常に簡単だったので、これからも大いに使って仲良くなりたいと思います。
今回は、最低限のチャットと画像認識を試してみました。
(12/29追記)
本記事でチャットといっているものは、「質問応答」を繰り返すものでした。本来のチャットは、googleで用意されていましたので、次の
「初めてのgoogle Gemini(履歴付きチャット)」で紹介します。


google geminiとは

google Geminiは2023年12月7日に最大かつ高性能なAIモデルとして発表されました。最初のバージョンである Gemini 1.0 は、Ultra、Pro、Nano の 3 サイズに最適化されています。

  • Gemini Ultra — 非常に複雑なタスクに対応する、高性能かつ最大のモデル

  • Gemini Pro — 幅広いタスクに対応する最良のモデル

  • Gemini Nano — デバイス上のタスクに最も効率的なモデル

ブラウザでも利用は可能

Geminiに機能の一部はブラウザ上で確認することができます。
例えば、google Bard , Google Cloud Vertex AIなどで試すことができます。
実際Geminiの実力をとりあえず試すなら、十分かもしれません。
しかし、自分のシステムに組み込んで使い倒そうと思ったら、APIを直接利用したいですね。

準備

今回は、Geminiをつかって、最低限の機能のpythonプログラムを作成します。

APIキーの取得

以下のサイトからAPIキーを取得します。
GetAPI Keyより、「Create API key in new project」にて新規でAPI Keyを作成し、取得しましょう。今のところGemini Proだけ利用可能みたいです。

取得したAPIキーは、プログラム中に書き込むこともできます。
が、だいたいこういう事するとろくなことにならないので、環境変数を利用するほうが安心でしょう。

#GEMINI_API_KEY='あなたの APIキー'  # おすすめしないよ 環境変数を使うほうがいい
GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

pythonライブラリのインストール

google-generativeaiとあとでちょっと画像認識も試すのでpillowをインストールしておきます。

pip install google-generativeai
pip install pillow

実装

それでは順番に試してみましょう。

使用可能モデル

実際に利用できるAIモデルを確認します。ついでに利用するときのモデルの名前もちゃんと知っておきましょう。

import os
import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

print("サポートしているモデル")
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

サポートしているモデル
models/gemini-pro
models/gemini-pro-vision

こんな感じで、サポートモデルが出力されます。確かに、gemini-proのみが使えるみたいです。gemini-pro-visionは画像を扱うのにつかうみたいです。

とりあえずCHATで会話

まず、gemini-proをつかって、定番の会話プログラムを作ります。設定を触る気がなければ、異様に簡単でした。
モデル名を決めて、genai.GenerativeModel('gemini-pro')を呼び出すだけですね。

model = genai.GenerativeModel('gemini-pro')

while True:
  prompt=input('なにか話してください: ')
  if prompt == 'exit':
    break
  response = model.generate_content(prompt)
  print(response.text)
  

会話履歴

こんな感じの会話でした。2021年4月までの情報をもとに答えているようですね。確かに今年の日本シリーズの結果は知らないと言っていますが、この中で2023年9月までの知識しかないと言っています。どっちが正しいのかな。例によって生成AIに事実の問い合わせはあんまり当てになりません。

なにか話してください: あなたは誰ですか
私はラージ言語モデルです。Google によって訓練され、世界中の情報にアクセスできます。私は言語の理解と生成、知識の推論と適用、コードの作成と翻訳など、さまざまなタスクを遂行できます。私はまだ開発中ですが、すでに多くの分野で人間を助けてきました。私は、カスタマー サービス、教育、医療、科学など、さまざまな分野で利用されています。私は、世界をより良い場所にするために努力している好奇心旺盛で創造的なアシスタントです。
なにか話してください: あなたの最新知識はいつ頃ですか
私の知識は2021年4月までの情報に基づいています。それ以降の最新情報については、信頼できる情報源を確認するようにしてください。
なにか話してください: 知らない情報についてはどう答えることになっていますか
申し訳ありませんが、知らない情報については答えることができません。私の回答は信頼できる情報源に基づいて生成されるため、誤った情報を提供したくありません。ただし、信頼できる情報源をいくつかリストアップすることはできますので、ご質問に対する答えを見つけるお手伝いをさせていただきます。
なにか話してください: 今年の日本シリーズの結果 教えて下さい。
私は2023年の9月までの知識しかないため、今年の日本シリーズの結果については回答できません。
なにか話してください: 最初の質問を覚えていますか
はい、最初の質問は「あなたの名前は何ですか?」でした。

あれ!?最後に質問で、最初の質問について覚えていると言っていますね。
「あなたは誰ですか」→「あなたの名前は何ですか?」
うーん本当に覚えているのかはったりなのか?
どっちにしても、会話履歴は制御できる形で管理するので、これは次回ですね。


画像の解析

次に、gemini-pro-visionを使ってみましょう。
画像を生成AIにわたす方法はいくつか紹介されていますが、
実際には、イメージをそのまま渡せば動きました。これは相当立派。
ただい、回答はあまりにそっけなかったのでパラメータ設定かプロンプト設計が必要かもしれませんね。


model_image = genai.GenerativeModel('gemini-pro-vision')
from PIL import Image
img = Image.open('nara.jpg')

prompt = "画像について、日本語で説明してください。"
response = model_image.generate_content([prompt, img])
print("画像の説明:")
print(response.text)

なお、入力画像はこれ。https://www.pref.nara.jp/57798.htm


奈良観光案内 バス路線図

画像の説明:
これは京都のバスの路線図です。

京都じゃなくて奈良ですね。繰り返し、試しましたが断固として京都は譲ってくれませんでした。文字をまともに読み込んでいないのか画像の解像度が足りなくて読めないのか、奈良が京都にあるとおもっているのか。有効に使うのはこれから要検討でしょう。
おまけには、タイトル画像の説明を載せています。これは相当いい感じなので、画像の特徴と回答精度は大きく依存すると思われます。

参考までに、GPT-4Vに見てもらった解説はこれ。

こちらの画像は日本のある地域の観光案内マップです。中央には青とオレンジの線で示された鉄道路線が描かれており、その沿線にはさまざまな観光スポットが記されています。マップ上では神社、公園、博物館などが色とアイコンで示されており、特定の場所や施設を目立たせるためにイラストが利用されています。右上には方位を示すコンパスマークがあり、下部にはレジャー施設や観光情報センター、公共施設のシンボルを含む凡例が配置されています。また、マップの左側には地元の魅力ある食べ物や文化的特徴を紹介する写真や文章があります。全体として、このマップは訪れる人々にとって役立つ情報を提供し、地域の探索を誘導するためのものです。

なぜか奈良といってくれませんが、十分に説明してくれました。使いこなしテクニックは今後の大きな課題です。(ただし、画像認識に関してGeminiを高く評価される方は知り合いにも多いので、ちゃんと使いこなせていないだけだと思う)


まとめ

google Gemini Pro APIをpythonから使ってみました。
gemini-pro,gemini-pro-visionを使って、簡単なチャットと画像認識を試しました。
ただ、エラーなく呼び出すだけなら非常に簡単で、とりあえず試したり、一旦システムに組み込んでみるとかはやりやすそうです。おおきに期待したいと思います。
実際の効果については、使いこなすためにはそれなりの工夫と設定がいるのは当然ですね。

おまけ タイトル画像の説明 by GPT-4V

この画像はデジタルイラストで、宇宙をテーマにした創造的なコンセプトアートです。中央には、宇宙服を着た人物が魔法の杖を持ち、大きな光る円(おそらく太陽や惑星を表現している)に向けて杖を突き出しています。円はデジタルなバイナリコード(0と1)の模様で描かれており、テクノロジーと天文学の融合を表している可能性があります。人物の前にはラップトップと、ペンポット、机があり、背景には星座のシンボルが散らばり、鮮やかなカラーの渦巻くストリームが描かれています。全体として、イラストは科学、テクノロジー、創造性、そして魔法のような不思議が混在する空想科学的なイマジネーションを思わせます。

タイトル画像の説明 by gemini-pro-vision

画像の説明:
宇宙飛行士が宇宙空間でプログラミングをしている様子を描いたイラストです。宇宙飛行士は、地球を背に、宇宙空間を漂いながら、コンピュータに向かってプログラミングをしています。宇宙飛行士の周りには、星や惑星、宇宙ステーションなどが浮かんでいます。宇宙飛行士は、まるで宇宙空間を旅しながら、プログラミングを楽しんでいるようです。

この記事が気に入ったらサポートをしてみませんか?