多模态提示是指包含多种模态(例如文本、图片、音频、视频和文档)的模型输入。
在本指南中,您将使用 API 向 Gemini 发送以下多模态请求,并查看模型回答:
- 提示和存储在存储桶中的图片的网址
- 提示和内嵌音轨
了解其他 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 存储桶。 在此示例中,相应图片在存储桶中的路径为
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 存储桶。 在此示例中,相应图片在存储桶中的路径为
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 发送包含文本和音频的提示。您以内嵌方式提供 MP3 音频文件,作为 base64 编码的数据。此示例会返回所提供歌曲的歌词。
您可以通过命令行、使用 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))