Obtenir des insights Gemini sur les données BigQuery

Le SDK BigQuery AI et ML pour ABAP vous permet d'utiliser des requêtes Gemini sur vos données d'entreprise stockées dans BigQuery et de récupérer les résultats à partir de vos agents ou applications basés sur ABAP. Avec le SDK, vous pouvez utiliser des modèles Gemini pour effectuer les opérations suivantes:

  • Générer des insights à partir de données textuelles dans BigQuery
  • Générer des insights à partir de données image ou vidéo dans BigQuery

Vous pouvez exécuter des insights basés sur Gemini sur vos données d'entreprise stockées dans vos ensembles de données BigQuery à l'aide de la fonction BigQuery ML.GENERATE_TEXT.

Vous pouvez accéder aux modèles Gemini sur Vertex AI en créant un modèle distant dans BigQuery ML qui représente le point de terminaison du modèle Vertex AI. Une fois que vous avez créé un modèle distant basé sur le modèle Vertex AI que vous souhaitez utiliser, vous pouvez accéder aux fonctionnalités de ce modèle en exécutant la fonction BigQuery ML sur le modèle distant.

Avant de commencer

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

Tarifs

Le SDK BigQuery AI et ML pour ABAP est proposé sans frais. Toutefois, vous êtes responsable des frais sur les plates-formes BigQuery et Vertex AI comme suit:

  • BigQuery ML: les données que vous traitez dans BigQuery sont facturées.
  • Vertex AI: des frais vous sont facturés pour les appels au service Vertex AI représenté par le modèle distant.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.

Pour en savoir plus sur les tarifs de BigQuery, consultez la page Tarifs de BigQuery.

Pour en savoir plus sur les tarifs de Vertex AI, consultez la page Tarifs de Vertex AI.

Exécuter des requêtes Gemini dans BigQuery

Cette section explique comment générer des insights basés sur Gemini à partir de données d'entreprise dans BigQuery à l'aide du SDK BigQuery AI et ML pour ABAP.

La classe ABAP /GOOG/CL_BQ_GENERATIVE_MODEL fournie avec le SDK vous permet d'exécuter des requêtes Gemini à l'aide de la fonction BigQuery ML.GENERATE_TEXT.

Définir la requête Gemini

Vous pouvez utiliser le SDK pour exécuter des requêtes Gemini de différentes manières:

  • Enregistrez votre requête pour exécuter Gemini dans BigQuery. Utilisez la classe /GOOG/CL_BQ_QUERY et fournissez le nom de la requête enregistrée lorsque vous instanciez la classe à partir de votre logique d'application.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_name  = 'SAVED_QUERY_NAME' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Remplacez les éléments suivants :

    • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
    • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
    • SAVED_QUERY_NAME: nom de la requête avec laquelle la requête est enregistrée dans BigQuery.
  • Transmettez le texte de la requête pour appeler Gemini lorsque vous instanciez la classe /GOOG/CL_BQ_QUERY à partir de la logique de votre application.

    TRY.
        DATA(lo_bq_query) = NEW /goog/cl_bq_query( iv_key         = 'CLIENT_KEY'
                                                  iv_location_id = 'QUERY_LOCATION_ID'
          iv_query_text  = 'QUERY_TEXT' ).
    CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
        cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
    
    ENDTRY.
    

    Remplacez les éléments suivants :

    • CLIENT_KEY: clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.
    • QUERY_LOCATION_ID: emplacement Google Cloud où la requête est enregistrée.
    • QUERY_TEXT: texte de la requête que vous souhaitez exécuter avec Gemini.

Lorsque vous instanciez la classe /GOOG/CL_BQ_QUERY avec le nom de la requête enregistrée ou le texte de la requête directe, la requête est définie dans la classe. Vous pouvez ensuite transmettre la référence de classe en entrée à la classe ABAP /GOOG/CL_BQ_GENERATIVE_MODEL pour appeler la requête.

Instancier la classe d'appelant Gemini BigQuery

Pour appeler les modèles textuels et multimodaux Gemini sur des ensembles de données BigQuery, utilisez la classe /GOOG/CL_BQ_GENERATIVE_MODEL.

TRY.
    DATA(lo_bq_generative_model) = NEW /goog/cl_bq_generative_model( iv_key = 'CLIENT_KEY' ).
CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Remplacez CLIENT_KEY par la clé client que vous avez configurée pour l'authentification à Google Cloud lors de la configuration de l'authentification.

Exécuter une requête Gemini

Pour exécuter des requêtes Gemini avec la fonction BigQuery ML.GENERATE_TEXT, utilisez la méthode EXECUTE_QUERY de la classe /GOOG/CL_BQ_GENERATIVE_MODEL. L'objet de la classe /GOOG/CL_BQ_QUERY défini avec la requête est transmis en entrée à la méthode.

lo_bq_generative_model->execute_query( io_query = lo_bq_query ).

LO_BQ_QUERY est la référence de la classe /GOOG/CL_BQ_QUERY après avoir défini la requête.

Remplacer les paramètres de génération de modèle

Vous pouvez définir des paramètres de génération de modèle Gemini dans une requête enregistrée dans BigQuery ou dans le texte de la requête transmise. Toutefois, si vous devez remplacer les paramètres de la même requête à partir de la logique d'application ABAP, vous pouvez utiliser la méthode SET_GENERATION_CONFIG de la classe /GOOG/CL_BQ_GENERATIVE_MODEL. Les paramètres de génération de la requête initiale sont remplacés par les paramètres transmis via cette méthode.

DATA lt_stop_sequences TYPE /goog/cl_bigquery_v2=>ty_t_string.
DATA lt_safety_settings TYPE /goog/cl_bq_generative_model=>ty_t_safety_settings.
DATA ls_safety_settings TYPE /goog/cl_bq_generative_model=>ty_safety_setting.

APPEND 'STOP_SEQUENCE' TO lt_stop_sequences.

ls_safety_settings-category = 'CATEGORY'.
ls_safety_settings-threshold = 'THRESHOLD'.

APPEND ls_safety_settings TO lt_safety_settings.

lo_bq_generative_model->set_generation_config( iv_temperature               = 'TEMPERATURE'
                               iv_top_p                     = 'TOP_P'
       iv_top_k                     = 'TOP_K'
       iv_max_output_tokens         = 'MAX_OUTPUT_TOKENS'
       iv_flatten_json_output       = 'IS_FLATTEN_JSON_OUTPUT'
       iv_ground_with_google_search = 'IS_GROUND_WITH_GOOGLE_SEARCH'
it_stop_sequences            = lt_stop_sequences
it_safety_settings           = lt_safety_settings ).

Remplacez les éléments suivants :

  • STOP_SEQUENCE: valeur qui supprime les chaînes spécifiées si elles sont incluses dans les réponses du modèle.
  • CATEGORY: catégorie de sécurité du contenu à filtrer. Recherchez les valeurs probables de l'argument des paramètres de sécurité sous la syntaxe d'entrée pour ML.GENERATE_TEXT.
  • THRESHOLD: seuil de blocage correspondant pour filtrer les réponses. Recherchez les valeurs probables de l'argument des paramètres de sécurité sous Syntaxe d'entrée pour ML.GENERATE_TEXT.
  • TEMPERATURE: valeur qui contrôle le degré de randomisation dans la sélection des jetons.
  • TOP_P: valeur qui modifie la façon dont le modèle sélectionne les jetons pour la sortie.
  • TOP_K: valeur qui modifie la façon dont le modèle sélectionne les jetons pour la sortie.
  • MAX_OUTPUT_TOKENS: valeur qui définit le nombre maximal de jetons pouvant être générés dans la réponse.
  • IS_FLATTEN_JSON_OUTPUT: valeur booléenne qui détermine si le contenu JSON renvoyé par la fonction est analysé dans des colonnes distinctes.
  • IS_GROUND_WITH_GOOGLE_SEARCH: valeur booléenne qui détermine si le modèle Vertex AI utilise l'ancrage avec la recherche Google lors de la génération de réponses.

Obtenir les résultats des requêtes Gemini

Pour recevoir des réponses traitées par BigQuery ML pour les requêtes Gemini et les présenter de manière pertinente, utilisez la classe /GOOG/CL_BQ_MODEL_RESPONSE.

La réponse capturée par la classe /GOOG/CL_BQ_MODEL_RESPONSE est associée aux requêtes effectuées via les méthodes de la classe /GOOG/CL_BQ_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, utilisez la méthode GET_TEXT_RESPONSE.

DATA(lt_bq_response) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                            )->get_text_response( ).

Obtenir l'état d'une requête

Chaque requête dans BigQuery est exécutée en tant que tâche de requête. Pour obtenir l'état de la tâche de requête, utilisez la méthode GET_QUERY_JOB_STATUS.

lo_bq_generative_model->execute_query( io_query = lo_bq_query
                     )->get_query_job_status(
IMPORTING ev_job_complete          = DATA(lv_job_complete)
  ev_job_creation_reason   = DATA(lv_job_creation_reason)
  ev_job_id                = DATA(lv_job_id)
  ev_query_id              = DATA(lv_query_id)
  ev_total_bytes_processed = DATA(lv_total_bytes_processed)
  ev_total_rows            = DATA(lv_total_rows) ).

La méthode renvoie les métriques d'état de la tâche suivantes:

  • Indique si la requête est terminée ou non
  • Raison pour laquelle une tâche a été créée
  • Référence à la tâche créée pour exécuter la requête
  • ID généré automatiquement pour la requête
  • Nombre total d'octets traités pour cette requête
  • Nombre total de lignes dans l'ensemble de résultats de la requête complète

Obtenir les erreurs de requête

Pour récupérer les erreurs (le cas échéant), utilisez la méthode GET_QUERY_JOB_ERRORS.

DATA(lt_query_job_errors) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                 )->get_query_job_errors( ).

Obtenir le motif de fin

Pour connaître la raison pour laquelle le modèle a cessé de générer des jetons pour chaque ligne, utilisez la méthode GET_FINISH_REASON.

DATA(lt_finish_reason) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                              )->get_finish_reason( ).

Obtenir des métadonnées d'utilisation

Pour obtenir les métadonnées d'utilisation de la réponse générée pour chaque ligne, utilisez la méthode GET_USAGE_METADATA .

DATA(lt_usage_metadata) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_usage_metadata( ).

Les métadonnées d'utilisation se composent des métriques suivantes:

  • Nombre total de jetons dans la réponse pour une ligne
  • Nombre de jetons dans la requête d'entrée
  • Nombre total de jetons

Obtenir une évaluation de sécurité

Pour obtenir la note de sécurité de la réponse, utilisez la méthode GET_SAFETY_RATING. Les évaluations de sécurité doivent être définies comme paramètres de génération de modèle dans la requête d'entrée pour obtenir l'évaluation de sécurité de la réponse.

DATA(lt_safety_ratings) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                               )->get_safety_rating( ).

Obtenir le tableau des réponses globales

Pour obtenir le tableau de réponses global de la requête Gemini que vous exécutez, utilisez la méthode GET_RESPONSE_TABLE.

lo_bq_model_response->get_response_table(
IMPORTING et_bqml_response              = DATA(lt_bqml_response)
                  et_bqml_response_flatten_json = DATA(lt_bqml_response_flatten_json)
                  et_bqml_response_grounding    = DATA(lt_bqml_response_grounding) ).

Un seul tableau de réponses est renseigné en fonction du paramètre de génération défini dans la requête:

  • ET_BQML_RESPONSE est renseigné lorsque le paramètre FLATTEN_JSON_OUTPUT n'est pas défini sur TRUE dans la requête d'entrée.
  • ET_BQML_RESPONSE_FLATTEN_JSON est renseigné lorsque le paramètre FLATTEN_JSON_OUTPUT est défini sur TRUE dans la requête d'entrée.
  • ET_BQML_RESPONSE_GROUNDING est renseigné lorsque le paramètre FLATTEN_JSON_OUTPUT est défini sur TRUE dans la requête d'entrée et que le paramètre GROUNDING_WITH_GOOGLE_SEARCH est également défini sur TRUE dans la requête d'entrée.

Obtenir la source d'ancrage

Pour lister les sources d'ancrage que le modèle a utilisées pour générer les réponses, utilisez la méthode GET_GROUNDING_SOURCE.

DATA(lt_query_grounding_sources) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
                                                        )->get_grounding_source( ).