Invoca los modelos de Gemini

En este documento, se describe cómo invocar los modelos de Gemini para generar respuestas para entradas multimodales y de texto con el SDK de Vertex AI para ABAP. Los modelos de Gemini pueden aceptar varios modos de entrada, incluidos texto, imágenes, videos, audio y documentos. Puedes usar los modelos de Gemini para casos de uso como los siguientes:

  • Resume texto sin formato
  • Describir o interpretar recursos multimedia
  • Traducción entre idiomas

El uso de modelos generativos para compilar funciones centradas en la IA no requiere ninguna experiencia en el aprendizaje automático (AA). No necesitas recopilar un conjunto de datos grande ni entrenar un modelo. Para iniciar tu primer programa, solo debes describir lo que quieres que haga el modelo en algunas oraciones. El SDK de Vertex AI para ABAP proporciona clases y métodos de ABAP para acceder a los modelos de Gemini desde tu entorno de SAP. Para comenzar, consulta estas muestras de código.

Antes de comenzar

Antes de usar el SDK de Vertex AI para ABAP con los modelos de Gemini, asegúrate de que tú o tus administradores hayan completado los siguientes requisitos previos:

Envía la solicitud a Gemini

En esta sección, se explica cómo enviar solicitudes a los modelos de Gemini con la API de Vertex AI con el SDK de Vertex AI para ABAP.

Crea una instancia de la clase de invocador multimodal de Gemini

Para invocar los modelos de texto y multimodales de Gemini con instrucciones de texto o multimodales, puedes usar la clase /GOOG/CL_GENERATIVE_MODEL. Para crear una instancia de la clase, debes pasar la clave de modelo configurada en los parámetros de generación del modelo.

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Reemplaza MODEL_KEY por el nombre de la clave del modelo, que se configura en los parámetros de generación del modelo.

Genera contenido con una instrucción

Para generar contenido proporcionando una sugerencia de texto al modelo, puedes usar el método GENERATE_CONTENT.

lo_model->generate_content( 'PROMPT' ).

Reemplaza PROMPT por tu instrucción de texto.

Proporciona instrucciones del sistema al modelo

Para pasar instrucciones del sistema basadas en texto al modelo, puedes usar el método SET_SYSTEM_INSTRUCTIONS.

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Reemplaza SYSTEM_INSTRUCTIONS por tus instrucciones del sistema para el modelo.

Agrega la configuración de seguridad

Para agregar parámetros de configuración de seguridad para que el modelo genere respuestas, puedes usar el método ADD_SAFETY_SETTINGS. Esta función se usa para imponer lineamientos de seguridad en el modelo para bloquear el contenido no seguro.

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                               iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                               iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

Reemplaza lo siguiente:

Con cada llamada de método, el método ADD_SAFETY_SETTINGS agrega la configuración de seguridad especificada a la entrada del modelo.

Establece la configuración de generación para el modelo

Mantienes la configuración de generación para los modelos en la tabla /GOOG/AI_CONFIG. Para anular la configuración de generación de una llamada en particular, puedes usar el método SET_GENERATION_CONFIG. Si se establece el parámetro de importación para una propiedad de generación, se aplica el valor del parámetro que se pasó.

lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
                                 iv_temperature        = 'TEMPERATURE'
                                 iv_top_p              = 'TOP_P'
                                 iv_top_k              = 'TOP_K'
                                 iv_candidate_count    = 'CANDIDATE_COUNT'
                                 iv_max_output_tokens  = 'MAX_OUTPUT_TOKENS'
                                 iv_presence_penalty   = 'PRESENCE_PENALTY'
                                 iv_frequency_penalty  = 'FREQUENCY_PENALTY' ).

Reemplaza lo siguiente:

  • RESPONSE_MIME_TYPE: Es el tipo de MIME de respuesta del modelo.
  • TEMPERATURE: Temperatura de aleatoriedad.
  • TOP_P: Muestreo Top-P.
  • TOP_K: Muestreo Top-K.
  • CANDIDATE_COUNT: Cantidad de candidatos que se generarán.
  • MAX_OUTPUT_TOKENS: Cantidad máxima de tokens de salida por mensaje
  • PRESENCE_PENALTY: Penalizaciones positivas.
  • FREQUENCY_PENALTY: Penalizaciones de frecuencia.

Para obtener más información sobre estos parámetros, consulta Configura los parámetros de generación de modelos.

Pasa la entrada multimodal al modelo

Puedes invocar los modelos de Gemini con una entrada multimodal, que puede ser texto, imagen, video, documentos o una combinación de estos. Puedes pasar la entrada en forma de datos sin procesar o proporcionar el URI de Cloud Storage de los objetos de archivo.

Configura datos sin procesar

Para proporcionar los datos sin procesar de un archivo como entrada al modelo, junto con su tipo MIME, puedes usar el método SET_INLINE_DATA. En el caso de las entradas de video, para considerar solo una parte específica de un video, puedes configurar la hora de inicio y la de finalización con los parámetros opcionales de importación IV_VIDEO_START_OFFSET y IV_VIDEO_END_OFFSET, respectivamente.

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

Reemplaza lo siguiente:

  • MIME_TYPE: Es el tipo de MIME estándar de la IANA de los datos sin procesar. De forma predeterminada, el tipo MIME se establece en application/pdf.
  • RAW_DATA: Son los datos sin procesar codificados en base64 de la imagen, el PDF o el video que se incluirán intercalado en el mensaje.

Para borrar los datos sin procesar de los archivos de la entrada del modelo con la misma instancia de la clase /GOOG/CL_GENERATIVE_MODEL, puedes usar el método CLEAR_INLINE_DATA.

lo_model->clear_inline_data( ).

Configura objetos desde Cloud Storage

Para proporcionar el URI de un objeto de archivo almacenado en un bucket de Cloud Storage como entrada al modelo, junto con su tipo MIME, puedes usar el método SET_FILE_DATA. En el caso de las entradas de video, para considerar solo una parte específica de un video, puedes configurar la hora de inicio y la de finalización con los parámetros opcionales de importación IV_VIDEO_START_OFFSET y IV_VIDEO_END_OFFSET, respectivamente.

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

Reemplaza lo siguiente:

  • MIME_TYPE: Es el tipo de MIME estándar de la IANA de los datos del archivo. De forma predeterminada, el tipo MIME se establece en application/pdf.
  • FILE_URI: El URI del archivo almacenado en un bucket de Cloud Storage.

Si deseas pasar todos los archivos presentes en un bucket de Cloud Storage como entrada al modelo, usa el método SET_FILES_FROM_GCS para especificar el nombre del bucket de Cloud Storage de destino.

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

Reemplaza STORAGE_BUCKET_NAME por el nombre del bucket de Cloud Storage que contiene los archivos.

Si tienes una clave de cliente independiente para invocar la API de Cloud Storage a través del SDK de ABAP para Google Cloud, pasa el nombre de la clave de cliente en el parámetro de importación IV_KEY_NAME.

Para borrar los objetos establecidos a través de URIs de Cloud Storage de la entrada del modelo con la misma instancia de la clase /GOOG/CL_GENERATIVE_MODEL, puedes usar el método CLEAR_FILE_DATA.

lo_model->clear_file_data( ).

Establece el tipo de MIME de la respuesta

Para configurar el tipo de MIME de la respuesta con la que responde el modelo, puedes usar el método SET_RESPONSE_MIME_TYPE. Si no se establece, el modelo toma text/plain como el tipo de MIME de la respuesta de forma predeterminada.

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

Reemplaza RESPONSE_MIME_TYPE por el tipo de MIME de la respuesta del contenido generado.

Cuenta la cantidad de tokens en una instrucción de texto

Para contar la cantidad de tokens en una instrucción de texto antes de invocar el modelo con la instrucción, puedes usar el método COUNT_TOKENS.

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                               )->get_total_tokens( ).

DATA(lv_total_billable_characters) = lo_model->count_tokens(
                                                 iv_prompt_text         = 'PROMPT'
                                                 iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                                            )->get_total_billable_characters( ).

Reemplaza lo siguiente:

Recibe una respuesta de Gemini

Para recibir respuestas procesadas del modelo y presentarlas de una manera significativa para los desarrolladores de ABAP, el SDK proporciona la clase /GOOG/CL_MODEL_RESPONSE.

La respuesta que captura la clase /GOOG/CL_MODEL_RESPONSE se encadena a las solicitudes realizadas a través de los métodos de la clase /GOOG/CL_GENERATIVE_MODEL, de modo que puedas acceder directamente a la respuesta en una sola sentencia sin necesidad de variables para almacenar los resultados intermedios.

Obtén una respuesta de texto

Para recibir una respuesta de texto del modelo, puedes usar el método GET_TEXT.

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

Reemplaza PROMPT por tu instrucción de texto.

Obtén la calificación de seguridad

Para recibir una lista de calificaciones sobre la seguridad de la respuesta del modelo, puedes usar el método GET_SAFETY_RATING.

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

Reemplaza PROMPT por tu instrucción de texto.

Obtén la cantidad de tokens en la instrucción de la solicitud

Para recibir la cantidad de tokens en la instrucción de entrada al modelo, puedes usar el método GET_PROMPT_TOKEN_COUNT.

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

Reemplaza PROMPT por tu instrucción de texto.

Obtén la cantidad de tokens en la respuesta del modelo

Para recibir la cantidad de tokens en la respuesta del modelo, puedes usar el método GET_CANDIDATES_TOKEN_COUNT.

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

Reemplaza PROMPT por tu instrucción de texto.

Obtén el motivo del bloqueo

Para recibir el motivo por el que el modelo bloqueó la generación de respuestas, puedes usar el método GET_BLOCK_REASON.

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).

Reemplaza PROMPT por tu instrucción de texto.

Obtén el mensaje del motivo del bloqueo

Para recibir un mensaje de motivo legible para bloquear la generación de respuestas por parte del modelo, puedes usar el método GET_BLOCK_REASON_MESSAGE.

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

Reemplaza PROMPT por tu instrucción de texto.

Muestras de código

En las siguientes muestras de código, se muestra cómo invocar los modelos de Gemini para generar respuestas para diferentes tipos de entradas.

Generación basada en texto

En la siguiente muestra de código, se muestra cómo generar una respuesta a partir de una instrucción de texto junto con una instrucción del sistema. La instrucción del sistema es opcional y se puede pasar junto con la instrucción para indicarle al modelo que se comporte de una manera específica.

Muestra de código

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Reemplaza lo siguiente:

Generación multimodal

En la siguiente muestra de código, se muestra cómo generar una respuesta a partir de una entrada multimodal, como texto y una imagen. Puedes mencionar el URI de Cloud Storage o los datos de archivo sin procesar de una imagen, un video o un documento junto con una instrucción de texto. La instrucción del sistema es opcional y se puede pasar junto con la instrucción para indicarle al modelo que se comporte de una manera específica.

Muestra de código

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Reemplaza lo siguiente:

  • MODEL_KEY: Es el nombre de la clave de modelo, que se configura en los parámetros de generación del modelo.
  • PROMPT: Tu sugerencia de texto.
  • SYSTEM_INSTRUCTIONS: Tu instrucción del sistema para el modelo.
  • MIME_TYPE: Es el tipo de MIME estándar de la IANA de los datos del archivo. De forma predeterminada, el tipo MIME se establece en application/pdf.
  • FILE_URI: El URI del archivo almacenado en un bucket de Cloud Storage.
  • INLINE_DATA: Son los datos sin procesar codificados en base64 de la imagen, el PDF o el video que se incluirá intercalado en el mensaje.

Agrega la configuración de seguridad del modelo

En la siguiente muestra de código, se muestra cómo agregar parámetros de configuración de seguridad para que el modelo genere una respuesta.

Muestra de código

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                                                       iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                                                       iv_harm_block_method    = 'HARM_BLOCK_METHOD'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Reemplaza lo siguiente:

  • MODEL_KEY: Es el nombre de la clave de modelo, que se configura en los parámetros de generación del modelo.
  • PROMPT: Tu sugerencia de texto.
  • SYSTEM_INSTRUCTIONS: Tu instrucción del sistema para el modelo.
  • MIME_TYPE: Es el tipo de MIME estándar de la IANA de los datos del archivo. De forma predeterminada, el tipo MIME se establece en application/pdf.
  • FILE_URI: El URI del archivo almacenado en un bucket de Cloud Storage.
  • INLINE_DATA: Son los datos sin procesar codificados en base64 de la imagen, el PDF o el video que se incluirán intercalados en el mensaje.
  • HARM_CATEGORY: La categoría de daño que deseas aplicar.
  • HARM_BLOCK_THRESHOLD: El nivel de umbrales basado en la probabilidad que deseas aplicar.
  • HARM_BLOCK_METHOD: El método de bloqueo de contenido dañino que deseas aplicar.

Busca la cantidad de tokens y caracteres facturables en una instrucción

Antes de invocar el modelo con una instrucción, te recomendamos que verifiques la cantidad de tokens en la instrucción y cuántos caracteres facturables hay en el token para planificar la facturación de tu proyecto de Google Cloud. En la siguiente muestra de código, se muestra cómo encontrar estos números y evaluar tu facturación para una llamada de modelo similar.

Muestra de código

DATA:
  lv_prompt      TYPE string.

lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
                                   )->get_total_tokens( ).

    DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
                                                )->get_total_billable_characters( ).
    IF lv_total_tokens IS NOT INITIAL.
      cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).

    ENDIF.

    IF lv_total_billable_characters IS NOT INITIAL.
      cl_demo_output=>display( 'Total Billable Characters -' && lv_total_billable_characters ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Reemplaza lo siguiente:

¿Qué sigue?