您可以使用 ABAP 適用的 BigQuery AI 和 ML SDK,在 BigQuery 中產生及管理企業資料的嵌入資料。
BigQuery 可做為具成本效益的向量資料庫,讓您使用向量搜尋功能,直接在資料倉儲中儲存及查詢嵌入資料 (資料的向量表示法),進而減少需要使用個別向量資料庫基礎架構的需求。您可以使用 BigQuery 函式 ML.GENERATE_EMBEDDING
,為儲存在 BigQuery 資料集中的企業資料產生嵌入資料。
您可以在 BigQuery ML 中建立遠端模型 (代表 Vertex AI 模型的端點),藉此存取 Vertex AI 上的嵌入模型。在您針對要使用的 Vertex AI 模型建立遠端模型後,即可針對遠端模型執行 BigQuery ML 函式,以便存取該模型的功能。
透過 ABAP 版 BigQuery AI 和 ML SDK,您可以將嵌入模型用於以下用途:
- 為文字資料產生並儲存嵌入項目
- 為多模態資料產生及儲存嵌入項目
- 將最新的企業資料更新至 BigQuery 向量資料庫
事前準備
在使用 ABAP 適用的 BigQuery AI 和 ML SDK 搭配嵌入模型前,請確認您或管理員已完成下列必要條件:
- 在 Google Cloud 專案中啟用 BigQuery API、BigQuery Connection API 和 Vertex AI API。如要瞭解如何啟用 Google Cloud API,請參閱「啟用 API」。
- 請確認您已為 Google Cloud 專案啟用計費功能。
- 用於驗證的用戶端金鑰中設定的服務帳戶,必須具備必要權限。
- 在 SAP 環境中安裝 ABAP 適用的 BigQuery AI 和 ML SDK。
- 為支援的嵌入模型建立遠端模型。
定價
我們提供免費的 ABAP 適用 BigQuery AI 和 ML SDK。不過,您必須負責支付 BigQuery 和 Vertex AI 平台的費用:
- BigQuery ML:您會因在 BigQuery 中處理的資料而產生費用。
- Vertex AI:您會因呼叫由遠端模型代表的 Vertex AI 服務而產生費用。
如要根據預測用量產生預估費用,請使用Pricing Calculator。
如要進一步瞭解 BigQuery 的定價,請參閱 BigQuery 定價頁面。
如要進一步瞭解 Vertex AI 定價,請參閱 Vertex AI 定價頁面。
在 BigQuery 上產生嵌入
本節說明如何使用 ABAP 專用的 BigQuery AI 和 ML SDK,針對儲存在 BigQuery 中的企業資料,從 ABAP 應用程式邏輯產生嵌入資料。
將 BigQuery 嵌入呼叫器類別例項化
如要在 BigQuery 資料集上叫用嵌入式文字和多模態模型,請將 /GOOG/CL_BQ_GENERATIVE_MODEL
類別例項化。
TRY.
DATA(lo_bqml_embeddings_model) = NEW /goog/cl_bq_embeddings_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
生成嵌入項目
如要執行查詢,並使用 BigQuery 函式 ML.GENERATE_EMBEDDING
為文字和多模態資料產生嵌入資料,請使用 /GOOG/CL_BQ_EMBEDDINGS_MODEL
類別的 GENERATE_EMBEDDINGS
方法。
使用查詢設定的 /GOOG/CL_BQ_QUERY
類別物件會做為輸入內容傳遞至方法。
lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query ).
LO_BQ_QUERY
是設定查詢後的 /GOOG/CL_BQ_QUERY
類別參照。
覆寫模型產生參數
您可以在 BigQuery 的已儲存查詢或傳遞的查詢文字中,定義嵌入模型產生參數。不過,如果您需要針對 ABAP 應用程式邏輯中的相同查詢覆寫參數,則可以使用 /GOOG/CL_BQ_EMBEDDINGS_MODEL
類別的 SET_GENERATION_CONFIG
方法。初始查詢中的產生參數會覆寫透過此方法傳遞的參數。
lo_bqml_embeddings_model->set_generation_config( iv_flatten_json_output = 'IS_FLATTEN_JSON_OUTPUT'
iv_task_type = 'TASK_TYPE'
iv_output_dimensionality = 'OUTPUT_DIMENSIONALITY' ).
更改下列內容:
IS_FLATTEN_JSON_OUTPUT
:布林值,決定函式傳回的 JSON 內容是否會剖析為個別資料欄。TASK_TYPE
:指定預期的後端應用程式,以協助模型產生品質更優良的嵌入資料。如要查看ML.GENERATE_EMBEDDING
的輸入語法,請參閱task_type
引數的可能值。OUTPUT_DIMENSIONALITY
:這個值會指定產生嵌入資料時要使用的維度數量。如要查看ML.GENERATE_EMBEDDING
的輸入語法,請參閱output_dimensionality
引數的可能值。
取得用於產生嵌入的查詢查詢結果
為了接收 BigQuery ML 產生的回應,以便產生嵌入資料並以有意義的方式呈現,SDK 會在 /GOOG/CL_BQ_GENERATIVE_MODEL
類別中使用鏈結方法,讓您能夠在單一陳述式中直接存取回應,而不需要變數來儲存中間結果。
取得文字嵌入向量
如要取得 ABAP 應用程式邏輯中每個資料列的文字嵌入向量,請使用 GET_TEXT_EMBEDDING_VECTORS
方法。
DATA(lt_embeddings) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
)->get_text_embedding_vectors( ).
取得文字嵌入狀態
如要取得每個資料列的每個文字嵌入產生作業狀態,請使用 GET_TEXT_EMBEDDING_STATUS
方法。
如果作業成功,狀態會為空白。
DATA(lt_embeddings_status) = lo_bqml_embeddings_model->generate_embeddings( io_query = lo_bq_query
)->get_text_embedding_status( ).
取得查詢工作狀態
每項 BigQuery 查詢都會以查詢工作執行。
如要取得嵌入查詢工作的狀態,請使用 GET_QUERY_JOB_STATUS
方法。
lo_bqml_embeddings_model->generate_embeddings( 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_bqml_embeddings_model->execute_query( io_query = lo_bq_query
)->get_query_job_errors( ).
取得文字嵌入的整體回應
如要取得執行的文字嵌入查詢的整體回覆表格,請使用 GET_TEXT_EMBEDDING_RESPONSE
方法。
只有在查詢中將模型產生參數 FLATTEN_JSON_OUTPUT
設為 TRUE
時,才會填入回覆。
DATA(lt_text_embeddings_response) = lo_bqml_embeddings_model->execute_query( io_query = lo_bq_query
)->get_text_embedding_response( ).