En esta página, se proporciona un ejemplo de flujo de trabajo que muestra cómo la función embedding()
funciona junto con tus 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
items
contiene una columna,complaints
. En esta columnaTEXT
, se almacenan los reclamos del comprador registrados sobre cada artículo.La base de datos se integra en Vertex AI Model Garden, lo que le otorga acceso a los modelos en inglés de
textembedding-gecko
.
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 cuyos 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 que se describió 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.
google_ml_integration
extensiónExtensión
vector
, versión0.5.0.google-1
o posterior
Para obtener más información sobre la instalación y administración de extensiones, consulta Configura extensiones de bases de datos.
- Establece la marca de base de datos
google_ml_integration.enable_model_support
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 textembeddings-gecko
basado en la nube, debes
integrar tu base de datos con
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, ya que esa es la cantidad de dimensiones que admiten los modelos en inglés de textembedding-gecko
. 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 funciones y operadores pgvector
con sus valores.
Propaga la columna nueva
Si ya tienes incorporaciones en formato CSV
, sigue los pasos que se indican en Almacena incorporaciones de vectores para almacenarlas.
De forma opcional, usa la función embedding()
para propagar esta columna nueva con
incorporaciones en caso de que tengas texto almacenado en la columnacomplaints
. En esta
configuración de ejemplo,
AlloyDB genera las incorporaciones 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 que se muestra real[]
de embedding()
en un valor vector
para almacenarlo en la columna vector
creada antes.
Crea un índice
Para mejorar el rendimiento, agrega un índice a items
que use las técnicas de cuantificació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 vecino más cercano aproximados, consulta Indexación.
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 las diez quejas 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;
¿Qué sigue?
- Para ver otro ejemplo de flujo de trabajo que involucra AlloyDB y
pgvector
, consulta Crea apps potenciadas por IA en Google Cloud con pgvector, LLM y LangChain.