1
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 columnaTEXT
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-gecko
inglé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ónExtensión
vector
, versión0.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
enoff
.
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
- Para ver otro ejemplo de flujo de trabajo que incluya AlloyDB y
pgvector
, consulta Crear aplicaciones basadas en IA en bases de datos Google Cloud con pgvector, LLMs y LangChain.