带有元数据的向量搜索嵌入

本指南提供有关向量嵌入可选元数据的信息。借助 Vector Search,您可以为每个嵌入定义元数据。

元数据是不可过滤的任意信息,向量搜索可以为每个嵌入存储这些信息。这可以提供包含实用上下文的嵌入,例如:

  • 商品详情,例如名称、价格和图片网址。

  • 文本嵌入的说明、摘要、日期和作者信息。

  • 用户嵌入的用户信息。

  • 地点嵌入的坐标。

主要功能和优势

使用元数据的功能和优势包括:

  • 包含结果的上下文:信息可以直接在搜索结果中提供,无需单独查找,从而缩短延迟时间。

  • 灵活的结构:元数据以 JSON 对象的形式提供,因此可以将元数据定义为复杂的嵌套数据。

  • 不可过滤:向量嵌入元数据用于存储和检索与 restrictsnumeric_restricts 不同的不可过滤信息。

  • 高效更新:借助 update_mask 字段,您可以指定 API 更新元数据,以避免重新提交嵌入向量。

  • 解耦信息:不可过滤的信息可以与可过滤的属性(例如 restricts)分开。

  • 简化开发流程:搜索响应包含与向量嵌入相关联的元数据,同时降低了显示富媒体搜索结果和执行基于上下文的后处理等功能所需的复杂性。

数据格式

可选的 embedding_metadata 字段包含一个 JSON 对象,用于灵活地将丰富的不可过滤信息与向量搜索中的嵌入相关联。这可以通过返回包含结果的上下文来简化应用,并允许使用 update_maskupsertDatapoints API 进行高效的仅元数据更新。

数据点结构示例:

    {
        "id": "movie_001",
        "embedding": [0.1, 0.2, ..., 0.3],
        "sparse_embedding": {
            "values": [-0.4, 0.2, -1.3],
            "dimensions": [10, 20, 30]
        },
        "numeric_restricts": [{'namespace': 'year', 'value_int': 2022}],
        "restricts": [{'namespace': 'genre', 'allow': ['action', 'comedy']}],

        # --- New embedding_metadata field ---
        "embedding_metadata": {
            "title": "Ballet Train",
            "runtime": {
                "hours": 2,
                "minutes": 6
            },
            "review_info": {
                "review": "This movie is fun and...",
                "rotten_potatoes_rating": 76
            }
        }
        # ------------------------------------
    },
    # ... other data points

使用 embedding_metadata 提取数据

添加数据点时,您可以在发生以下任一操作时添加 embedding_metadata

  • 上传文件 (Cloud Storage):
    • 使用 JSONAVRO 格式embedding_metadata 不支持 CSV
  • 使用 upsertDatapoints API:
    • 在 API 请求载荷中传递数据点对象(包括 embedding_metadata)。

在查询期间检索 embedding_metadata

使用 findNeighbors API 执行标准最近邻搜索时,如果将 returnFullDatapoint 设置为 True,则响应中会自动包含每个邻居的 embedding_metadata 字段。

curl

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${PUBLIC_ENDPOINT_DOMAIN}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexEndpoints/${INDEX_ENDPOINT_ID}:findNeighbors" \
-d '{deployedIndexId:"${DEPLOYED_INDEX_ID}", "queries":[{datapoint:{"featureVector":"<FEATURE_VECTOR>"}}], returnFullDatapoint:true}'

正在更新“embedding_metadata

使用 upsertDatapoints API 和一个使用值 embedding_metadataupdate_mask 来更新元数据。update_mask 字段可能还包含其他掩码值。如需了解字段掩码的用途,请参阅更新嵌入元数据

update_mask 字段有助于确保仅更新 embedding_metadata,避免重新提交限制字段和嵌入字段。

以下示例演示了如何定义和更新元数据以创建定向 IndexDatapoint,指定 update_mask,以及调用 upsertDatapoints

curl

curl -H "Content-Type: application/json" -H "Authorization: Bearer `gcloud auth print-access-token`" https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/indexes/${INDEX_ID}:upsertDatapoints \
-d '{
datapoints:[
    {
        datapoint_id: "'${DATAPOINT_ID_1}'",
        feature_vector: [...],
        embedding_metadata:{"title": "updated title", "rating": 4.5, "tags": ["updated", "reviewed"]
    }, update_mask: "embedding_metadata"}'