マルチモーダル プロンプトとは、テキスト、画像、音声、動画、ドキュメントなど、複数のモダリティを含むモデル入力のことです。
このガイドでは、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 スクリプトからテキストを生成します。
必要な Python ライブラリをインストールします。
pip install openai pip install absl-py pip install typing pip install protobuf画像を GDC ストレージ バケットにアップロードします。この例では、バケット内の画像のパスは
s3://file-bucket/image.jpgです。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 リクエストの形式を設定するをご覧ください。
リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。
作成した 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)次のように置き換えます。
PROJECT_ID: プロジェクト ID。MODEL_ID: レスポンスを生成するモデル エンドポイント ID。
Python スクリプトを保存します。
Chat Completions インターフェースを使用して Gemini にリクエストを送信します。
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN次のように置き換えます。
SCRIPT_NAME: Python スクリプトに付けた名前(client.pyなど)。ENDPOINT: 組織で使用する Gemini エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。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 リクエストを通じてテキストを生成します。
画像を GDC ストレージ バケットにアップロードします。この例では、バケット内の画像のパスは
s3://file-bucket/image.jpgです。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 リクエストの形式を設定するをご覧ください。
リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。
次のリクエストを行います。
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次のように置き換えます。
TOKEN: 取得した認証トークン。ENDPOINT: 組織で使用する Gemini エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。PROJECT_ID: プロジェクト ID。MODEL_ID: レスポンスを生成するモデル エンドポイント ID。
次のようなレスポンスを取得する必要があります。
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 スクリプトからテキストを生成します。
必要な Python ライブラリをインストールします。
pip install openai pip install absl-py pip install typing pip install protobufbase64コマンドライン ツールを使用してファイルをエンコードし、-w 0フラグを使用して、行の折り返しを防ぎます。base64 AUDIO_FILE -w 0 > OUTPUT_FILEAPI リクエストを
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 リクエストの形式を設定するをご覧ください。
リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。
作成した 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)次のように置き換えます。
PROJECT_ID: プロジェクト ID。MODEL_ID: レスポンスを生成するモデル エンドポイント ID。
Python スクリプトを保存します。
Chat Completions インターフェースを使用して Gemini にリクエストを送信します。
python SCRIPT_NAME --input=request.json --host=ENDPOINT --token=TOKEN次のように置き換えます。
SCRIPT_NAME: Python スクリプトに付けた名前(client.pyなど)。ENDPOINT: 組織で使用する Gemini エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。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 リクエストを通じてテキストを生成します。
base64コマンドライン ツールを使用してファイルをエンコードし、-w 0フラグを使用して、行の折り返しを防ぎます。base64 AUDIO_FILE -w 0 > OUTPUT_FILEAPI リクエストを
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 リクエストの形式を設定するをご覧ください。
リクエストでパラメータを試すことができます。詳しくは、ケーパビリティをご覧ください。
次のリクエストを行います。
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次のように置き換えます。
TOKEN: 取得した認証トークン。ENDPOINT: 組織で使用する Gemini エンドポイント。詳細については、サービス ステータスとエンドポイントを表示するをご覧ください。PROJECT_ID: プロジェクト ID。MODEL_ID: レスポンスを生成するモデル エンドポイント ID。
次のようなレスポンスを取得する必要があります。
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))