Invoca predicciones en línea desde bases de datos de AlloyDB

En esta página, se muestra cómo invocar predicciones en línea desde una base de datos de AlloyDB para PostgreSQL.

AlloyDB te permite obtener predicciones en línea en tu código SQL a través de una llamada a la función ml_predict_row(). Para obtener más información sobre el uso de modelos de aprendizaje automático (AA) con AlloyDB, consulta Cómo compilar aplicaciones de IA generativa.

Antes de comenzar

Antes de poder invocar predicciones en línea desde una base de datos de AlloyDB, debes preparar tu base de datos y seleccionar un modelo de AA adecuado.

Prepara tu base de datos

  1. Configura la integración entre tu base de datos y Vertex AI.

  2. Otorga permiso a los usuarios de la base de datos para que ejecuten la función ml_predict_row() a fin de ejecutar predicciones:

    1. Conecta un cliente psql a la instancia principal del clúster, como se describe en Cómo conectar 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 ml_predict_row 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: Es el nombre del usuario al que se deben otorgar los permisos.

Selecciona un modelo de AA

Cuando llamas a la función ml_predict_row(), debes especificar la ubicación de un modelo de AA. El modelo que especifiques puede ser uno de los siguientes:

  • Un modelo que se ejecuta en Model Garden de Vertex AI

    La función ml_predict_row() admite la invocación de predicciones solo en modelos tabulares o personalizados.

  • Un modelo de Vertex AI con un extremo activo al que tienes permiso de acceso dE Identity and Access Management (IAM).

    AlloyDB no admite extremos privados para obtener predicciones en línea.

Invoca predicciones en línea

Usa la función de SQL ml_predict_row() para invocar predicciones en línea en tus datos.

El formato del argumento inicial de la función depende de si el modelo de AA que deseas usar está en Model Garden de Vertex AI o si es un extremo que se ejecuta en un proyecto de Google Cloud .

Usa un modelo en Model Garden de Vertex AI

Para invocar una predicción en línea con un modelo de AA que se ejecuta en Model Garden de Vertex AI, usa la siguiente sintaxis para la función de SQL ml_predict_row():

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{ CONTENTS }');

Reemplaza lo siguiente:

  • PROJECT_ID: El ID de tu proyecto de Google Cloud

  • REGION_ID: El ID de la región de Google Cloud en la que se encuentra el modelo, por ejemplo, us-central1 para gemini-pro

  • MODEL_ID: Es el ID del modelo de AA que se usará, por ejemplo, gemini-pro.

  • CONTENTS: las entradas de la llamada de predicción, en formato JSON

Si el modelo de AA se almacena en el mismo proyecto y la misma región que tu clúster de AlloyDB, puedes abreviar el primer argumento de esta función:

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ CONTENTS }');

Para obtener información sobre los mensajes de respuesta JSON del modelo, consulta Referencia de modelos de base de IA generativa.

Para ver ejemplos, consulta Invocaciones de ejemplo.

Usa un extremo del modelo de Vertex AI

Para invocar una predicción en línea a través de un extremo del modelo de Vertex AI, usa la siguiente sintaxis para la función de SQL ml_predict_row():

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID', '{ CONTENTS }');

Reemplaza lo siguiente:

  • PROJECT_ID: El ID del proyecto de Google Cloud en el que se encuentra el modelo

  • REGION_ID: El ID de la región de Google Cloud en la que se encuentra el modelo, por ejemplo, us-central1

  • ENDPOINT_ID: Es el ID del extremo del modelo.

  • CONTENTS: las entradas de la llamada de predicción, en formato JSON

Si el extremo se encuentra en el mismo proyecto y región que tu clúster de AlloyDB, puedes abreviar el primer argumento de esta función:

SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');

Para obtener información acerca de los mensajes de respuesta JSON del modelo, consulta PredictResponse.

Invocaciones de ejemplo

En el siguiente ejemplo, se usa gemini-pro, disponible en Model Garden, para generar texto basado en una instrucción breve que se proporciona como argumento literal de ml_predict_row():

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', '{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "What is AlloyDB?"
    }]
  }]
}');

La respuesta es un objeto JSON. Para obtener más información acerca del formato del objeto, consulta Cuerpo de la respuesta.

En el siguiente ejemplo, se modifica el anterior de las siguientes maneras:

  • En el ejemplo, se usa el contenido de la columna messages.message de la base de datos actual como entrada.

  • En el ejemplo, se muestra el uso de la función json_build_object() como ayuda para dar formato a los parámetros de la función.


select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message))) from messages;

El objeto JSON que se muestra ahora contiene una entrada en su array predictions para cada fila de la tabla messages.

Debido a que la respuesta es un objeto JSON, puedes extraer campos específicos de él a través del operador de flecha de PostgreSQL:

select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;

Para ver más ejemplos de argumentos para ml_predict_row(), consulta la Guía de inicio rápido para usar la API de Vertex AI.