Ejecuta una búsqueda de similitud de vectores

En este documento, se explica cómo realizar búsquedas de similitud de vectores en AlloyDB para PostgreSQL con la extensión pgvector. La búsqueda de similitud vectorial, también conocida como búsqueda de vecino más cercano, te permite encontrar los datos de tus datos que son más similares a un vector de consulta determinado.

Puedes consultar tu base de datos de AlloyDB en busca de vectores semánticamente similares después de almacenar y indexar las incorporaciones. Usa las funciones de consulta pgvector para encontrar los vecinos más cercanos de un vector de incorporación.

Para obtener más información sobre el almacenamiento de embeddings de vectores y la creación de un índice, consulta Almacena embeddings de vectores y Crea índices, respectivamente.

Para ejecutar una búsqueda de similitud, especifica la tabla, la columna de incorporación, la función de distancia, la incorporación objetivo y la cantidad de filas que se mostrarán. También puedes usar la función embedding() para traducir texto a un vector y, luego, comparar el vector con las incorporaciones almacenadas con operadores pgvector.

Para encontrar los vecinos semánticos más cercanos de un vector de incorporación, puedes ejecutar la siguiente consulta de ejemplo, en la que estableces la misma función de distancia que usaste durante la creación del índice.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

Reemplaza lo siguiente:

  • TABLE: La tabla que contiene la incorporación con la que se compara el texto.

  • EMBEDDING_COLUMN: la columna que contiene las incorporaciones almacenadas.

  • DISTANCE_FUNCTION_QUERY: Es la función de distancia que se usará con esta consulta. Elige una de las siguientes opciones según la función de distancia que se usó cuando se creó el índice:

    • Distancia de L2: <->

    • Producto interno: <#>

    • Distancia de coseno: <=>

  • EMBEDDING: Es el vector de incorporación del que deseas encontrar los vecinos semánticos almacenados más cercanos.

  • ROW_COUNT: cantidad de filas que se mostrarán.

    Especifica 1 si solo deseas la mejor coincidencia.

Para obtener más información sobre otros ejemplos de consultas, consulta Consultas.

También puedes usar la función embedding() para convertir el texto en un vector. La extensión pgvector de PostgreSQL estándar se personaliza para AlloyDB y se conoce como vector. Aplicas el vector a uno de los operadores de vecino más cercano pgvector, por ejemplo, <-> para la distancia L2, para encontrar las filas de la base de datos con las incorporaciones más semánticamente similares.

Debido a que embedding() muestra un array real, debes convertir de forma explícita la llamada embedding() a vector para usar estos valores con operadores pgvector.

  CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Reemplaza lo siguiente:

  • MODEL_ID: el ID del modelo que se consultará.

    Si usas Vertex AI Model Garden, especifica text-embedding-005 como el ID del modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incorporaciones de texto. Para obtener más información, consulta Incorporaciones de texto.

  • Opcional: VERSION_TAG: Es la etiqueta de la versión del modelo que se consultará. Agrega @ a la etiqueta.

    Si usas uno de los modelos en inglés text-embedding-005 con Vertex AI, especifica una de las etiquetas de versión, por ejemplo, text-embedding-005, que se enumera en Versiones del modelo.

    Google recomienda que siempre especifiques la etiqueta de versión. Si no especificas la etiqueta de versión, AlloyDB usa la versión más reciente del modelo, lo que podría generar resultados inesperados.

  • TEXT: es el texto que se traducirá en una embedding de vector.

¿Qué sigue?