マルチモーダル プロンプトを送信する

マルチモーダル プロンプトとは、テキスト、画像、音声、動画、ドキュメントなど、複数のモダリティを含むモデル入力のことです。

このガイドでは、API を使用して次のマルチモーダル リクエストを Gemini に送信し、モデルのレスポンスを表示します。

  • プロンプトとバケットに保存されている画像の URL
  • プロンプトと音声トラック(インライン)

動画やドキュメントを含むプロンプトなど、Gemini のその他のマルチモーダル機能について学習する

このガイドは、ローカル環境で Python 用クライアント ライブラリを使用するか、REST API にコマンドライン リクエストを送信することで完了できます。

Gemini でサポートされている言語でプロンプトを送信できます。

始める前に

Gemini にマルチモーダル プロンプトを送信してテキストを生成する前に、Gemini API が有効になっているプロジェクトと、適切なロールと認証情報が必要です。gdcloud CLI を使用してインストール、初期化、認証を行い、Python 用のクライアント ライブラリをインストールする必要があります。

詳細については、スタートガイドをご覧ください。

プロンプトと画像の URL を送信する

次のコードを使用して、テキストと画像を含むプロンプトを Gemini API に送信します。GDC ストレージ バケット(s3://file-bucket/image.jpg)から URL を示す JPG 画像を指定します。このサンプルは、指定された画像の説明を返します。

コードは、コマンドラインから、IDE を使用して、またはアプリケーションにコードを組み込んで実行できます。

Python

次の手順に沿って、プロンプトと画像を送信し、Python スクリプトからテキストを生成します。

  1. 必要な Python ライブラリをインストールします。

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. 画像を GDC ストレージ バケットにアップロードします。この例では、バケット内の画像のパスは s3://file-bucket/image.jpg です。

  3. API リクエストを request.json という名前の JSON ファイルに保存します。ファイルは次の例のようになっている必要があります。

    {
        "messages": [
          {
            "role": "user",
            "content": "What's in this image?"
          },
          {
            "role": "user",
            "content": [
              {
                "type": "image_url",
                "image_url": {
                  "url": "s3://file-bucket/image.jpg"
                }
              }
            ]
          }
        ]
    }
    

    リクエスト本文の詳細については、API リクエストの形式を設定するをご覧ください。

    リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。

  4. Python スクリプトに必要な環境変数を設定します

  5. API リクエストを認証します

  6. 作成した Python スクリプトに次のコードを追加します。

    import json
    import os
    
    from absl import app
    from absl import flags
    from openai import OpenAI, OpenAIError
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    
    from typing import Sequence
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    def chat_completion_client(host):
        return OpenAI(
            api_key="None",
            base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID"
        )
    
    def chat_completion(client, messages, token):
    
        try:
            response = client.chat.completions.create(
            model="MODEL_ID",
            messages=messages,
            extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"}
            )
            print("response:", response)
        except Exception as e:
            print("Got exception:", e)
    
    def main(argv: Sequence[str]):
        del argv  # Unused.
        with open(_INPUT.value) as json_file:
            data = json.load(json_file)
    
        print("Request: ", data)
    
        client = chat_completion_client(_HOST.value,)
    
        chat_completion(client=client, messages=data["messages"], token=_TOKEN.value)
    
    if __name__=="__main__":
        app.run(main)
    

    次のように置き換えます。

  7. Python スクリプトを保存します。

  8. Chat Completions インターフェースを使用して Gemini にリクエストを送信します。

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN
    

    次のように置き換えます。

次のようなレスポンスを取得する必要があります。

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

curl

次の手順に沿って、プロンプトと画像を送信し、REST API への curl リクエストを通じてテキストを生成します。

  1. 画像を GDC ストレージ バケットにアップロードします。この例では、バケット内の画像のパスは s3://file-bucket/image.jpg です。

  2. API リクエストを request.json という名前の JSON ファイルに保存します。ファイルは次の例のようになっている必要があります。

    {
        "messages": [
          {
            "role": "user",
            "content": "What's in this image?"
          },
          {
            "role": "user",
            "content": [
              {
                "type": "image_url",
                "image_url": {
                  "url": "s3://file-bucket/image.jpg"
                }
              }
            ]
          }
        ]
    }
    

    リクエスト本文の詳細については、API リクエストの形式を設定するをご覧ください。

    リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。

  3. API リクエストを認証します

  4. 次のリクエストを行います。

    curl  \
      -H "Authorization: Bearer TOKEN"  \
      -H "Content-Type: application/json; charset=utf-8"  \
      -X POST  https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions  -d @./request.json
    

    次のように置き換えます。

次のようなレスポンスを取得する必要があります。

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s what\'s in the image: Several freshly baked blueberry scones are arranged on parchment paper.\n", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

プロンプトと音声をインラインで送信する

次のコードを使用して、テキストと音声を含むプロンプトを Gemini API に送信します。MP3 音声ファイルを base64 エンコード データとしてインラインで指定します。このサンプルは、指定された曲の歌詞を返します。

コードは、コマンドラインから、IDE を使用して、またはアプリケーションにコードを組み込んで実行できます。

Python

次の手順に沿って、プロンプトと音声を送信し、Python スクリプトからテキストを生成します。

  1. 必要な Python ライブラリをインストールします。

    pip install openai
    pip install absl-py
    pip install typing
    pip install protobuf
    
  2. base64 コマンドライン ツールを使用してファイルをエンコードし、-w 0 フラグを使用して、行の折り返しを防ぎます。

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  3. API リクエストを request.json という名前の JSON ファイルに保存します。ファイルは次の例のようになっている必要があります。

    {
        "messages": [
          {
            "role": "user",
            "content": "Show me the lyrics of this song."
          },
          {
            "role": "user",
            "content": [
              {
                "type": "input_audio",
                "input_audio": {
                  "data": "BASE64_ENCODED_DATA",
                  "format": "mp3"
                }
              }
            ]
          }
        ]
    }
    

    リクエスト本文の詳細については、API リクエストの形式を設定するをご覧ください。

    リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。

  4. Python スクリプトに必要な環境変数を設定します

  5. API リクエストを認証します

  6. 作成した Python スクリプトに次のコードを追加します。

    import json
    import os
    
    from absl import app
    from absl import flags
    from openai import OpenAI, OpenAIError
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    
    from typing import Sequence
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Chat Completion endpoint", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    def chat_completion_client(host):
        return OpenAI(
            api_key="None",
            base_url="https://" + host + "/v1/projects/PROJECT_ID/locations/PROJECT_ID"
        )
    
    def chat_completion(client, messages, token):
    
        try:
            response = client.chat.completions.create(
            model="MODEL_ID",
            messages=messages,
            extra_headers={"Authorization" : "Bearer " + token, "Content-Type": "application/json"}
            )
            print("response:", response)
        except Exception as e:
            print("Got exception:", e)
    
    def main(argv: Sequence[str]):
        del argv  # Unused.
        with open(_INPUT.value) as json_file:
            data = json.load(json_file)
    
        print("Request: ", data)
    
        client = chat_completion_client(_HOST.value,)
    
        chat_completion(client=client, messages=data["messages"], token=_TOKEN.value)
    
    if __name__=="__main__":
        app.run(main)
    

    次のように置き換えます。

  7. Python スクリプトを保存します。

  8. Chat Completions インターフェースを使用して Gemini にリクエストを送信します。

    python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN
    

    次のように置き換えます。

次のようなレスポンスを取得する必要があります。

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

curl

次の手順に沿って、プロンプトと音声を送信し、REST API への curl リクエストを通じてテキストを生成します。

  1. base64 コマンドライン ツールを使用してファイルをエンコードし、-w 0 フラグを使用して、行の折り返しを防ぎます。

    base64 AUDIO_FILE -w 0 > OUTPUT_FILE
    
  2. API リクエストを request.json という名前の JSON ファイルに保存します。ファイルは次の例のようになっている必要があります。

    {
        "messages": [
          {
            "role": "user",
            "content": "Show me the lyrics of this song."
          },
          {
            "role": "user",
            "content": [
              {
                "type": "input_audio",
                "input_audio": {
                  "data": "BASE64_ENCODED_DATA",
                  "format": "mp3"
                }
              }
            ]
          }
        ]
    }
    

    リクエスト本文の詳細については、API リクエストの形式を設定するをご覧ください。

    リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。

  3. API リクエストを認証します

  4. 次のリクエストを行います。

    curl  \
      -H "Authorization: Bearer TOKEN"  \
      -H "Content-Type: application/json; charset=utf-8"  \
      -X POST  https://ENDPOINT:443/v1/projects/PROJECT_ID/locations/PROJECT_ID/chat/completions  -d @./request.json
    

    次のように置き換えます。

次のようなレスポンスを取得する必要があります。

ChatCompletion(id='', choices=[Choice(finish_reason='', index=0, logprobs=0, message=ChatCompletionMessage(content="Here\'s the lyrics of the song: There are places I remember all my life, though some have changed...", refusal=None, role='assistant', function_call=None, tool_calls=None))], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=0, prompt_tokens=0, total_tokens=0))

次のステップ