Incrustaciones de búsqueda de vectores con metadatos

En esta guía se proporciona información sobre los metadatos opcionales de las inserciones vectoriales. La búsqueda de vectores te permite definir metadatos para cada incrustación.

Los metadatos son información arbitraria que no se puede filtrar y que Vector Search puede almacenar para cada inserción. De esta forma, se pueden proporcionar inserciones con contexto útil, como:

  • Detalles del producto, como el nombre, el precio y la URL de una imagen.

  • Descripciones, fragmentos, fechas y autoría de las incrustaciones de texto.

  • Información de usuario para las inserciones de usuario.

  • Coordenadas de las inserciones de sitios.

Características y ventajas principales

Estas son algunas de las funciones y ventajas de usar metadatos:

  • Contexto con resultados: la información se puede proporcionar directamente en los resultados de búsqueda, lo que elimina la necesidad de realizar búsquedas independientes y reduce la latencia.

  • Estructura flexible: los metadatos se proporcionan como un objeto JSON, lo que permite que se definan como datos complejos y anidados.

  • No se puede filtrar: los metadatos de las incrustaciones de vectores se usan para almacenar y recuperar información que no se puede filtrar y que es distinta de restricts y numeric_restricts.

  • Actualizaciones eficientes: el campo update_mask te permite especificar que las APIs solo actualicen los metadatos para evitar volver a enviar los vectores de inserción.

  • Información desacoplada: la información que no se puede filtrar se puede separar de los atributos que sí se pueden filtrar, como restricts.

  • Desarrollo optimizado: las respuestas de búsqueda incluyen metadatos asociados a una inserción de vector, lo que reduce la complejidad necesaria para funciones como mostrar resultados de búsqueda enriquecidos y realizar un posprocesamiento basado en el contexto.

Formato de datos

El campo embedding_metadata opcional contiene un objeto JSON que asocia de forma flexible información enriquecida y no filtrable con las inserciones en la búsqueda de vectores. De esta forma, se pueden optimizar las aplicaciones, ya que se devuelve el contexto con los resultados, y se pueden hacer actualizaciones eficientes solo de metadatos mediante update_mask para la API upsertDatapoints.

Estructura de un punto de datos de ejemplo:

    {
        "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

Ingerir datos con embedding_metadata

Al añadir puntos de datos, puedes incluir embedding_metadata cuando se produzca una de las siguientes acciones:

  • Subir un archivo (Cloud Storage):
  • Con la API upsertDatapoints:
    • Transfiere objetos de punto de datos (incluido embedding_metadata) en la carga útil de la solicitud a la API.

Obtener embedding_metadata durante las consultas

Cuando se realiza una búsqueda estándar de vecinos más cercanos mediante la API findNeighbors, el campo embedding_metadata de cada vecino se incluye automáticamente en la respuesta si returnFullDatapoint se define como True.

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}'

Actualizando embedding_metadata

Actualiza los metadatos con la API upsertDatapoints y un update_mask con el valor embedding_metadata. El campo update_mask también puede incluir valores de máscara adicionales. Para ver los usos de una máscara de campo, consulta Actualizar metadatos de inserciones.

El campo update_mask ayuda a asegurarse de que solo se actualice embedding_metadata, lo que evita que se vuelvan a enviar los campos de restricción e inserción.

En el siguiente ejemplo se muestra cómo definir y actualizar metadatos para crear un IndexDatapoint específico, especificar update_mask y llamar a 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"}'