En esta página se explica cómo usar AlloyDB como herramienta de modelo de lenguaje extenso (LLM) y cómo generar inserciones de vectores basadas en un LLM.
Para obtener más información sobre cómo usar modelos de aprendizaje automático con AlloyDB Omni, consulta el artículo Crea aplicaciones de IA generativa.
AlloyDB te permite usar un LLM alojado en Vertex AI para traducir una cadena de texto en una inserción, que es la representación del modelo del significado semántico del texto dado como un vector numérico. Para obtener más información sobre la compatibilidad de Vertex AI con las inserciones de texto, consulta Inserciones de texto.
Antes de empezar
Para permitir que AlloyDB genere las inserciones, asegúrese de que cumple los siguientes requisitos:
Restricciones regionales
Puedes generar embeddings en las regiones en las que esté disponible la IA generativa en Vertex AI. Para ver una lista de las regiones, consulta Ubicaciones de la IA generativa en Vertex AI .
En el caso de AlloyDB, asegúrate de que tanto el clúster de AlloyDB como el modelo de Vertex AI que estás consultando se encuentren en la misma región.
Extensión de base de datos obligatoria
Asegúrate de que la extensión
google_ml_integration
esté instalada en tu base de datos AlloyDB.CREATE EXTENSION google_ml_integration;
Esta extensión se incluye con AlloyDB. Puedes instalarlo en cualquier base de datos de tu clúster.
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 instalar AlloyDB Omni con AlloyDB AI.
Conceder acceso a los usuarios de la base de datos para generar inserciones
Concede permiso a los usuarios de la base de datos para ejecutar la embedding
función para hacer predicciones:
Conecta un cliente
psql
a la instancia principal del clúster, tal como se describe en Ejecutar y conectarse a AlloyDB Omni.En el símbolo del sistema de psql, conéctate a la base de datos y concede permisos:
\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
Haz los cambios siguientes:
DB_NAME: el nombre de la base de datos en la que se deben conceder los permisos
USER_NAME: el nombre del usuario al que se deben conceder los permisos.
Generar una inserción
AlloyDB proporciona una función que te permite traducir texto en una incrustación de vector. Después, puedes almacenar esa inserción en tu base de datos como datos de vector y, opcionalmente, usar funciones pgvector
para basar las consultas en ella.
Para generar una inserción con AlloyDB, usa la función embedding()
proporcionada por la extensión google_ml_integration
:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Haz los cambios siguientes:
MODEL_ID
: ID del modelo que se va a consultar.Si usas Vertex AI Model Garden, especifica
textembedding-gecko@003
como ID de modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incrustaciones de texto. Para obtener más información, consulta Inserciones de texto.Opcional:
VERSION_TAG
es la etiqueta de versión del modelo que se va a consultar. Añade el prefijo@
a la etiqueta.Si usas uno de los modelos en inglés de
textembedding-gecko
con Vertex AI, especifica una de las etiquetas de versión (por ejemplo,textembedding-gecko@003
) que se indican en Versiones del modelo.Google recomienda encarecidamente que siempre especifique la etiqueta de versión. Si no especificas la etiqueta de versión, AlloyDB siempre usará la versión más reciente del modelo, lo que podría dar lugar a resultados inesperados.
TEXT
: el texto que se va a traducir a una incrustación de vector.
En el siguiente ejemplo se usa la versión 003
de los modelos en inglés textembedding-gecko
para generar una inserción basada en una cadena literal proporcionada:
SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Almacenar incrustaciones
Las inserciones generadas con la extensión google_ml_integration
se implementan como arrays de valores real
.
Estas inserciones generadas se transfieren como entradas para las funciones de la extensión pgvector
.
Para almacenar este valor en una tabla, añade una columna real[]
:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Después de crear una columna para almacenar las inserciones, puede rellenarla en función de los valores que ya estén almacenados en otra columna de la misma tabla:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Haz los cambios siguientes:
TABLE
: el nombre de la tablaEMBEDDING_COLUMN
: el nombre de la columna de inserciones
MODEL_ID
: ID del modelo que se va a consultar.Si usas Vertex AI Model Garden, especifica
textembedding-gecko@003
como ID de modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incrustaciones de texto. Para obtener más información, consulta Inserciones de texto.Opcional:
VERSION_TAG
es la etiqueta de versión del modelo que se va a consultar. Añade el prefijo@
a la etiqueta.Si usas uno de los modelos en inglés de
textembedding-gecko
con Vertex AI, especifica una de las etiquetas de versión (por ejemplo,textembedding-gecko@003
) que se indican en Versiones del modelo.Google recomienda encarecidamente que siempre especifique la etiqueta de versión. Si no especificas la etiqueta de versión, AlloyDB siempre usará la versión más reciente del modelo, lo que podría dar lugar a resultados inesperados.
SOURCE_TEXT_COLUMN
: el nombre de la columna que almacena el texto que se va a traducir en inserciones
Realizar una búsqueda por similitud
También puedes usar la función embedding()
para traducir el texto a un vector. Aplica el vector al operador de pgvector
vecino más cercano<->
para encontrar las filas de la base de datos con las inserciones semánticamente más similares.
Como embedding()
devuelve una matriz real
, debes convertir explícitamente la llamada embedding()
a vector
para usar estos valores con operadores pgvector
.
CREATE EXTENSION google_ml_integration;
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
Usar etiquetas de versión del modelo para evitar errores
Google recomienda encarecidamente que siempre utilices una versión estable del modelo de inserciones que elijas. En la mayoría de los modelos, esto significa definir explícitamente una etiqueta de versión.
Llamar a la función embedding()
sin especificar la etiqueta de versión del modelo es sintácticamente válido, pero también es propenso a errores.
Si omites la etiqueta de versión al usar un modelo en Vertex AI Model Garden, Vertex AI usará la versión más reciente del modelo. Puede que no sea la última versión estable. Para obtener más información sobre las versiones de modelos de Vertex AI disponibles, consulta Versiones de modelos.
Una versión de modelo de Vertex AI siempre devuelve la misma respuesta embedding()
a una entrada de texto determinada. Si no especificas versiones de modelo en tus llamadas a embedding()
, una nueva versión de modelo publicada puede cambiar de forma abrupta el vector devuelto para una entrada determinada, lo que puede provocar errores u otro comportamiento inesperado en tus aplicaciones.
Para evitar estos problemas, especifica siempre la versión del modelo.
Solucionar problemas
ERROR: No se ha encontrado el modelo con el ID model_id
Mensaje de error
Cuando intentas generar una inserción mediante la función embedding()
o google_ml.embedding()
, se produce el siguiente error:
ERROR: 'Model not found for model_id:
Corrección recomendada
Actualiza la extensión
google_ml_integration
y vuelve a generar las inserciones.ALTER EXTENSION google_ml_integration UPDATE;
También puedes eliminar la extensión y volver a crearla.
DROP extension google_ml_integration; CREATE EXTENSION google_ml_integration;
Si generas las inserciones mediante la función
google_ml.embedding()
, asegúrate de que el modelo esté registrado y de que estés usando elmodel_id
correcto en la consulta.