多模態提示是指模型輸入內容包含多種模態,例如文字、圖片、音訊、影片和文件。
在本指南中,您會使用 API 將下列多模態要求傳送至 Gemini,並查看模型回覆:
- 提示和儲存在 bucket 中的圖片網址
- 提示和內嵌音軌
瞭解其他 Gemini 多模態功能,包括使用影片和文件做為提示。
您可以在本機環境中使用 Python 適用的用戶端程式庫,或傳送指令列要求至 REST API,完成本指南。
瞭解 Gemini 支援的語言,並以這些語言傳送提示。
事前準備
如要開始傳送多模態提示,讓 Gemini 生成文字,您必須擁有已啟用 Gemini API 的專案,並具備適當的角色和憑證。您必須安裝、初始化及驗證 gdcloud CLI,並安裝 Python 適用的用戶端程式庫。
詳情請參閱入門指南。
傳送提示和圖片網址
使用下列程式碼,將包含文字和圖片的提示傳送至 Gemini API。您提供 JPG 圖片,並指出其 GDC 儲存空間值區 (s3://file-bucket/image.jpg) 的網址。這個範例會傳回所提供圖片的說明。
您可以透過指令列、IDE 執行程式碼,或在應用程式中加入程式碼。
Python
請按照下列步驟傳送提示和圖片,並透過 Python 指令碼生成文字:
安裝需要的 Python 程式庫:
pip install openai pip install absl-py pip install typing pip install protobuf將圖片上傳至 GDC 儲存空間 bucket。 在本範例中,值區中的圖片路徑為
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更改下列內容:
您必須取得類似以下的回應:
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 儲存空間 bucket。 在本範例中,值區中的圖片路徑為
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更改下列內容:
您必須取得類似以下的回應:
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。您以 Base64 編碼資料的形式,內嵌提供 MP3 音訊檔案。這個範例會傳回所提供歌曲的歌詞。
您可以透過指令列、IDE 執行程式碼,或在應用程式中加入程式碼。
Python
請按照下列步驟傳送提示和音訊,透過 Python 指令碼生成文字:
安裝需要的 Python 程式庫:
pip install openai pip install absl-py pip install typing pip install protobuf使用
base64指令列工具對檔案進行編碼,並使用-w 0標記確保不會換行:base64 AUDIO_FILE -w 0 > OUTPUT_FILE將 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 要求」。
您可以在要求中試驗參數。詳情請參閱「功能」。
在您建立的 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更改下列內容:
您必須取得類似以下的回應:
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_FILE將 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 要求」。
您可以在要求中試驗參數。詳情請參閱「功能」。
提出要求:
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))