メディア ファイルを使用したプロンプト


ai.google.dev で表示 Google Colab で実行 GitHub のソースを表示

Gemini API は、テキスト、画像、音声、動画データによるプロンプト(マルチモーダル プロンプトとも呼ばれます)をサポートしています。つまり、これらのタイプのメディア ファイルをプロンプトに含めることができます。小さなファイルの場合は、プロンプトを提供するときに Gemini モデルを直接ローカル ファイルを指すように指定できます。プロンプトに含める前に、File API を使用してサイズの大きいファイルをアップロードします。

File API を使用すると、プロジェクトごとに最大 20 GB のファイルを保存でき、各ファイルのサイズは 2 GB を超えません。ファイルは 48 時間保存され、その期間内に API キーを使ってアクセスできます。また、API からダウンロードすることはできません。Files API は、Gemini API が利用可能なすべてのリージョンで無料でご利用いただけます。

File API は、model.generateContent または model.streamGenerateContent でコンテンツを生成するために使用できる入力を処理します。有効なファイル形式(MIME タイプ)とサポートされているモデルについては、サポートされているファイル形式をご覧ください。

このガイドでは、File API を使用してメディア ファイルをアップロードし、Gemini API への GenerateContent 呼び出しにそのファイルを含める方法について説明します。詳細については、コードサンプルをご覧ください。

始める前に: プロジェクトと API キーを設定する

Gemini API(またはその File API)を呼び出す前に、プロジェクトを設定して API キーを構成する必要があります。

画像を使用したプロンプト

このチュートリアルでは、File API を使用してサンプル画像をアップロードし、それを使用してコンテンツを生成します。

画像ファイルをアップロードする

独自のファイルをアップロードする方法については、付録セクションをご覧ください。

  1. アップロードするサンプル画像を準備します。

      curl -o image.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg
    
  2. そのファイルを media.upload を使用してアップロードし、他の API 呼び出しでアクセスできるようにします。

    sample_file = genai.upload_file(path="image.jpg",
                                display_name="Sample drawing")
    
    print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")
    

response は、アップロードされた画像が指定された display_name で保存されており、Gemini API 呼び出しでファイルを参照するための uri があることを示しています。アップロードされたファイルを URI にマッピングする方法を追跡するには、response を使用します。

ユースケースによっては、dict やデータベースなどの構造に URI を格納できます。

画像ファイルのメタデータを取得する

ファイルをアップロードした後、SDK を介して files.get を呼び出すことで、API がファイルを正常に保存したことを確認し、そのメタデータを取得できます。

この方法では、API キーにリンクされた Google Cloud プロジェクトに関連付けられたアップロード済みファイルのメタデータを取得できます。name(さらには uri)のみが一意です。一意性をご自分で管理する場合にのみ、display_name を使用してファイルを識別します。

file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")

アップロードされた画像ファイルを使用してコンテンツを生成する

画像をアップロードした後、レスポンスの uri を参照する GenerateContent リクエストを行うことができます(ファイルをアップロードするか、ファイルのメタデータを直接取得します)。

この例では、テキストで始まり、その後にアップロードしたファイルの URI 参照が続くプロンプトを作成します。

# The Gemini 1.5 models are versatile and work with multimodal prompts
model = genai.GenerativeModel(model_name="models/gemini-1.5-flash")

response = model.generate_content([sample_file, "Describe the image with a creative description."])

Markdown(">" + response.text)

イメージ ファイルを削除する

ファイルは 48 時間後に自動的に削除されます。SDK で files.delete を使用して手動で削除することもできます。

genai.delete_file(sample_file.name)
print(f'Deleted {sample_file.display_name}.')

動画を使用したプロンプト

このチュートリアルでは、File API を使用してサンプル動画をアップロードし、それを使用してコンテンツを生成します。

動画ファイルをアップロードする

Gemini API は、動画ファイル形式を直接受け入れます。この例では短編映画「Big Buck Bunny」を使用しています。

「Big Buck Bunny」の著作権は 2008 年 Blender Foundation / www.bigbuckbunny.org に帰属し、クリエイティブ・コモンズの表示 3.0 ライセンスにより使用許諾されています。

独自のファイルをアップロードする方法については、付録セクションをご覧ください。

  1. アップロードするサンプル動画ファイルを準備します。

    wget https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4
    
  2. そのファイルを media.upload を使用してアップロードし、他の API 呼び出しでアクセスできるようにします。

    video_file_name = "BigBuckBunny_320x180.mp4"
    
    print(f"Uploading file...")
    video_file = genai.upload_file(path=video_file_name)
    print(f"Completed upload: {video_file.uri}")
    

動画ファイルのアップロード状態を確認する

SDK で files.get メソッドを呼び出して、API が動画ファイルを正常にアップロードしたことを確認します。

動画ファイルには、File API の State フィールドがあります。動画をアップロードすると、推論の準備が整うまでは PROCESSING 状態になります。モデルの推論に使用できるのは ACTIVE ファイルのみです。

import time

while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

動画ファイルのメタデータを取得する

アップロードされた動画ファイルのメタデータは、SDK の files.get メソッドを呼び出していつでも取得できます。

この方法では、API キーにリンクされた Google Cloud プロジェクトに関連付けられたアップロード済みファイルのメタデータを取得できます。name(さらには uri)のみが一意です。一意性をご自分で管理する場合にのみ、display_name を使用してファイルを識別します。

file = genai.get_file(name=video_file.name)
print(f"Retrieved file '{file.display_name}' as: {video_file.uri}")

アップロードした動画ファイルを使用してコンテンツを生成する

動画をアップロードしたら、レスポンスの uri を参照する GenerateContent リクエストを行うことができます(ファイルをアップロードするか、ファイルのメタデータを直接取得します)。

動画の推論を実行する前に、動画ファイルのアップロード状態を確認(上記のセクション)していることを確認してください。

# Create the prompt.
prompt = "Describe this video."

# The Gemini 1.5 models are versatile and work with multimodal prompts
model = genai.GenerativeModel(model_name="models/gemini-1.5-flash")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([video_file, prompt],
                                  request_options={"timeout": 600})
print(response.text)

動画ファイルを削除する

ファイルは 48 時間後に自動的に削除されます。SDK で files.delete を使用して手動で削除することもできます。

genai.delete_file(file_response.name)
print(f'Deleted file {file_response.uri}')

サポートされているファイル形式

Gemini のモデルは、複数のファイル形式を使用したプロンプトをサポートしています。このセクションでは、プロンプトに一般的なメディア形式を使用する場合、特に画像、音声、動画、書式なしテキスト ファイルを使用する際の考慮事項について説明します。次の表に示すように、特定のモデル バージョンでのみプロンプトを表示するメディア ファイルを使用できます。

モデル 画像 音声 動画 書式なしテキスト
Gemini 1.5 Pro(リリース 008 以降) ✔(画像ファイルの最大サイズは 3,600)

画像形式

Gemini 1.5 モデルでは、プロンプトに画像データを使用できます。プロンプトに画像を使用する場合、次の制限と要件が適用されます。

  • 画像は、次のいずれかの画像データ MIME タイプである必要があります。
    • PNG - image/png
    • .JPEG - 画像 /jpeg
    • WEBP - 画像 /webp
    • HEIC - 画像 /heic
    • HEIF - 画像 /heif
  • Gemini 1.5 モデルの場合は最大 3,600 枚の画像。
  • 画像のピクセル数に特に制限はありませんが、元のアスペクト比を維持したまま、最大解像度 3,072 x 3,072 に合わせて画像が大きいものは縮小されます。

オーディオ形式

Gemini 1.5 モデルでは、音声データを使用してプロンプトを作成できます。プロンプトに音声を使用する場合、次の制限と要件が適用されます。

  • 音声データは、次の一般的な音声形式 MIME タイプでサポートされています。
    • WAV - 音声/WAV
    • MP3 - 音声/mp3
    • AIFF - 音声/aiff
    • AAC - 音声/AAC
    • OGG Vorbis - 音声/ogg
    • FLAC - 音声/flac
  • 1 つのプロンプトでサポートされる音声データの最大長は 9.5 時間です。
  • 音声ファイルは 16 Kbps のデータ解像度に再サンプリングされ、複数チャンネルの音声が 1 つのチャンネルに結合されます。
  • 1 つのプロンプト内の音声ファイル数に特定の上限はありませんが、1 つのプロンプト内のすべての音声ファイルの合計長は 9.5 時間以下にする必要があります。

動画形式

Gemini 1.5 モデルでは、プロンプトに動画データを使用できます。

  • 動画データは、次の一般的な動画形式の MIME タイプでサポートされています。

    • video/mp4
    • video/mpeg
    • 動画/動画
    • 動画/AV
    • video/x-flv
    • 動画/mpg
    • 動画/WebM
    • 動画/MV
    • 動画/3GPP
  • File API サービスは、動画を 1 フレーム/秒(FPS)で画像にサンプリングします。最適な推論品質を提供するために、変更される可能性があります。解像度や品質に関係なく、個々の画像は 258 トークンを消費します。

書式なしテキスト形式

File API では、次の MIME タイプの書式なしテキスト ファイルをアップロードできます。

  • text/plain
  • text/html
  • text/css
  • text/javascript
  • application/x-javascript
  • text/x-typescript
  • application/x-typescript
  • text/csv
  • テキスト/マークダウン
  • テキスト/x-python
  • application/x-python-code
  • application/json
  • text/xml
  • アプリケーション/RTF
  • テキスト/RTF

MIME タイプがリストにない書式なしテキスト ファイルの場合は、上記の MIME タイプのいずれかを手動で指定してみてください。

付録: Colab へのファイルのアップロード

このノートブックでは、インターネットからダウンロードしたファイルに File API を使用します。これを Colab で実行していて、独自のファイルを使用する場合は、まず Colab インスタンスにファイルをアップロードする必要があります。

まず、左側のサイドバーにある [ファイル] をクリックしてから、[アップロード] ボタンをクリックします。

次に、そのファイルを File API にアップロードします。以下のコードセルのフォームに、アップロードしたファイルのファイル名を入力し、ファイルの適切な表示名を入力してからセルを実行します。

my_filename = "gemini_logo.png" # @param {type:"string"}
my_file_display_name = "Gemini Logo" # @param {type:"string"}

my_file = genai.upload_file(path=my_filename,
                            display_name=my_file_display_name)
print(f"Uploaded file '{my_file.display_name}' as: {my_file.uri}")