Generar incorporaciones de texto

La extensión google_ml_integration en AlloyDB para PostgreSQL te permite generar embeddings de texto directamente en SQL con funciones en los esquemas public y google_ml. Puedes llamar a la función embedding() en el esquema public con cualquier modelo de embeddings de Gemini Enterprise Agent Platform sin registrar un extremo. Para pasar parámetros personalizados, como tipos de tareas, o usar modelos de terceros, registra el extremo del modelo y llama a la función google_ml.embedding() en el esquema google_ml.

Cómo funcionan los embeddings

Imagina una base de datos que se ejecuta en AlloyDB con las siguientes características:

  • 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 columna TEXT, se almacenan los reclamos del comprador que se registran sobre cada artículo.

  • La base de datos se integra en Model Garden, lo que le otorga acceso a los modelos de gemini-embedding-001 en inglés.

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 devolver respuestas semánticamente similares para esas consultas. 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 una instrucción de texto determinada, como It was the wrong color.

Para la generación de embeddings básica, selecciona uno de los siguientes esquemas.

Antes de comenzar

Para permitir que AlloyDB genere embeddings, haz lo siguiente:

  • Conéctate a tu base de datos con psql o AlloyDB Studio como el usuario postgres.

  • Verifica que la extensión google_ml_integration esté instalada.

    Para verificar la versión de tu extensión, ejecuta el siguiente comando:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    Si necesitas actualizar la extensión, usa el comando ALTER EXTENSION google_ml_integration UPDATE;.

  • Antes de generar embeddings desde una base de datos de AlloyDB, debes configurar AlloyDB para que funcione con Agent Platform. Para obtener más información, consulta Integra tu base de datos en Agent Platform.

  • Otorga permisos a los usuarios de la base de datos para generar embeddings.

    Si usas psql, conéctate a la base de datos a la que deseas otorgar 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 a la que deseas otorgar permisos.

    • USER_NAME: Es el nombre del usuario al que deseas otorgar permisos.

    Si usas AlloyDB Studio, selecciona el nombre de la base de datos a la que deseas otorgar permisos en la lista Base de datos. Otorga el permiso EXECUTE en la función google_ml.embedding al usuario:

    GRANT EXECUTE ON FUNCTION google_ml.embedding TO "USER_NAME";
    

    Reemplaza USER_NAME por el nombre del usuario al que deseas otorgar permisos.

Genera embeddings

Usa la función de SQL google_ml.embedding() para llamar a los modelos de embedding de texto.

Para llamar al modelo y generar embeddings, ejecuta la siguiente consulta:

SELECT
 google_ml.embedding(
   model_id => 'MODEL_ID',
   content => 'CONTENT');

Reemplaza lo siguiente:

  • MODEL_ID: el ID del modelo calificado, por ejemplo, gemini-embedding-001.

  • CONTENT: es el texto que se traducirá en una embedding de vector.

Ejemplos para generar embeddings

En esta sección, se incluyen algunos ejemplos para generar embeddings con el extremo del modelo registrado.

Modelos de embedding de Gemini

Para generar embeddings en un extremo del modelo gemini-embedding-001 registrado, ejecuta la siguiente instrucción:

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

Si tu clúster de AlloyDB y el extremo de Gemini Enterprise Agent Platform están en proyectos diferentes, sigue estos pasos:

  1. Ejecuta la siguiente sentencia CALL.

       CALL
         google_ml.create_model(
           model_id => 'gemini-embedding-001',
           model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict',
           model_provider => 'google',
           model_type => 'text_embedding',
           model_auth_type => 'alloydb_service_agent_iam',
           model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
           model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform'
         );
    
  2. Para generar embeddings en un extremo del modelo gemini-embedding-001 registrado, ejecuta la siguiente instrucción:

      SELECT
        google_ml.embedding(
          model_id => 'gemini-embedding-001',
          content => 'AlloyDB is a managed, cloud-hosted SQL database service');
    

Modelo de embedding de OpenAI

Para generar embeddings en un extremo del modelo text-embedding-ada-002 registrado de OpenAI, ejecuta la siguiente instrucción:

   SELECT
     google_ml.embedding(
       model_id => 'text-embedding-ada-002',
       content => 'e-mail spam');

Para generar embeddings en los extremos de los modelos text-embedding-3-small o text-embedding-3-large registrados en OpenAI, ejecuta la siguiente instrucción:

 SELECT
   google_ml.embedding(
     model_id => 'text-embedding-3-small',
     content => 'Vector embeddings in AI');

¿Qué sigue?