En esta página, se proporciona un flujo de trabajo de ejemplo que muestra cómo funciona la embedding()
función junto
con los datos almacenados en la tabla y la función pgvector. En el ejemplo, se usan entradas de texto sin formato para recuperar un resultado de una base de datos que depende del análisis semántico del significado del texto basado en un modelo de lenguaje grande (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
itemscontiene una columna,complaints. En esta columnaTEXT, se almacenan los reclamos del comprador que se registran sobre cada artículo.La base de datos se integra en Model Garden de Vertex AI, lo que le otorga acceso a los modelos en inglés
text-embedding.
Aunque esta base de datos almacena reclamos sobre artículos, tales reclamos se almacenan como texto sin formato, lo que dificulta las consultas. Por ejemplo, si deseas ver qué artículos tienen más reclamos de los clientes que recibieron un color de producto incorrecto, puedes realizar consultas en SQL comunes en la tabla, en la que se busquen varias coincidencias de palabras clave. Sin embargo, este enfoque solo coincide con las filas que contienen esas palabras clave exactas.
Por ejemplo, una consulta en SQL básica, como SELECT * FROM item WHERE complaints LIKE
"%wrong color%", no muestra una fila en la que el campo complaints solo contiene
The picture shows a blue one, but the one I received was red.
Las consultas en SQL que usan embeddings con tecnología de LLM pueden ayudar a cerrar esta brecha. Mediante la aplicación de embeddings, puedes consultar la tabla de este ejemplo en busca de artículos en los que los reclamos tengan similitud semántica con un mensaje de texto determinado, como “era el color incorrecto”.
En los siguientes pasos, se muestra cómo habilitar esta opción en la configuración de ejemplo descrita antes.
Antes de comenzar
Asegúrate de cumplir con 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 de AlloyDB.
Extensión
google_ml_integrationExtensión
vector, versión0.5.0.google-1o posterior
Para obtener más información sobre la instalación y la administración de extensiones, consulta Configura extensiones de base de datos.
- Establece el parámetro
google_ml_integration.enable_model_supportde la base de datos enoff.
Configura el acceso al modelo
Antes de generar embeddings desde una base de datos de AlloyDB, debes configurar AlloyDB para que funcione con un modelo de embeddings de texto.
Para trabajar con el modelo text-embedding-005 basado en la nube, debes
integrar tu base de datos a Vertex AI.
Prepara la tabla
Antes de ejecutar consultas basadas en LLM en el contenido de la tabla items, debes preparar la tabla para almacenar y, luego, indexar los embeddings en función de tus datos existentes.
Crea una columna para almacenar embeddings
Agrega una columna a la tabla para almacenar embeddings.
ALTER TABLE items ADD COLUMN complaint_embedding vector(768);
En este ejemplo, se especifica 768 como argumento porque esa es la cantidad de dimensiones que admiten los modelos en inglés text-embedding-005. Para obtener más información, consulta
Genera un embedding.
En el ejemplo, se aplica el tipo de datos vector a la columna para facilitar el uso de
pgvector funciones y operadores con sus valores.
Propaga la columna nueva
Si ya tienes embeddings en formato CSV, sigue los pasos que se indican en Almacena embeddings de vectores para almacenar tus embeddings.
De manera opcional, usa la función embedding() para propagar esta columna nueva con embeddings en caso de que tengas texto almacenado en la columna complaints. En esta configuración de ejemplo, AlloyDB genera los embeddings con el modelo text-embedding, versión 005.
UPDATE items SET complaint_embedding = embedding('text-embedding-005', complaints);
En este ejemplo, se convierte implícitamente el valor de devolución real[] de embedding() en un valor vector para almacenar el valor en la columna vector creada anteriormente.
Crea un índice
Para mejorar el rendimiento, agrega un índice a items que use las técnicas de cuantización escalar.
CREATE INDEX complaint_embed_idx ON items
USING scann (complaint_embedding l2)
WITH (num_leaves=20);
Para obtener más información sobre cómo crear un índice de ScaNN, consulta Crea índices y consulta vectores.
Ejecuta consultas con tecnología de LLM con el texto proporcionado
Ahora puedes hacer consultas semánticas más cercanas en la tabla items. En la
siguiente consulta, se usa el operador <-> que proporciona pgvector para ordenar las
filas de la tabla según la proximidad semántica al texto It was the wrong color y mostrar los diez reclamos 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('text-embedding-005', 'It was the wrong color') LIMIT 10;
¿Qué sigue?
- Para obtener otro flujo de trabajo de ejemplo que involucre a AlloyDB y
pgvector, consulta Crea apps potenciadas por IA en Google Cloud bases de datos con pgvector, LLM y LangChain.