多模态嵌入模型会根据您提供的输入生成多维向量,可以包含图片、文本和视频数据的组合。然后,嵌入向量可用于后续任务,例如图片分类或视频内容审核。
图片和文本嵌入向量位于同一语义空间中,并且具有相同的维度。因此,这些向量可以互换用于应用场景,例如按文本搜索图片或按图片搜索视频。
对于纯文本嵌入用例,我们建议改用 Gemini Enterprise Agent Platform 文本嵌入 API。例如,文本嵌入 API 可能更适合基于文本的语义搜索、聚类、长文档分析以及其他文本检索或问答应用场景。如需了解详情,请参阅获取文本嵌入。
支持的模型
您可以使用以下模型获取多模态嵌入:
gemini-embedding-2multimodalembedding@001
最佳做法
使用多模态嵌入模型时,请考虑以下输入方面:
- 图片中的文本 - 模型可以区分图片中的文本,类似于光学字符识别 (OCR)。如果您需要区分图片内容的说明和图片中的文本,请考虑使用提示工程来指定目标内容。例如:根据您的用例,指定“picture of a cat”或“the text 'cat”,而不只是“cat”。
the text 'cat'
以粗体大号字体呈现的“猫”字样。
picture of a cat
图片来源:Manja Vitolic on Unsplash。 - 嵌入相似度 - 嵌入的点积不是校准的概率。点积是相似度指标,不同用例的得分分布可能不同。因此,请避免使用固定值阈值来衡量质量。请改用排名方法进行检索,或使用 sigmoid 进行分类。
使用 gemini-embedding-2
gemini-embedding-2 模型接受图片、文本、文档、音频和视频模态的交错输入。
指定任务说明以提高性能
您可以将嵌入用于各种任务,从分类到文档搜索。指定正确的任务指令有助于针对预期关系优化嵌入,从而最大限度地提高准确性和效率。
下表展示了如何使用 gemini-embedding-2 模型针对对称和非对称用例设置查询和文档的格式。
检索用例(非对称格式)
| 使用场景 | 查询结构 | 文档结构 |
|---|---|---|
| 搜索查询 | task: search result | query: {content} |
title: {title} | text: {content}如果没有标题,则使用 title: none。 |
| 问答 | task: question answering | query: {content} |
title: {title} | text: {content} |
| 事实核查 | task: fact checking | query: {content} |
title: {title} | text: {content} |
| 代码检索 | task: code retrieval | query: {content} |
title: {title} | text: {content} |
单输入源用例(对称格式)
| 使用场景 | 输入结构 |
|---|---|
| 分类 | task: classification | query: {content} |
| 聚簇 | task: clustering | query: {content} |
| 语义相似度 | task: sentence similarity | query: {content}请勿将此方法用于搜索或检索。它旨在用于语义文本相似度。 |
Python 中的使用示例
Python
# Generate embedding for a search query def prepare_query(query): return f"task: search result | query: {query}" # Generate embedding for a search document def prepare_document(content, title=None): if title is None: title = "none" return f"title: {title} | text: {content}" # Generate embedding for classification def prepare_classification_input(content): return f"task: classification | query: {content}"
API 用量
API 限额
使用 gemini-embedding-2 模型时,存在以下限制。
| 限制 | 值和说明 |
|---|---|
| 文本、图片、文档、视频和音频数据 | |
| 输入 token 限制 | 8192 个词元 超过 8192 个词元的输入会以静默方式截断。所有模态共享总共 8192 个 token 的上下文窗口。各种模态的 token 数量计算方式如下:
|
| 输出维度 | 3072(默认值,可使用 output_dimensionality 参数进行配置) |
| 图片限制 | 每个请求 6 张图片 |
| 图片格式 | JPEG、PNG、WebP、BMP、HEIC、HEIF、AVIF |
| 图片尺寸 | 每张图片的像素数上限为 16384 x 16384 |
| 文档限制 | 每个申请 1 个文件,最多 6 页 我们强烈建议每个 PDF 文件包含 1 页,以获得最佳质量。 |
| 文档格式 | |
| 视频和音频数据 | |
| 视频限制 | 每个请求 1 个视频,最多 120 帧 120 秒的限制基于默认的 1 FPS 设置。设置不同的 FPS 时,时长会有所不同:时长 = 120 / FPS。 默认情况下,系统会针对视频停用音频提取功能。启用音轨提取选项后,时长不得超过音频时长上限 180 秒,并且视频总时长会受到音频时长上限和 token 上下文窗口(8192 个 token)的限制。 |
| 视频格式 | 容器:MOV、MP4。编解码器:AV1、H264、H265、VP9。 |
| 音频限制 | 每个请求 180 秒 音频支持针对语音进行了优化。环境声音和音乐可能无法以最高音质播放。 |
| 音频格式 | MP3、WAV |
视频时长(含音频提取)
由于所有模态共享总共 8192 个 token 的上下文窗口,因此启用 audio_track_extraction 后,视频时长上限会有所不同:
| 模态 | token 数量 |
|---|---|
| 音频 | 每秒 25 个 token |
| 视频帧 | 每帧 66 个 token |
| 时间戳 | 每秒 10 个 token(每秒两个时间戳,格式为“mm:ss”) |
| FPS | 由 FPS 设置决定(默认值为 1) |
视频总时长受音频支持时长上限(180 秒)和 8192 个 token 的上下文窗口的限制。
计算示例:
如果您以 1 FPS 的默认采样率处理视频并启用音频提取功能,则:
- 消耗率:每秒视频消耗 66 个 token(1 帧)+ 25 个 token(1 秒音频)+ 10 个 token(时间戳)= 101 个 token。
- 时长上限:在 8192 个词元的限制下,时长上限约为 8192 / 101 ≈ 81 秒。
如果输入内容超出上下文窗口,超出部分将被静默截断。
获取多模态嵌入
REST
PROJECT_ID="YOUR_PROJECT_ID" LOCATION="us" curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://aiplatform.${LOCATION}.rep.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/gemini-embedding-2:embedContent" \ -d '{ "content": { "parts": [ { "text": "Whats this" }, { "file_data": { "mime_type": "video/mp4", "file_uri": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4" } } ] } }'
Python
from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part.from_text(text="Audio AI"), types.Part.from_uri( file_uri="gs://cloud-samples-data/generative-ai/audio/Chirp-3-Docs-Dive.mp3", mime_type="audio/mpeg", ), ], ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content] ) print(response.embeddings[0].values)
位置
位置是您可以在请求中指定的区域,用于控制静态数据的存储位置。如需查看可用区域的列表,请参阅 Agent Platform 位置。
配额
如需查看 gemini-embedding-2 的配额限制,请参阅 Gemini Enterprise Agent Platform 上的生成式 AI 的配额和系统限制。
维度
使用 gemini-embedding-2 模型时,您可以在 EmbedContentConfig 中使用 output_dimensionality 参数指定较低的维度。
以下示例返回一个 128 维向量。对于 gemini-embedding-2,输出嵌入已针对非默认维度进行 L2 归一化(与 gemini-embedding-001 不同)。
Python
import numpy as np from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part.from_uri( file_uri="gs://cloud-samples-data/generative-ai/audio/Chirp-3-Docs-Dive.mp3", mime_type="audio/mpeg", ), ], ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content], config=types.EmbedContentConfig(output_dimensionality=128), ) embedding_values_np = np.array(response.embeddings[0].values) print(f"Embedding length: {len(embedding_values_np)}") print(f"Norm of embedding: {np.linalg.norm(embedding_values_np):.6f}") # Should be very close to 1
参数
默认视频抽样率为 1 帧/秒 (FPS)。您可以使用 video_metadata 添加其他参数:
Python
from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part( file_data=types.FileData( file_uri="gs://cloud-samples-data/generative-ai/video/pixel8.mp4", mime_type="video/mp4", ), video_metadata=types.VideoMetadata( fps=0.5, start_offset="10s", end_offset="20s", ), ), ] ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content] ) print(response.embeddings[0].values)
EmbedContentConfig 中还有其他选项。
| 选项 | 类型 | 说明 |
|---|---|---|
output_dimensionality |
int |
降低输出嵌入的维度。 |
document_ocr |
bool |
为文档输入启用 OCR。 |
audio_track_extraction |
bool |
从视频输入中提取音频。 |
使用 multimodalembedding@001
使用 multimodalembedding@001 模型进行文本和图片嵌入时,存在以下限制:
| 限制 | 值和说明 |
|---|---|
| 文本和图片数据 | |
| 每项目每分钟的 API 请求数上限 | 120-600,具体取决于区域 |
| 文本长度上限 | 32 个词法单元(约 32 个字) 最大文本长度为 32 个词法单元(约 32 个词)。如果输入超过 32 个词法单元,则模型会在内部将输入缩短到此长度。 |
| 语言 | 英语 |
| 图片格式 | BMP、GIF、JPG、PNG |
| 图片大小 | 采用 Base64 编码的图片:20 MB(转码为 PNG 时) Cloud Storage 图片:20 MB(原始文件格式) 接受的图片大小上限为 20 MB。为避免增加网络延迟时间,请使用较小的图片。此外,该模型会将图片的大小调整为 512 x 512 像素分辨率。因此,您无需提供分辨率更高的图片。 |
| 视频数据 | |
| 支持音频 | 不适用 - 模型在生成视频嵌入时不会考虑音频内容 |
| 视频格式 | AVI、FLV、MKV、MOV、MP4、MPEG、MPG、WEBM 和 WMV |
| 视频时长上限 (Cloud Storage) | 无限制。但是,一次只能分析 2 分钟的内容。 |
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Gemini Enterprise Agent Platform API.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
为您的环境设置身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭据。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
初始化 gcloud CLI 后,对其进行更新并安装所需组件:
gcloud components update gcloud components install beta
-
为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅身份验证文档中的 为本地开发环境设置 ADC。 Google Cloud
Node.js
如需在本地开发环境中使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
初始化 gcloud CLI 后,对其进行更新并安装所需组件:
gcloud components update gcloud components install beta
-
为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅身份验证文档中的 为本地开发环境设置 ADC。 Google Cloud
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
初始化 gcloud CLI 后,对其进行更新并安装所需组件:
gcloud components update gcloud components install beta
-
为您的用户账号创建本地身份验证凭证:
gcloud auth application-default login
如果系统返回身份验证错误,并且您使用的是外部身份提供方 (IdP),请确认您已 使用联合身份登录 gcloud CLI。
如需了解详情,请参阅身份验证文档中的 为本地开发环境设置 ADC。 Google Cloud
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
-
安装 Google Cloud CLI。
-
配置 gcloud CLI 以使用您的联合身份。
如需了解详情,请参阅使用联合身份登录 gcloud CLI。
-
初始化 gcloud CLI 后,对其进行更新并安装所需组件:
gcloud components update gcloud components install beta
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
-
- 如需使用 Python SDK,请按照安装 Agent Platform SDK for Python 中的说明操作。如需了解详情,请参阅 Agent Platform SDK for Python API 参考文档。
- 可选。查看此功能的价格。嵌入的价格取决于您发送的数据类型(例如图片或文本),还取决于您用于某些数据类型(例如 Video Plus、Video Standard 或 Video Essential)的模式。
位置
位置是您可以在请求中指定的区域,用于控制静态数据的存储位置。如需查看可用区域的列表,请参阅 Agent Platform 位置。
错误消息
本部分介绍了您可能会遇到的常见错误消息。
“超出配额”错误
google.api_core.exceptions.ResourceExhausted: 429 Quota exceeded for
aiplatform.googleapis.com/online_prediction_requests_per_base_model with base
model: multimodalembedding. Please submit a quota increase request.
如果这是您第一次收到此错误,请使用 Google Cloud 控制台为您的项目申请调整配额。在申请调整配额之前,请使用以下过滤条件:
Service ID: aiplatform.googleapis.commetric: aiplatform.googleapis.com/online_prediction_requests_per_base_modelbase_model:multimodalembedding
如果您已发送配额调整请求,请等待另一个请求。如果您需要进一步增加配额,请重复调整配额申请,并提供持续配额调整的理由。
指定低维嵌入
根据所用模型,嵌入请求会返回 1408 个浮点矢量或 3072 个浮点矢量。您可以为文本和图片数据指定较低维度的嵌入,以优化延迟时间和存储空间,或优化质量。低维嵌入可降低存储需求,并为后续嵌入任务(例如搜索或推荐)提供更低的延迟时间。高维嵌入可为这些任务提供更高的准确率,但需要更高的存储空间和更长的延迟时间。
下表显示了每种模型的默认维度和可用的较低维度:
| 模型 | 默认维度(最高) | 支持的维度(范围) | 建议的较低维度 |
|---|---|---|---|
gemini-embedding-2 |
3072 | 128 到 3072 | 128、768 或 1536 |
multimodalembedding@001 |
1408 | 128 到 1408 | 128、256 或 512 |
使用以下示例生成维度较低的嵌入:
REST
可以通过添加 parameters.dimension 字段来获得较低维度。该参数接受适用于相应模型的任何维度值。
例如,使用 multimodalembedding@001 模型时,您可以指定 128、256、512 或 1408。响应包含指定维度的嵌入。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID。
-
IMAGE_URI:要获取其嵌入的目标图片的 Cloud Storage URI。例如,
gs://my-bucket/embeddings/supermarket-img.png。您还可以以 base64 编码的字节字符串形式提供图片:
[...] "image": { "bytesBase64Encoded": "B64_ENCODED_IMAGE" } [...] -
TEXT:要获取嵌入的目标文本。例如
a cat。 -
EMBEDDING_DIMENSION:嵌入维度的数量。值越小,后续任务使用这些嵌入时的延迟时间就越短,而值越大,准确率就越高。可用值:
128、256、512和1408(默认值)。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
请求 JSON 正文:
{
"instances": [
{
"image": {
"gcsUri": "IMAGE_URI"
},
"text": "TEXT"
}
],
"parameters": {
"dimension": EMBEDDING_DIMENSION
}
}
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
128 个维度:
{
"predictions": [
{
"imageEmbedding": [
0.0279239565,
[...128 dimension vector...]
0.00403284049
],
"textEmbedding": [
0.202921599,
[...128 dimension vector...]
-0.0365431122
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}256 个维度:
{
"predictions": [
{
"imageEmbedding": [
0.248620048,
[...256 dimension vector...]
-0.0646447465
],
"textEmbedding": [
0.0757875815,
[...256 dimension vector...]
-0.02749932
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}512 个维度:
{
"predictions": [
{
"imageEmbedding": [
-0.0523675755,
[...512 dimension vector...]
-0.0444030389
],
"textEmbedding": [
-0.0592851527,
[...512 dimension vector...]
0.0350437127
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
Go
获取图片和文本嵌入 (multimodalembedding@001)
使用以下代码示例发送包含图片和数据的嵌入请求。这些示例展示了如何同时发送这两种数据类型的请求,但您也可以将该服务用于个别数据类型。
获取文本和图片嵌入
REST
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID。
-
TEXT:要获取嵌入的目标文本。例如
a cat。 - B64_ENCODED_IMG:要获取嵌入的目标图片。图片必须指定为 base64 编码的字节字符串。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
请求 JSON 正文:
{
"instances": [
{
"text": "TEXT",
"image": {
"bytesBase64Encoded": "B64_ENCODED_IMG"
}
}
]
}
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
{
"predictions": [
{
"textEmbedding": [
0.010477379,
-0.00399621,
0.00576670747,
[...]
-0.00823613815,
-0.0169572588,
-0.00472954148
],
"imageEmbedding": [
0.00262696808,
-0.00198890246,
0.0152047109,
-0.0103145819,
[...]
0.0324628279,
0.0284924973,
0.011650892,
-0.00452344026
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
Node.js
试用此示例之前,请按照Agent Platform 快速入门:使用客户端库中的 Node.js 设置说明进行操作。如需了解详情,请参阅 Agent Platform Node.js API 参考文档。
如需向代理平台进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
试用此示例之前,请按照Agent Platform 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 Agent Platform Java API 参考文档。
如需向代理平台进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
试用此示例之前,请按照Agent Platform 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 Agent Platform Go API 参考文档。
如需向代理平台进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
获取视频、图片或文本嵌入 (multimodalembedding@001)
发送嵌入请求时,您可以单独指定输入视频,也可以指定视频、图片和文本数据的组合。
视频嵌入模式
有三种模式可用于视频嵌入:Essential、Standard 或 Plus。该模式与生成的嵌入的密度相对应,可以由请求中的 interval_sec 配置指定。对于时长为 interval_sec 的每个视频间隔,系统会生成一个嵌入。视频间隔时长下限为 4 秒。间隔时长超过 120 秒可能会对生成的嵌入的质量产生负面影响。
视频嵌入的价格取决于您使用的模式。如需了解详情,请参阅价格。
下表总结了可用于视频嵌入的三种模式:
| 模式 | 每分钟的嵌入数上限 | 视频嵌入间隔(最小值) |
|---|---|---|
| Essential | 4 | 15 这对应于: intervalSec >= 15 |
| 标准 | 8 | 8 这对应于:8 <= intervalSec < 15 |
| Plus | 15 | 4 这对应于:4 <= intervalSec < 8 |
视频嵌入最佳实践
发送视频嵌入请求时,请考虑以下事项:
如需为任意时长的输入视频的前两分钟生成单个嵌入,请使用以下
videoSegmentConfig设置:request.json:// other request body content "videoSegmentConfig": { "intervalSec": 120 } // other request body content如需为时长超过两分钟的视频生成嵌入,您可以发送多个在
videoSegmentConfig中指定开始时间和结束时间的请求:request1.json:// other request body content "videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120 } // other request body contentrequest2.json:// other request body content "videoSegmentConfig": { "startOffsetSec": 120, "endOffsetSec": 240 } // other request body content获取视频嵌入
使用以下示例单独获取视频内容的嵌入。
REST
以下示例使用位于 Cloud Storage 中的视频。您还可以使用 video.bytesBase64Encoded 字段提供视频的 base64 编码字符串表示形式。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID。
-
VIDEO_URI:要为其获取嵌入的目标视频的 Cloud Storage URI。例如:
gs://my-bucket/embeddings/supermarket-video.mp4。您还可以以 base64 编码的字节字符串形式提供视频:
[...] "video": { "bytesBase64Encoded": "B64_ENCODED_VIDEO" } [...] -
videoSegmentConfig(START_SECOND、END_SECOND、INTERVAL_SECONDS)。可选。为其生成嵌入的特定视频片段(以秒为单位)。例如:
[...] "videoSegmentConfig": { "startOffsetSec": 10, "endOffsetSec": 60, "intervalSec": 10 } [...]使用此配置可指定从 10 秒到 60 秒的视频数据,并为以下 10 秒的视频间隔生成嵌入:[10, 20)、[20, 30)、[30, 40)、[40, 50)、[50, 60)。此视频间隔 (
"intervalSec": 10) 属于 标准视频嵌入模式,您按标准模式价格费率计费。如果省略
videoSegmentConfig,则服务使用以下默认值:"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }。此视频间隔 ("intervalSec": 16) 属于基本视频嵌入模式,用户按基本模式价格费率计费。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
请求 JSON 正文:
{
"instances": [
{
"video": {
"gcsUri": "VIDEO_URI",
"videoSegmentConfig": {
"startOffsetSec": START_SECOND,
"endOffsetSec": END_SECOND,
"intervalSec": INTERVAL_SECONDS
}
}
}
]
}
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
响应(7 秒视频,未指定 videoSegmentConfig):
{
"predictions": [
{
"videoEmbeddings": [
{
"endOffsetSec": 7,
"embedding": [
-0.0045467657,
0.0258095954,
0.0146885719,
0.00945400633,
[...]
-0.0023291884,
-0.00493789,
0.00975185353,
0.0168156829
],
"startOffsetSec": 0
}
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}响应(59 秒视频,采用以下视频片段配置:"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 60, "intervalSec": 10 }):
{
"predictions": [
{
"videoEmbeddings": [
{
"endOffsetSec": 10,
"startOffsetSec": 0,
"embedding": [
-0.00683252793,
0.0390476175,
[...]
0.00657121744,
0.013023301
]
},
{
"startOffsetSec": 10,
"endOffsetSec": 20,
"embedding": [
-0.0104404651,
0.0357737206,
[...]
0.00509833824,
0.0131902946
]
},
{
"startOffsetSec": 20,
"embedding": [
-0.0113538112,
0.0305239167,
[...]
-0.00195809244,
0.00941874553
],
"endOffsetSec": 30
},
{
"embedding": [
-0.00299320649,
0.0322436653,
[...]
-0.00993082579,
0.00968887936
],
"startOffsetSec": 30,
"endOffsetSec": 40
},
{
"endOffsetSec": 50,
"startOffsetSec": 40,
"embedding": [
-0.00591270532,
0.0368893594,
[...]
-0.00219071587,
0.0042470959
]
},
{
"embedding": [
-0.00458270218,
0.0368121453,
[...]
-0.00317760976,
0.00595594104
],
"endOffsetSec": 59,
"startOffsetSec": 50
}
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
Go
试用此示例之前,请按照Agent Platform 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 Agent Platform Go API 参考文档。
如需向代理平台进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
获取图片、文本和视频嵌入
使用以下示例获取视频、文本和图片内容的嵌入。
REST
以下示例使用图片、文本和视频数据。您可以在请求正文中使用这些数据类型的任意组合。
此外,此示例还会使用 Cloud Storage 中的视频。您还可以使用 video.bytesBase64Encoded 字段提供视频的 base64 编码字符串表示形式。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID。
-
TEXT:要获取嵌入的目标文本。例如
a cat。 -
IMAGE_URI:要获取其嵌入的目标图片的 Cloud Storage URI。例如,
gs://my-bucket/embeddings/supermarket-img.png。您还可以以 base64 编码的字节字符串形式提供图片:
[...] "image": { "bytesBase64Encoded": "B64_ENCODED_IMAGE" } [...] -
VIDEO_URI:要为其获取嵌入的目标视频的 Cloud Storage URI。例如,
gs://my-bucket/embeddings/supermarket-video.mp4。您还可以以 base64 编码的字节字符串形式提供视频:
[...] "video": { "bytesBase64Encoded": "B64_ENCODED_VIDEO" } [...] -
videoSegmentConfig(START_SECOND、END_SECOND、INTERVAL_SECONDS)。可选。为其生成嵌入的特定视频片段(以秒为单位)。例如:
[...] "videoSegmentConfig": { "startOffsetSec": 10, "endOffsetSec": 60, "intervalSec": 10 } [...]使用此配置可指定从 10 秒到 60 秒的视频数据,并为以下 10 秒的视频间隔生成嵌入:[10, 20)、[20, 30)、[30, 40)、[40, 50)、[50, 60)。此视频间隔 (
"intervalSec": 10) 属于 标准视频嵌入模式,您按标准模式价格费率计费。如果省略
videoSegmentConfig,则服务使用以下默认值:"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }。此视频间隔 ("intervalSec": 16) 属于基本视频嵌入模式,用户按基本模式价格费率计费。
HTTP 方法和网址:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
请求 JSON 正文:
{
"instances": [
{
"text": "TEXT",
"image": {
"gcsUri": "IMAGE_URI"
},
"video": {
"gcsUri": "VIDEO_URI",
"videoSegmentConfig": {
"startOffsetSec": START_SECOND,
"endOffsetSec": END_SECOND,
"intervalSec": INTERVAL_SECONDS
}
}
}
]
}
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
将请求正文保存在名为 request.json 的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
{
"predictions": [
{
"textEmbedding": [
0.0105433334,
-0.00302835181,
0.00656806398,
0.00603460241,
[...]
0.00445805816,
0.0139605571,
-0.00170318608,
-0.00490092579
],
"videoEmbeddings": [
{
"startOffsetSec": 0,
"endOffsetSec": 7,
"embedding": [
-0.00673126569,
0.0248149596,
0.0128901172,
0.0107588246,
[...]
-0.00180952181,
-0.0054573305,
0.0117037306,
0.0169312079
]
}
],
"imageEmbedding": [
-0.00728622358,
0.031021487,
-0.00206603738,
0.0273937676,
[...]
-0.00204976718,
0.00321615417,
0.0121978866,
0.0193375275
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
如需了解如何安装或更新 Vertex AI SDK for Python,请参阅安装 Vertex AI SDK for Python。 如需了解详情,请参阅 Python API 参考文档。
Go
试用此示例之前,请按照Agent Platform 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 Agent Platform Go API 参考文档。
如需向代理平台进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
后续步骤
- 阅读博客“什么是多模式搜索:‘有远见的法学硕士’改变业务”。
- 如需了解纯文本用例(基于文本的语义搜索、聚类、长文档分析以及其他文本检索或问答用例),请参阅获取文本嵌入。
- 在 Model Garden 中探索更多预训练模型。
- 了解 Gemini Enterprise Agent Platform 中的 Responsible AI 最佳实践和安全过滤条件。