取得 Gemini 針對 BigQuery 資料產生的洞察資料

針對 ABAP 的 BigQuery AI 和 ML SDK,您可以使用 Gemini 查詢 BigQuery 中儲存的企業資料,並從以 ABAP 為基礎的代理程式或應用程式中傳回結果。有了 SDK,您就可以使用 Gemini 模型執行下列操作:

  • 在 BigQuery 中運用文字資料產生洞察資訊
  • 在 BigQuery 中運用圖片或影片資料產生洞察資訊

您可以使用 BigQuery 函式 ML.GENERATE_TEXT,針對儲存在 BigQuery 資料集中的企業資料執行 Gemini 洞察。

您可以在 Vertex AI 上存取 Gemini 模型,方法是在 BigQuery ML 中建立代表 Vertex AI 模型端點的遠端模型。在您針對要使用的 Vertex AI 模型建立遠端模型後,即可針對遠端模型執行 BigQuery ML 函式,以便存取該模型的功能。

事前準備

在使用 BigQuery AI and ML SDK for ABAP 搭配 Gemini 模型之前,請確認您或管理員已完成下列必要條件:

定價

我們提供免費的 ABAP 適用 BigQuery AI 和 ML SDK。不過,您必須負責支付 BigQuery 和 Vertex AI 平台的費用,如下所示:

  • BigQuery ML:您會因在 BigQuery 中處理的資料而產生費用。
  • Vertex AI:您必須為呼叫由遠端模型代表的 Vertex AI 服務付費。

如要根據預測用量產生預估費用,請使用Pricing Calculator

如要進一步瞭解 BigQuery 的定價,請參閱 BigQuery 定價頁面。

如要進一步瞭解 Vertex AI 定價,請參閱 Vertex AI 定價頁面。

在 BigQuery 上執行 Gemini 查詢

本節說明如何使用 ABAP 適用的 BigQuery AI 和 ML SDK,從 BigQuery 中的企業資料產生 Gemini 洞察資料。

您可以使用 SDK 隨附的 ABAP 類別 /GOOG/CL_BQ_GENERATIVE_MODEL,透過 BigQuery 函式 ML.GENERATE_TEXT 執行 Gemini 查詢。

設定 Gemini 查詢

您可以使用 SDK 以下列方式執行 Gemini 查詢:

  • 儲存查詢,以便在 BigQuery 中執行 Gemini。使用 /GOOG/CL_BQ_QUERY 類別,並在從應用程式邏輯中例項化類別時提供已儲存的查詢名稱。

    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.
    

    更改下列內容:

    • CLIENT_KEY:您在驗證設定期間為驗證設定的用戶端金鑰。 Google Cloud
    • QUERY_LOCATION_ID:查詢儲存的 Google Cloud 位置。
    • SAVED_QUERY_NAME:在 BigQuery 中儲存查詢時使用的查詢名稱。
  • 從應用程式邏輯中例項化 /GOOG/CL_BQ_QUERY 類別時,請傳遞查詢文字以叫用 Gemini。

    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.
    

    更改下列內容:

    • CLIENT_KEY:您在驗證設定期間為驗證設定的用戶端金鑰。 Google Cloud
    • QUERY_LOCATION_ID:查詢儲存的 Google Cloud 位置。
    • QUERY_TEXT:您要透過 Gemini 執行的查詢文字。

當您使用已儲存的查詢名稱或直接查詢文字,將 /GOOG/CL_BQ_QUERY 類別例項化時,系統會在類別中設定查詢。接著,您可以將類別參照做為輸入內容傳遞至 /GOOG/CL_BQ_GENERATIVE_MODEL ABAP 類別,以便叫用查詢。

將 BigQuery Gemini 叫用器類別例項化

如要在 BigQuery 資料集上叫用 Gemini 文字和多模態模型,請使用 /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.

CLIENT_KEY 替換為您在驗證設定期間為驗證設定的用戶端金鑰。 Google Cloud

執行 Gemini 查詢

如要使用 BigQuery 函式 ML.GENERATE_TEXT 執行 Gemini 查詢,請使用 /GOOG/CL_BQ_GENERATIVE_MODEL 類別的 EXECUTE_QUERY 方法。使用查詢設定的 /GOOG/CL_BQ_QUERY 類別物件會傳遞為方法的輸入內容。

lo_bq_generative_model->execute_query( io_query = lo_bq_query ).

LO_BQ_QUERY設定查詢後的 /GOOG/CL_BQ_QUERY 類別參照。

覆寫模型產生參數

您可以在 BigQuery 的已儲存查詢或傳遞的查詢文字中,定義 Gemini 模型生成參數。不過,如果您需要針對 ABAP 應用程式邏輯中的相同查詢覆寫參數,則可以使用 /GOOG/CL_BQ_GENERATIVE_MODEL 類別的 SET_GENERATION_CONFIG 方法。初始查詢中的產生參數會使用透過此方法傳遞的參數覆寫。

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

更改下列內容:

  • STOP_SEQUENCE:如果模型回應中包含指定字串,則會移除該字串的值。
  • CATEGORY:用於篩選回應的內容安全性類別,請在 ML.GENERATE_TEXT輸入語法下,查看安全設定引數的可能值。
  • THRESHOLD:篩選回應的對應封鎖門檻,請在 ML.GENERATE_TEXT輸入語法下,查看安全設定引數的可能值。
  • TEMPERATURE:控制選取符記時的隨機程度。
  • TOP_P:會影響模型選取輸出符記的方式。
  • TOP_K:會影響模型選取輸出符記的方式。
  • MAX_OUTPUT_TOKENS:設定回覆中可產生的符記數量上限。
  • IS_FLATTEN_JSON_OUTPUT:布林值,決定函式傳回的 JSON 內容是否會剖析為個別資料欄。
  • IS_GROUND_WITH_GOOGLE_SEARCH:布林值,用於決定 Vertex AI 模型在產生回覆時是否使用利用 Google 搜尋建立基準

取得 Gemini 查詢的查詢結果

如要接收 BigQuery ML for Gemini 查詢的已處理回應,並以有意義的方式呈現,請使用 /GOOG/CL_BQ_MODEL_RESPONSE 類別。

/GOOG/CL_BQ_MODEL_RESPONSE 類別擷取的回應會連結至透過 /GOOG/CL_BQ_GENERATIVE_MODEL 類別方法提出的要求,因此您可以在單一陳述式中直接存取回應,而不需要變數來儲存中間結果。

取得文字回應

如要接收模型的文字回覆,請使用 GET_TEXT_RESPONSE 方法。

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

取得查詢工作狀態

BigQuery 中的每個查詢都會以查詢作業的形式執行。如要取得查詢工作的狀態,請使用 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) ).

這個方法會傳回下列工作狀態指標:

  • 查詢是否已完成
  • 建立工作的原因
  • 用於執行查詢而建立的工作參照
  • 查詢的自動產生 ID
  • 這項查詢處理的位元組總數
  • 完整查詢結果集中的資料列總數

取得查詢工作錯誤

如要擷取錯誤 (如有),請使用 GET_QUERY_JOB_ERRORS 方法。

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

取得完成原因

如要取得模型停止為每個資料列產生符記的原因,請使用 GET_FINISH_REASON 方法。

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

取得使用中繼資料

如要取得每個資料列所產生回應的用量中繼資料,請使用 GET_USAGE_METADATA 方法。

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

用量中繼資料包含下列指標:

  • 資料列回應中的符記總數
  • 輸入提示中的符號數量
  • 權杖總數

取得安全評分

如要取得回應的安全評分,請使用 GET_SAFETY_RATING 方法。您必須在輸入查詢中將安全評分設為模型產生參數,才能取得回應的安全評分。

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

取得整體回覆表

如要取得執行 Gemini 查詢的整體回應資料表,請使用 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) ).

系統會根據查詢中設定的產生參數,填入一個回應表格:

  • 如果輸入查詢中未將參數 FLATTEN_JSON_OUTPUT 設為 TRUE,系統就會填入 ET_BQML_RESPONSE
  • 如果輸入查詢中將參數 FLATTEN_JSON_OUTPUT 設為 TRUE,系統就會填入 ET_BQML_RESPONSE_FLATTEN_JSON
  • 如果輸入查詢中參數 FLATTEN_JSON_OUTPUTGROUNDING_WITH_GOOGLE_SEARCH 都設為 TRUEET_BQML_RESPONSE_GROUNDING 就會填入。TRUE

取得依據來源

如要列出模型用來產生回覆的依據來源,請使用 GET_GROUNDING_SOURCE 方法。

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