Prototypage rapide avec Gemini

L'API Generative Language de Google permet de créer des prototypes fluides à l'aide des modèles Gemini. Il vous permet de tester et d'explorer les fonctionnalités des modèles Gemini sans avoir à configurer une infrastructure complexe ni à gérer le déploiement des modèles. L'outil de prototypage basé sur le navigateur de Google, Google AI Studio, utilise l'API Generative Language pour permettre le prototypage basé sur le navigateur avec des modèles génératifs.

Avec le SDK Vertex AI pour ABAP, vous pouvez utiliser l'API Generative Language (API Gemini) pour commencer votre parcours de prototypage, directement depuis votre environnement ABAP. Vous avez besoin d'une clé API générée à partir de Google AI Studio pour accéder aux modèles Gemini. Vous ne devez générer cette clé API qu'une seule fois.

Générer une clé API

La clé API que vous générez depuis Google AI Studio vous permet de vous authentifier facilement auprès de l'API Gemini.

Pour générer une clé API, procédez comme suit:

  1. Dans Google AI Studio, ouvrez la page Clés API.

    Obtenir une clé API

  2. Cliquez sur Créer une clé API.

  3. Si c'est le cas, lisez et acceptez l'avis juridique, puis cliquez sur Continuer.

  4. Si la valeur est renseignée, lisez et confirmez le rappel sur les paramètres de sécurité.

  5. Dans la boîte de dialogue Créer une clé API, sélectionnez l'une des options suivantes, selon le cas:

    • Créer une clé API dans un nouveau projet
    • Créer une clé API dans un projet existant
  6. Copiez votre chaîne de clé et conservez-la à un emplacement sécurisé. Vous avez besoin de cette clé API pour configurer l'authentification auprès de l'API Gemini.

  7. Copiez le numéro du projet Google Cloud dans lequel la clé API est générée. Vous en aurez besoin plus tard.

Configurer l'authentification

Pour vous authentifier auprès de l'API Gemini à l'aide d'une clé API, appliquez l'une des méthodes suivantes:

S'authentifier à l'aide d'une clé API via une classe d'authentification personnalisée

Vous pouvez créer une classe d'authentification personnalisée pour conserver votre clé API et configurer une clé client avec la classe d'authentification personnalisée.

  1. Dans votre environnement SAP BTP, ABAP, créez une classe en héritant de la classe /GOOG/CL_AUTH_BASE fournie avec le SDK ABAP pour Google Cloud:

    1. Dans la plate-forme Eclipse, effectuez un clic droit sur le package dans lequel vous souhaitez créer une classe, puis cliquez sur Nouveau > Classe ABAP.
    2. Dans le champ Nom, saisissez ZCL_TEST_GEMINI_API.
    3. Dans le champ Description, saisissez Authentication Class for testing Gemini API.
    4. Dans le champ Superclasse, saisissez /GOOG/CL_AUTH_BASE.
    5. Cliquez sur Suivant.
    6. Sélectionnez une requête de transport ou créez-en une.
    7. Cliquez sur Terminer.
    8. Dans l'éditeur, remplacez le code existant par le code suivant:

      CLASS zcl_test_gemini_api DEFINITION
          PUBLIC
          INHERITING FROM /goog/cl_auth_base FINAL
          CREATE PUBLIC.
          PUBLIC SECTION.
              CONSTANTS: BEGIN OF c_com_scn_sdk,
                                      wif     TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_WIF',
                                      apik_sm TYPE /goog/comm_scenario VALUE '/GOOG/COM_SDK_APIKSM',
                                      END OF c_com_scn_sdk.
              METHODS get_access_token REDEFINITION.
      PROTECTED SECTION.
      PRIVATE SECTION.
      ENDCLASS.
      CLASS zcl_test_gemini_api IMPLEMENTATION.
          METHOD get_access_token.
              ev_auth_type = CONV #( apikey_sm ).
              ev_token = API_KEY.
          ENDMETHOD.
      ENDCLASS.
      

      Remplacez API_KEY par la clé API que vous avez générée dans Google AI Studio.

    9. Activez votre classe Z.

    10. Accédez aux propriétés de cette classe, accédez à l'onglet État de l'API, puis publiez l'API avec l'état du contrat C1.

      Pour en savoir plus sur l'état de l'API, consultez la section Libérer des objets de développement.

  2. Accéder à la plate-forme de lancement SAP Fiori du système BTP ABAP dans lequel le SDK ABAP pour Google Cloud est installé.

  3. Accédez à l'application SDK Google: configuration principale, puis procédez comme suit:

    1. Cliquez sur Créer.
    2. Dans la boîte de dialogue Create new entry (Créer une entrée), saisissez des valeurs pour les champs suivants:

      Champ Description
      Nom de la clé Google Cloud Spécifiez un nom de configuration de clé client, par exemple GEMINI_QUICK_TEST.
      Nom du compte de service Google Cloud Laissez ce champ vide.
      Champ d'application Google Cloud Laissez ce champ vide.
      Identifiant de projet Google Cloud Spécifiez l'ID du projet Google Cloud dans lequel vous avez créé la clé API.
      Numéro de projet Google Cloud Spécifiez le numéro du projet Google Cloud dans lequel vous avez créé la clé API.
      Type d'authentification Sélectionnez Z.
      Classe d'authentification Sélectionnez la classe ZCL_TEST_GEMINI_API que vous avez créée à l'étape précédente.
    3. Enregistrez la nouvelle entrée.

  4. Notez la clé client. Vous utilisez cette clé client pour l'authentification.

Exécuter un exemple de code

Vous pouvez explorer les fonctionnalités de l'API Gemini en exécutant l'exemple de code suivant:

  1. Dans la plate-forme Eclipse, effectuez un clic droit sur le package dans lequel vous souhaitez créer une classe, puis cliquez sur New > ABAP Class (Nouveau > Classe ABAP).

  2. Dans le champ Nom, saisissez ZCL_INVOKE_LLM.

  3. Dans le champ Description, saisissez Sample class for testing Gemini API.

  4. Cliquez sur Suivant.

  5. Sélectionnez une demande de transport ou créez-en une.

  6. Cliquez sur Terminer.

  7. Dans l'éditeur, remplacez le code existant par le code suivant:

    CLASS zcl_invoke_llm DEFINITION
    PUBLIC FINAL
    CREATE PUBLIC.
    PUBLIC SECTION.
        INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    CLASS zcl_invoke_llm IMPLEMENTATION.
    METHOD if_oo_adt_classrun~main.
        DATA lv_sys_instruction TYPE string.
        DATA lv_client_key      TYPE /goog/keyname.
        DATA lv_model_id        TYPE string.
        DATA lv_max_tokens      TYPE int4.
        DATA lv_resp_mime_type  TYPE string.
        DATA lv_prompt          TYPE string.
        DATA lv_temperature     TYPE /goog/num_float.
        DATA lv_top_k           TYPE int4.
        DATA lv_top_p           TYPE /goog/num_float.
        DATA ls_input           TYPE /goog/cl_generativelang_v1beta=>ty_045.
        DATA ls_output          TYPE /goog/cl_generativelang_v1beta=>ty_046.
        DATA ls_part            TYPE /goog/cl_generativelang_v1beta=>ty_068.
        DATA lt_parts           TYPE /goog/cl_generativelang_v1beta=>ty_t_068.
        DATA ls_content         TYPE /goog/cl_generativelang_v1beta=>ty_018.
        DATA lv_msg             TYPE string.
        DATA ls_raw             TYPE string.
        DATA lv_err_msg         TYPE string.
        DATA lo_cx_sdk          TYPE REF TO /goog/cx_sdk.
    
        " TODO Developer: Set values for Mandatory Fields
        lv_model_id = 'gemini-1.5-flash'.  " You can also change the Model ID of your choosing
        lv_client_key = 'GEMINI_QUICK_TEST'.    " Client key configured
    
        " TODO Developer: Set values for Optional Fields, if required
        " lv_temperature =
        " lv_top_k =
        " lv_top_p =
        " lv_max_tokens =
    
        " TODO Developer: (Optional) Set the System Instruction
            lv_sys_instruction  = 'You are an Italian Chef in a 5 Star Restaurant'.
    
        " TODO Developer: (Mandatory) Set the Prompt
            lv_prompt = 'Give me a recipe to make Margarita Pizza'.
        IF lv_temperature IS NOT INITIAL.
            ls_input-generation_config-temperature = lv_temperature.
        ENDIF.
        IF lv_top_k IS NOT INITIAL.
            ls_input-generation_config-top_k = lv_top_k.
        ENDIF.
        IF lv_top_p IS NOT INITIAL.
            ls_input-generation_config-top_p = lv_top_p.
        ENDIF.
        IF lv_max_tokens IS NOT INITIAL.
            ls_input-generation_config-max_output_tokens = lv_max_tokens.
        ENDIF.
        IF lv_sys_instruction IS NOT INITIAL.
            ls_input-system_instruction-role = 'system'.
            ls_part-text = lv_sys_instruction.
            APPEND ls_part TO ls_input-system_instruction-parts.
            CLEAR ls_part.
        ENDIF.
        ls_content-role = 'user'.
        IF lv_prompt IS NOT INITIAL.
            ls_part-text = lv_prompt.
            APPEND ls_part TO ls_content-parts.
            CLEAR ls_part.
        ENDIF.
        APPEND ls_content TO ls_input-contents.
        CLEAR ls_content.
        TRY.
                DATA(lo_llm_invoker) = NEW /goog/cl_generativelang_v1beta( iv_key_name = lv_client_key ).
            CATCH /goog/cx_sdk INTO lo_cx_sdk.
                lv_err_msg = lo_cx_sdk->get_text( ).
    out->write( |Exception occurred, reason: { lv_err_msg }| ).
        ENDTRY.
        TRY.
                lo_llm_invoker->generate_content_models( EXPORTING iv_p_models_id = lv_model_id
                                                                                                                        is_input       = ls_input
                                                                                                    IMPORTING es_raw         = ls_raw
                                                                                                                        es_output      = ls_output
                                                                                                                        ev_ret_code    = DATA(lv_ret_code)
                                                                                                                        ev_err_text    = DATA(lv_err_text)
                                                                                                                        es_err_resp    = DATA(ls_err_resp) ).
            CATCH /goog/cx_sdk INTO lo_cx_sdk.
                lv_err_msg = lo_cx_sdk->get_text( ).
                out->write( |Exception occurred, reason: { lv_err_msg }| ).
                RETURN.
        ENDTRY.
        IF lo_llm_invoker->is_success( lv_ret_code ) = abap_true.
            ASSIGN ls_output-candidates[ 1 ] TO FIELD-SYMBOL(<ls_candidate>).
            IF sy-subrc = 0.
                lt_parts = <ls_candidate>-content-parts.
                ASSIGN lt_parts[ 1 ] TO FIELD-SYMBOL(<ls_part>).
                IF sy-subrc = 0.
                    DATA(lv_response) = <ls_part>-text.
                    out->write( lv_response ).
                ELSE.
                    out->write( |Model stopped generating response due to finish reason: { <ls_candidate>-finish_reason }| ).
                    out->write( |Read more about finish reason in the below link:| ).
                    out->write( |https://cloud.google.com/vertex-ai/docs/reference/rest/v1/GenerateContentResponse#FinishReason| ).
                ENDIF.
            ENDIF.
        ELSE.
            out->write( |Error occurred, reason: { lv_ret_code }:{ lv_err_text }| ).
        ENDIF.
    ENDMETHOD.
    ENDCLASS.
    
  8. Activez votre cours.

  9. Exécutez le code ABAP.

Créer des prototypes de cas d'utilisation de l'IA à l'aide d'ABAP

Vous pouvez créer des prototypes d'applications SAP à l'aide des classes /GOOG/CL_GENERATIVELANGUAGE_V1 et /GOOG/CL_GENERATIVELANG_V1BETA fournies avec le SDK. Vous pouvez appeler ces classes à partir de votre environnement ABAP à l'aide de la clé client que vous avez créée dans la section Configurer l'authentification.

Étape suivante