Appeler les modèles Gemini

Ce document explique comment appeler les modèles Gemini pour générer une réponse pour les entrées textuelles et multimodales à l'aide du SDK Vertex AI pour ABAP. Les modèles Gemini peuvent accepter plusieurs modes d'entrée, y compris le texte, l'image, la vidéo, l'audio et les documents. Vous pouvez utiliser les modèles Gemini dans les cas d'utilisation suivants :

  • Résumer un texte au format libre
  • Décrire ou interpréter des assets multimédias
  • Traduire d'une langue à une autre

L'utilisation de modèles génératifs pour créer des fonctionnalités axées sur l'IA ne nécessite aucune expertise en machine learning (ML). Vous n'avez pas besoin de collecter un grand ensemble de données ni d'entraîner un modèle. Pour lancer votre premier programme, il vous suffit de décrire ce que vous voulez que le modèle fasse en quelques phrases. Le SDK Vertex AI pour ABAP fournit des classes et des méthodes ABAP pour accéder aux modèles Gemini à partir de votre environnement SAP. Pour commencer, consultez ces exemples de code.

Avant de commencer

Avant d'utiliser le SDK Vertex AI pour ABAP avec les modèles Gemini, assurez-vous que vous ou vos administrateurs avez rempli les conditions préalables suivantes :

Envoyer une requête à Gemini

Cette section explique comment envoyer des requêtes aux modèles Gemini via l'API Vertex AI à l'aide du SDK Vertex AI pour ABAP.

Instancier la classe d'appelant Gemini multimodal

Pour appeler les modèles textuels et multimodaux Gemini à l'aide de requêtes textuelles ou multimodales, vous pouvez utiliser la classe /GOOG/CL_GENERATIVE_MODEL. Vous instanciez la classe en transmettant la clé de modèle configurée dans les paramètres de génération du modèle.

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

Remplacez MODEL_KEY par le nom de la clé du modèle, configuré dans les paramètres de génération du modèle.

Générer du contenu avec une invite

Pour générer du contenu en fournissant une requête textuelle au modèle, vous pouvez utiliser la méthode GENERATE_CONTENT.

lo_model->generate_content( 'PROMPT' ).

Remplacez PROMPT par votre invite textuelle.

Fournir des instructions système au modèle

Pour transmettre des instructions système textuelles au modèle, vous pouvez utiliser la méthode SET_SYSTEM_INSTRUCTIONS.

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Remplacez SYSTEM_INSTRUCTIONS par les instructions système du modèle.

Ajouter des paramètres de sécurité

Pour ajouter des paramètres de sécurité afin que le modèle génère des réponses, vous pouvez utiliser la méthode ADD_SAFETY_SETTINGS. Cette fonctionnalité permet d'imposer des consignes de sécurité au modèle pour bloquer le contenu non sécurisé.

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

Remplacez les éléments suivants :

À chaque appel de méthode, la méthode ADD_SAFETY_SETTINGS ajoute les paramètres de sécurité spécifiés à l'entrée du modèle.

Définir la configuration de génération du modèle

Vous gérez la configuration de génération des modèles dans le tableau /GOOG/AI_CONFIG. Pour remplacer la configuration de génération d'un appel particulier, vous pouvez utiliser la méthode SET_GENERATION_CONFIG. Si le paramètre d'importation d'une propriété de génération est défini, la valeur du paramètre transmise est prise en compte.

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' ).

Remplacez les éléments suivants :

  • RESPONSE_MIME_TYPE : type MIME de la réponse pour le modèle.
  • TEMPERATURE : température de la randomisation.
  • TOP_P : échantillonnage Top-P.
  • TOP_K : échantillonnage Top-K.
  • CANDIDATE_COUNT : nombre de candidats à générer.
  • MAX_OUTPUT_TOKENS : nombre maximal de jetons de sortie par message
  • PRESENCE_PENALTY : pénalités positives.
  • FREQUENCY_PENALTY : pénalités de fréquence.

Pour en savoir plus sur ces paramètres, consultez la section Configurer les paramètres de génération de modèles.

Transmettre l'entrée multimodale au modèle

Vous pouvez appeler les modèles Gemini à l'aide d'une entrée multimodale, qui peut être du texte, une image, une vidéo, des documents ou une combinaison de ces éléments. Vous pouvez transmettre l'entrée sous forme de données brutes ou en fournissant l'URI Cloud Storage des objets de fichier.

Définir des données brutes

Pour fournir les données brutes d'un fichier en entrée au modèle, ainsi que son type MIME, vous pouvez utiliser la méthode SET_INLINE_DATA. Pour les entrées vidéo, afin de ne prendre en compte qu'une partie spécifique d'une vidéo, vous pouvez définir les codes temporels de début et de fin à l'aide des paramètres d'importation facultatifs IV_VIDEO_START_OFFSET et IV_VIDEO_END_OFFSET, respectivement.

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

Remplacez les éléments suivants :

  • MIME_TYPE : type MIME standard IANA des données brutes. Par défaut, le type MIME est défini sur application/pdf.
  • RAW_DATA : données brutes encodées en base64 de l'image, du PDF ou de la vidéo à intégrer à la requête.

Pour effacer les données brutes des fichiers de l'entrée du modèle avec la même instance de la classe /GOOG/CL_GENERATIVE_MODEL, vous pouvez utiliser la méthode CLEAR_INLINE_DATA.

lo_model->clear_inline_data( ).

Définir des objets à partir de Cloud Storage

Pour fournir l'URI d'un objet de fichier stocké dans un bucket Cloud Storage en entrée du modèle, avec son type MIME, vous pouvez utiliser la méthode SET_FILE_DATA. Pour les entrées vidéo, afin de ne prendre en compte qu'une partie spécifique d'une vidéo, vous pouvez définir les codes temporels de début et de fin à l'aide des paramètres d'importation facultatifs IV_VIDEO_START_OFFSET et IV_VIDEO_END_OFFSET, respectivement.

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

Remplacez les éléments suivants :

  • MIME_TYPE : type MIME standard IANA des données de fichier. Par défaut, le type MIME est défini sur application/pdf.
  • FILE_URI : URI du fichier stocké dans un bucket Cloud Storage.

Si vous souhaitez transmettre tous les fichiers présents dans un bucket Cloud Storage en tant qu'entrée au modèle, utilisez la méthode SET_FILES_FROM_GCS pour spécifier le nom du bucket Cloud Storage cible.

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

Remplacez STORAGE_BUCKET_NAME par le nom du bucket Cloud Storage qui contient les fichiers.

Si vous disposez d'une clé cliente distincte pour appeler l'API Cloud Storage via le SDK ABAP pour Google Cloud, transmettez le nom de la clé cliente dans le paramètre d'importation IV_KEY_NAME.

Pour effacer les objets définis via des URI Cloud Storage de l'entrée du modèle avec la même instance de la classe /GOOG/CL_GENERATIVE_MODEL, vous pouvez utiliser la méthode CLEAR_FILE_DATA.

lo_model->clear_file_data( ).

Définir le type MIME de la réponse

Pour définir le type MIME de la réponse du modèle, vous pouvez utiliser la méthode SET_RESPONSE_MIME_TYPE. Si ce champ n'est pas défini, le modèle utilise text/plain comme type MIME de réponse par défaut.

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

Remplacez RESPONSE_MIME_TYPE par le type MIME de la réponse du contenu généré.

Compter le nombre de jetons dans une invite de texte

Pour compter le nombre de jetons dans une invite de texte avant d'appeler le modèle avec l'invite, vous pouvez utiliser la méthode 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( ).

Remplacez les éléments suivants :

Recevoir une réponse de Gemini

Pour recevoir les réponses traitées du modèle et les présenter de manière compréhensible aux développeurs ABAP, le SDK fournit la classe /GOOG/CL_MODEL_RESPONSE.

La réponse capturée par la classe /GOOG/CL_MODEL_RESPONSE est associée aux requêtes effectuées via les méthodes de la classe /GOOG/CL_GENERATIVE_MODEL. Vous pouvez ainsi accéder directement à la réponse dans une seule instruction sans avoir besoin de variables pour stocker les résultats intermédiaires.

Obtenir une réponse textuelle

Pour recevoir une réponse textuelle du modèle, vous pouvez utiliser la méthode GET_TEXT.

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

Remplacez PROMPT par votre invite de texte.

Obtenir la note de sécurité

Pour obtenir une liste des notes de sécurité de la réponse du modèle, vous pouvez utiliser la méthode GET_SAFETY_RATING.

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

Remplacez PROMPT par votre invite de texte.

Obtenir le nombre de jetons dans l'invite de requête

Pour recevoir le nombre de jetons dans l'invite d'entrée du modèle, vous pouvez utiliser la méthode GET_PROMPT_TOKEN_COUNT.

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

Remplacez PROMPT par votre invite de texte.

Obtenir le nombre de jetons dans la réponse du modèle

Pour recevoir le nombre de jetons dans la réponse du modèle, vous pouvez utiliser la méthode GET_CANDIDATES_TOKEN_COUNT.

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

Remplacez PROMPT par votre invite de texte.

Obtenir le motif du blocage

Pour connaître la raison pour laquelle le modèle a bloqué la génération de réponses, vous pouvez utiliser la méthode GET_BLOCK_REASON.

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

Remplacez PROMPT par votre invite de texte.

Message "Get block reason" (obtenir la raison du blocage)

Pour recevoir un message lisible indiquant la raison pour laquelle le modèle bloque la génération de la réponse, vous pouvez utiliser la méthode GET_BLOCK_REASON_MESSAGE.

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

Remplacez PROMPT par votre invite de texte.

Exemples de code

Les exemples de code suivants montrent comment appeler les modèles Gemini pour générer une réponse pour différents types d'entrée.

Génération textuelle

L'exemple de code suivant montre comment générer une réponse à partir d'une invite de texte et d'une instruction système. L'instruction système est facultative et peut être transmise avec l'invite pour indiquer au modèle de se comporter d'une manière spécifique.

Exemple de code

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.

Remplacez les éléments suivants :

Génération multimodale

L'exemple de code suivant montre comment générer une réponse à partir d'une entrée multimodale, telle qu'un texte et une image. Vous pouvez mentionner un URI Cloud Storage ou des données de fichier brutes d'une image, d'une vidéo ou d'un document, ainsi qu'une invite de texte. L'instruction système est facultative et peut être transmise avec l'invite pour indiquer au modèle de se comporter d'une manière spécifique.

Exemple de code

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.

Remplacez les éléments suivants :

  • MODEL_KEY : nom de la clé du modèle, configuré dans les paramètres de génération du modèle.
  • PROMPT : votre invite de texte.
  • SYSTEM_INSTRUCTIONS : instruction système à transmettre au modèle.
  • MIME_TYPE : type MIME standard IANA des données de fichier. Par défaut, le type MIME est défini sur application/pdf.
  • FILE_URI : URI du fichier stocké dans un bucket Cloud Storage.
  • INLINE_DATA : données brutes encodées en base64 de l'image, du PDF ou de la vidéo à inclure dans la requête.

Ajouter des paramètres de sécurité pour le modèle

L'exemple de code suivant montre comment ajouter des paramètres de sécurité pour que le modèle génère une réponse.

Exemple de code

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.

Remplacez les éléments suivants :

  • MODEL_KEY : nom de la clé du modèle, configuré dans les paramètres de génération du modèle.
  • PROMPT : votre invite de texte.
  • SYSTEM_INSTRUCTIONS : instruction système à transmettre au modèle.
  • MIME_TYPE : type MIME standard IANA des données de fichier. Par défaut, le type MIME est défini sur application/pdf.
  • FILE_URI : URI du fichier stocké dans un bucket Cloud Storage.
  • INLINE_DATA : données brutes encodées en base64 de l'image, du PDF ou de la vidéo à intégrer à la requête.
  • HARM_CATEGORY : catégorie de préjudice que vous souhaitez appliquer.
  • HARM_BLOCK_THRESHOLD : niveau de seuil basé sur la probabilité que vous souhaitez appliquer.
  • HARM_BLOCK_METHOD : méthode de blocage des contenus dangereux que vous souhaitez appliquer.

Déterminer le nombre de jetons et de caractères facturables dans une invite

Avant d'appeler le modèle avec une invite, vous pouvez vérifier le nombre de jetons dans votre invite et le nombre de caractères facturables présents dans votre jeton pour planifier la facturation de votre projet Google Cloud. L'exemple de code suivant montre comment trouver ces numéros et évaluer votre facturation pour un appel de modèle similaire.

Exemple de code

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.

Remplacez les éléments suivants :

Étape suivante