Genera incorporaciones

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 en off.

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:

  1. Conecta un cliente psql a la instancia principal del clúster, como se describe en Conecta un cliente psql a una instancia.

  2. 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 tabla

  • EMBEDDING_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

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:

  • 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 el model_id correcto en la consulta.

¿Qué sigue?