1 Ejemplo de flujo de trabajo de una incrustación Selecciona una versión de la documentación:

En esta página se proporciona un ejemplo de flujo de trabajo que muestra cómo funciona la función embedding() junto con los datos almacenados en tu tabla y la función pgvector. En este ejemplo, se utiliza una entrada de texto sin formato para obtener un resultado de una base de datos que usa un análisis semántico del significado del texto basado en un modelo de lenguaje extenso (LLM).

Situación de ejemplo

Imagina una base de datos que se ejecuta en AlloyDB con los siguientes aspectos:

  • La base de datos contiene una tabla, items. Cada fila de esta tabla describe un artículo que vende tu empresa.

  • La tabla items contiene una columna, complaints. En esta columna TEXT se almacenan las reclamaciones de los compradores registradas sobre cada artículo.

  • La base de datos se integra con Vertex AI Model Garden, lo que le da acceso a los modelos en textembedding-geckoinglés.

Aunque esta base de datos almacena reclamaciones sobre artículos, estas reclamaciones se almacenan como texto sin formato, lo que dificulta las consultas. Por ejemplo, si quieres ver qué artículos han recibido más quejas de clientes que han recibido un producto de un color incorrecto, puedes realizar consultas de SQL normales en la tabla y buscar varias coincidencias de palabras clave. Sin embargo, este enfoque solo coincide con las filas que contienen esas palabras clave exactas.

Por ejemplo, una consulta SQL básica como SELECT * FROM item WHERE complaints LIKE "%wrong color%" no devuelve una fila cuyo campo complaints contenga solo The picture shows a blue one, but the one I received was red.

Las consultas de SQL que usan incrustaciones basadas en LLMs pueden ayudar a salvar esta distancia. Si aplicas las inserciones, puedes consultar la tabla de este ejemplo para buscar los artículos cuyas reclamaciones tengan una similitud semántica con una petición de texto determinada, como "No era del color correcto".

En los siguientes pasos se muestra cómo habilitar esta opción en la configuración de ejemplo descrita anteriormente.

Antes de empezar

Asegúrate de que cumples los siguientes requisitos:

Extensión de base de datos obligatoria

  • Asegúrate de que las siguientes extensiones estén instaladas en tu base de datos AlloyDB.

    • google_ml_integration extensión

    • Extensión vector, versión 0.5.0.google-1 o posterior

Para obtener más información sobre cómo instalar y gestionar extensiones, consulta Configurar extensiones de bases de datos.

  • Define la marca de base de datos google_ml_integration.enable_model_support en off.

Configurar el acceso a modelos

Antes de generar embeddings a partir de una base de datos de AlloyDB, debes configurar AlloyDB para que funcione con un modelo de embeddings de texto.

Para trabajar con el modelo textembeddings-gecko basado en la nube, debes integrar tu base de datos con Vertex AI.

Preparar la tabla

Antes de ejecutar consultas basadas en LLMs en el contenido de la tabla items, debes preparar la tabla para almacenar e indexar las inserciones basadas en tus datos.

Crear una columna para almacenar las inserciones

Añade una columna a la tabla para almacenar las inserciones.

ALTER TABLE items ADD COLUMN complaint_embedding vector(768);

En este ejemplo se especifica 768 como argumento, ya que es el número de dimensiones admitidas por los modelos en inglés de textembedding-gecko. Para obtener más información, consulta Generar una inserción.

En el ejemplo se aplica el tipo de datos vector a la columna para facilitar el uso de las funciones y los operadores pgvector con sus valores.

Rellena la nueva columna

Si ya tienes incrustaciones en formato CSV, sigue los pasos que se indican en Almacenar incrustaciones vectoriales para almacenarlas.

También puede usar la función embedding() para rellenar esta nueva columna con las inserciones si tiene texto almacenado en la columna complaints. En esta configuración de ejemplo, AlloyDB genera las incrustaciones con el modelo textembedding-gecko, versión 003.

UPDATE items SET complaint_embedding = embedding('textembedding-gecko@003', complaints);

En este ejemplo, se convierte implícitamente el valor de retorno real[] de embedding() en un valor vector para almacenar el valor en la columna vector creada anteriormente.

Crear un índice

Para mejorar el rendimiento, añade un índice a items que use las técnicas de cuantización escalar.

CREATE INDEX complaint_embed_idx ON items
  USING ivf (complaint_embedding vector_l2_ops)
  WITH (lists = 20, quantizer = 'SQ8');

Para obtener más información sobre cómo crear índices de vecinos más próximos aproximados, consulta Indexación.

Ejecutar consultas basadas en LLMs con el texto proporcionado

Ahora puedes hacer consultas semánticas de vecinos más cercanos en la tabla items. La siguiente consulta usa el operador <-> proporcionado por pgvector para ordenar las filas de la tabla según su proximidad semántica al texto It was the wrong color y devolver las diez reclamaciones principales. La consulta muestra los valores id y name de la primera fila ordenada.

SELECT id, name FROM items
  ORDER BY complaint_embedding::vector
  <-> embedding('textembedding-gecko@003', 'It was the wrong color') LIMIT 10;

Siguientes pasos