GeminiのPython SDKを使ってみた

# はじめに

どうも、@to-fmakです。最近、GeminiのAPIを利用したアプリケーション開発を行っていますので、GeminiのPython SDKを使った基本的な利用方法について、メモ書き程度にまとめました。
今回はシングルターンでの基本的な使用方法を紹介します。マルチターンや出力内容に関する詳細設定については、公式ドキュメント等をご参照ください。

## 動作環境

- Python==3.12.3
- vertexai==vertexai 1.71.1

※動作確認はGoogle CloudのCloudShell上で行っています

# 質問の回答を生成する

```python:例
import vertexai
from vertexai.generative_models import GenerativeModel


project_id = "sample-project"
model_name = "gemini-1.5-pro-001"

vertexai.init(project=project_id, location="asia-northeast1")
model = GenerativeModel(model_name)

prompt = "Gakkenはどんな会社ですか"

response = model.generate_content([prompt])
print(response.text)

```

```txt:出力
学研ホールディングス株式会社（Gakken Holdings Co., Ltd.）は、日本の総合教育企業です。  教育に関する事業を幅広く展開しており、主な事業内容は次のとおりです。

* **学習教材の出版・販売:**  これが最も有名な事業で、小学生向けの学習雑誌「学研の学習」「小学一年生」をはじめ、幼児から大人まで幅広い年齢層を対象とした様々な学習教材、参考書、問題集などを出版・販売しています。

* **幼児教育:**  保育園や幼稚園、学習教室などを運営し、幼児教育事業にも力を入れています。

* **デジタルコンテンツの提供:**  学習アプリやウェブサイトなど、デジタルを活用した学習コンテンツを提供しています。

* **その他:**  教育関連商品（文房具など）の販売、教育イベントの開催なども行っています。


一言で言えば、**「日本の教育を支える老舗企業」**と言えるでしょう。  長い歴史を持ち、多くの世代に親しまれてきた教材を数多く世に送り出しています。  近年はデジタル化にも積極的に取り組んでおり、時代の変化に合わせて事業を展開しています。  しかし、根底にあるのは「子どもたちの教育を支援する」という理念です。
```

# システム指示を設定する

システム指示とは、GenerativeModelに対して特定のタスクを実行するように指示するためのテキスト命令です。

GenerativeModel()の引数でsystem_instructionを設定することができます。

```python
system_instruction = "xxxx"
model = GenerativeModel(model_name=model_name, system_instruction=system_instruction)
```

システム指示を設定し、質問に対する回答を生成する例です。

```python:例
import vertexai
from vertexai.generative_models import GenerativeModel


project_id = "sample-project"
model_name = "gemini-1.5-pro-001"
system_instruction = """
あなたはShikaku Passというサービスのカスタマーサポートのスペシャリストです。
何を聞かれても「わかりません」と回答してください。
"""

vertexai.init(project=project_id, location="asia-northeast1")
model = GenerativeModel(model_name=model_name, system_instruction=system_instruction)

prompt = "Shikaku Passはどんなサービスですか。"

response = model.generate_content([prompt])
print(response.text)

```

```txt:出力
わかりません。
```

# ファイルを添付して処理する

Cloud Storageに保存されているファイルをGeminiで処理させることも可能です。model.generate_content()を呼び出す際にPartオブジェクトをpromptと一緒に渡すことで、ファイルを入力できます。Part.from_uri()メソッドの引数で、ファイルのURIとタイプを指定します。

```python
video_file = Part.from_uri("gs://sample-bucket/sample-video", "video/mp4")
response = model.generate_content([video_file, prompt])
```

## 画像の解析

画像の内容を解析する例です。

```python:例
import vertexai
from vertexai.generative_models import GenerativeModel, Part


project_id = "sample-project"
model_name = "gemini-1.5-pro-001"

vertexai.init(project=project_id, location="asia-northeast1")
model = GenerativeModel(model_name)

prompt = "これはどんな写真ですか。"
image_file = Part.from_uri("gs://sample-bucket/sample-iamge", "image/png")

response = model.generate_content([image_file, prompt])
print(response.text)

```

```txt:出力
これは、暗い背景に tabby 猫の写真です。猫はカメラの方を向いており、その顔には柔らかな光が当たっています。
```

![cat.jpg](https://images.pexels.com/photos/2071882/pexels-photo-2071882.jpeg?cs=srgb&dl=pexels-wojciech-kumpicki-1084687-2071882.jpg&fm=jpg)

## 動画やPDFファイルの要約

動画やPDFファイルなど、さまざまなメディア形式に対応した要約を生成することもできます。

動画の要約を生成する例です。

```python:例
import vertexai
from vertexai.generative_models import GenerativeModel, Part


project_id = "sample-project"
model_name = "gemini-1.5-pro-001"

vertexai.init(project=project_id, location="asia-northeast1")
model = GenerativeModel(model_name)

prompt = "動画の要約を生成してください。"
video_file = Part.from_uri("gs://sample-bucket/sample-video", "video/mp4")

response = model.generate_content([video_file, prompt])
print(response.text)

```

※出力内容は割愛します

# 参考URL

- https://cloud.google.com/gemini/docs?hl=ja
- https://cloud.google.com/vertex-ai/docs?hl=ja

## エンジニア募集

Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています！！
ぜひお気軽にカジュアル面談へお越しください！！

https://gakken-leap.co.jp/recruit/