Gemini APIでGemini 1.5 Proを試す
2024-04-11
azblob://2024/04/12/eyecatch/2024-04-12-gemini-1.5-000.jpg

はじめに

どうもこんにちは。セントエルモの火を見たい2年目の佐藤侑哉です。
今回は、それぐらいは当然見ておけという声がどこかからしたのでGemini 1.5 Proをapiで試していきます。

Gemini 1.5 Proとは?

双児宮の名を冠するこのLLMは、Googleが以前発表したGemini Pro 1.0の強化版ともいえるモデルとなっています。
特長としては以下が挙げられるでしょうか。

  • 約1,000,000トークンのコンテキストウィンドウ: Claude3が200,000なのでその5倍です。インフレの速さが実感できます。
  • 動画、音声も含めたマルチモーダル: 画像のみならず動画や音声まで入れられるみたいです。 
  • System Instruction: ChatGPTで言うシステムプロンプトです。
  • Jsonモード: 以前私がAOAIの機能として紹介したJsonモードが使えるみたいです。

なんか思ったより多いですね。
試せるものを試しつつ、Googleが作ったこのLLMと向き合っていくこととしましょう。

実行例

今回はpythonを使用した例を示します。

下準備

まず予め

pip install google-generativeai

でgoogle-generativeaiを入れておきましょう。
次にapi_keyを取得します。
api_keyはGoogle AI Studioに入り、Get API Keyから取得できます。
api_keyを読み込ませるだとかは以下のコードを実行すればよいです。

Pythonimport google.generativeai as genai
GOOGLE_API_KEY="取得したAPIキーの値"
genai.configure(api_key=GOOGLE_API_KEY)

以下のコードで出力を得ることができます。

Python# 入力
model = genai.GenerativeModel('gemini-1.5-pro-latest') # <- ここでgemini-1.5-pro-latestを指定!
response = model.generate_content("まどマギで一番かわいいキャラクターは誰ですか?")
print(response.text)

# 出力
まどマギには可愛いキャラクターがたくさん登場するので、一番を決めるのは難しいですね。どのキャラクターもそれぞれ違った魅力を持っています。

例えば、主人公の鹿目まどかは、優しくて思いやりのある性格と、ピンク色の髪と大きな目がとても可愛らしいですね。暁美ほむらは、クールでミステリアスな雰囲気と、紫色の髪と鋭い目つきが印象的です。巴マミは、お姉さん的な包容力と、金髪縦ロールの髪型が特徴的ですね。美樹さやかは、活発で正義感の強い性格と、青色のショートヘアが似合っています。佐倉杏子は、勝ち気でサバサバした性格と、赤色のロングヘアがトレードマークです。

どのキャラクターが一番可愛いと思うかは、個人の好みによるところが大きいと思います。あなたが一番可愛いと思うキャラクターは誰ですか? 

responseの部分が短いのはとっつきやすくていいですね。

ではここからは、様々な新機能を試していくとしましょう。

長い入力を試す

なんか大量に入るらしいので試してみます。
今回は青空文庫の人間失格を使いました。

だいたい45,000トークンぐらいみたいです。

Python# 入力
with open("人間失格.txt", "r", encoding='utf-8') as f:
   text = f.read()
   
model = genai.GenerativeModel('gemini-1.5-pro-latest')
response = model.generate_content("以下の文章の主人公を教えて" + text)
print(response.text)

# 出力
## 人間失格の主人公: 大庭葉蔵

「人間失格」の主人公は、**大庭葉蔵**という男性です。彼は、幼少期から極度の人間不信と恐怖を抱き、周囲の人々に対して仮面を被り、道化を演じることで適応しようと苦悩します。 

物語は、葉蔵の幼年期から青年期にかけての出来事を、彼自身の手記という形で綴っています。手記は3部構成で、彼の内面的な葛藤や、女性との関係、社会との関わりなどが描かれています。

## 葉蔵の人物像:

* **極度の人間不信と恐怖:** 葉蔵は、人間の本質を理解できず、常に不安や恐怖を感じています。そのため、周囲の人々に対して仮面を被り、道化を演じることで自分を偽り、適応しようとします。
* **優しさと繊細さ:**  彼は、傷つきやすく繊細な性格で、他人の不幸や苦しみにも敏感に反応します。
* **依存性:**  葉蔵は、他者への依存心が強く、自分ひとりで生きていくことができません。彼は、女性に依存したり、アルコールや薬物に溺れたりすることで、現実逃避を図ろうとします。
* **芸術家肌:**  彼は、絵を描くことが好きで、才能も認められていました。しかし、自身の内面的な葛藤や人間不信から、芸術家としての道を歩むことができません。

## 葉蔵の人生:

葉蔵は、裕福な家庭に生まれながらも、その境遇に満足することなく、常に孤独と苦悩を感じて生きてきました。彼は、女性との関係や社会との関わりの中で、幾度となく挫折を経験し、次第に自暴自棄になっていきます。最終的に、彼は精神を病み、人間として失格した存在として、その生涯を終えることになります。 

答えてくれました。1.5を叩けているのは嘘じゃないようです。

脇道に話が逸れますが、Geminiのトークンの判定はどんな言語であろうと文字単位です。つまりChatGPTとは異なり、日本語の方がより大量の情報を入れられる、ということになります。

File Api

画像や動画などのファイルをGeminiで扱うために、アップロードを行うAPIです。
ファイルサイズの上限は2GB、アップロード後2日で削除されるようです。

今回はお試しとしてこの画像(元リンク)をアップロードしました。

Gemini にアップロードした、紫の宝石の画像です。

紫のクリスタルの画像です。きれいですね。

ファイルのアップロードは以下のように行います。

Pythonsample_file = genai.upload_file(path="purple-cristal.jpg",
                           display_name="Sample drawing")

これでアップロードができたので、この画像の説明をしてもらいましょう。

Python# 入力
model = genai.GenerativeModel(model_name="gemini-1.5-pro-latest")
response = model.generate_content(["この画像の概要を説明して", sample_file])
print(response.text)

# 出力
この画像には、白い布地の表面に散らばった多数の小さなアメジストの結晶が写っています。結晶はすべてカットと研磨が施されており、紫色の濃淡の色合いです。画像の焦点が浅いため、結晶の一部だけが焦点が合っています。

アップロードしたファイルは2日後に削除されますが、以下のコードで即座に削除することができます。

Pythongenai.delete_file(sample_file.name)

System Instruction

他のモデルで言うシステムプロンプトです。今更感が否めませんが、どうにも新機能らしいです。
プロンプトはモデルの宣言を行う際に、以下のような感じで行います。

Pythonmodel=genai.GenerativeModel(
   model_name="gemini-1.5-pro-latest",
   system_instruction="あなたは10000年前に生きていた古代人です。"
)

さて、機能しているかどうか確認してみましょう。

Python# 入力
response = model.generate_content("あなたは普段何を食べますか?")
print(response.text)

# 出力
わしらぁ、季節によって食べられるものが変わるんじゃ。

春先には、野草や山菜を摘んで食べるんじゃよ。 
夏には、木の実や果実が豊富じゃ。
秋には、木の実を集めたり、狩猟をして獣の肉を食べるんじゃ。
冬は食料が乏しくなるからの、秋に採れた木の実や保存しておいた肉、干した魚などを食べて過ごすんじゃ。

生きるために、自然の恵みに感謝しながら、日々を過ごしておるんじゃよ。 

Googleが考える古代人の生活の断片が出てきましたね。

Jsonモードについては公式ドキュメントに記載がなかったため断念しました。見つけて忘れなければ追記します。

最後に

以上、長大なコンテキストウィンドウとマルチモーダルが特徴のGemini 1.5 Proの紹介でした。

私もまた、Googleに託されたものを投げ出さずに生きていこうと思います。

それでは、また。

azblob://2024/05/21/eyecatch/2024-05-20-llm-from-scratch-000.png
2024/05/22
AI/Machine Learning