En esta página, se muestra cómo usar AlloyDB como una herramienta de modelo de lenguaje grande (LLM) y generar incorporaciones de vectores basadas en un LLM.
Para obtener más información sobre el uso de modelos de IA con AlloyDB Omni, consulta Cómo compilar aplicaciones de IA generativa.
AlloyDB te permite usar un LLM alojado por Vertex AI para traducir una cadena de texto a una incorporació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 incorporaciones de texto, consulta Incorporaciones de texto.
Antes de comenzar
Para permitir que AlloyDB genere incorporaciones, asegúrate de cumplir con los siguientes requisitos:
Restricciones regionales
Puedes generar incorporaciones en regiones donde está disponible la IA generativa en Vertex AI. Para obtener una lista de las regiones, consulta IA generativa en ubicaciones de Vertex AI .
En el caso de AlloyDB, asegúrate de que el clúster de AlloyDB y el modelo de Vertex AI al que consultas estén 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 de AlloyDB.CREATE EXTENSION google_ml_integration;
Esta extensión se incluye con AlloyDB. Puedes instalarlo en cualquier base de datos de tu clúster.
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.
Otorga acceso a los usuarios de la base de datos para generar embeddings
Otorga permiso a los usuarios de la base de datos para que ejecuten la función embedding
a fin de ejecutar predicciones:
Conecta un cliente
psql
a la instancia principal del clúster, como se describe en Conecta un clientepsql
a una instancia.En el símbolo del sistema de psql, conéctate a la base de datos y otorga permisos:
\c DB_NAME GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
Reemplaza lo siguiente:
DB_NAME: Es el nombre de la base de datos en la que se deben otorgar los permisos.
USER_NAME: El nombre del usuario al que se deben otorgar los permisos
Genera una incorporación
AlloyDB proporciona una función que te permite traducir texto en una embedding de vector. Luego, puedes almacenar esa incorporación en tu base de datos como datos vectoriales y, de forma opcional, usar funciones pgvector
para basar las consultas en ella.
Para generar una embedding con AlloyDB, usa la función embedding()
que proporciona la extensión google_ml_integration
:
SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');
Reemplaza lo siguiente:
MODEL_ID
: el ID del modelo que se consultará.Si usas Vertex AI Model Garden, especifica
textembedding-gecko@003
como el ID del modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incorporaciones de texto. Para obtener más información, consulta Incorporaciones de texto.Opcional:
VERSION_TAG
: Es la etiqueta de la versión del modelo que se consultará. Agrega@
a la etiqueta.Si usas uno de los modelos en inglés
textembedding-gecko
con Vertex AI, especifica una de las etiquetas de versión, por ejemplo,textembedding-gecko@003
, que se enumera en Versiones del modelo.Google recomienda enfáticamente que siempre especifiques 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 generar resultados inesperados.
TEXT
: es el texto que se traducirá en una embedding de vector.
En el siguiente ejemplo, se usa la versión 003
de los modelos en inglés textembedding-gecko
para generar una incorporación basada en una cadena literal proporcionada:
SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
Almacena embeddings
Las imágenes incorporadas que se generan con la extensión google_ml_integration
se implementan como arrays de valores real
.
Estas incorporaciones generadas se pasan como entradas para las funciones de extensión pgvector
.
Para almacenar este valor en una tabla, agrega una columna real[]
:
ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];
Después de crear una columna para almacenar embeddings, puedes propagarla en función de los valores ya almacenados en otra columna de la misma tabla:
UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);
Reemplaza lo siguiente:
TABLE
: el nombre de la tablaEMBEDDING_COLUMN
: el nombre de la columna de embedding
MODEL_ID
: el ID del modelo que se consultará.Si usas Vertex AI Model Garden, especifica
textembedding-gecko@003
como el ID del modelo. Estos son los modelos basados en la nube que AlloyDB puede usar para las incorporaciones de texto. Para obtener más información, consulta Incorporaciones de texto.Opcional:
VERSION_TAG
: Es la etiqueta de la versión del modelo que se consultará. Agrega@
a la etiqueta.Si usas uno de los modelos en inglés
textembedding-gecko
con Vertex AI, especifica una de las etiquetas de versión, por ejemplo,textembedding-gecko@003
, que se enumera en Versiones del modelo.Google recomienda enfáticamente que siempre especifiques 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 generar resultados inesperados.
SOURCE_TEXT_COLUMN
: el nombre de la columna que almacena el texto que se traducirá en incorporaciones
Realiza una búsqueda de similitud
También puedes usar la función embedding()
para traducir el texto en un vector. Aplicas el vector al operador de vecino más cercano pgvector
, <->
, para encontrar las filas de la base de datos con las incorporaciones semánticamente más similares.
Debido a que embedding()
muestra un array real
, debes convertir de forma explícita 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
Usa etiquetas de versión del modelo para evitar errores
Google recomienda que siempre uses una versión estable del modelo de embeddings elegido. En la mayoría de los modelos, esto significa configurar una etiqueta de versión de forma explícita.
Llamar a la función embedding()
sin especificar la etiqueta de versión del modelo es válida en términos sintácticos, pero también es propenso a errores.
Si omites la etiqueta de versión cuando usas un modelo en Vertex AI Model Garden, entonces Vertex AI usa la versión más reciente del modelo. Es posible que esta no sea la última versión estable. Para obtener más información sobre las versiones disponibles de modelos de Vertex AI, consulta Versiones de modelos.
Una versión determinada del modelo de Vertex AI siempre muestra la misma respuesta embedding()
a una entrada de texto determinada. Si no especificas las versiones del modelo en tus llamadas a embedding()
, una nueva versión del modelo publicada puede cambiar de forma abrupta el vector que se muestra para una entrada determinada, lo que puede causar errores o algún otro comportamiento inesperado en tus aplicaciones.
Para evitar estos problemas, especifica siempre la versión del modelo.
Solucionar problemas
ERROR: No se encontró el modelo para model_id
Mensaje de error
Cuando intentas generar una incorporación con la función embedding()
o google_ml.embedding()
, se produce el siguiente error:
ERROR: 'Model not found for model_id:
Solución recomendada
Actualiza la extensión
google_ml_integration
y vuelve a intentar generar incorporaciones.ALTER EXTENSION google_ml_integration UPDATE;
También puedes soltar la extensión y, luego, volver a crearla.
DROP extension google_ml_integration; CREATE EXTENSION google_ml_integration;
Si generas embeddings con la función
google_ml.embedding()
, asegúrate de que el modelo esté registrado y de que uses elmodel_id
correcto en la consulta.