借助适用于 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 服务会产生费用。
您可使用价格计算器根据您的预计使用量来估算费用。
如需详细了解 BigQuery 价格,请参阅 BigQuery 价格页面。
如需详细了解 Vertex AI 价格,请参阅 Vertex AI 价格页面。
在 BigQuery 上生成嵌入
本部分介绍了如何使用适用于 ABAP 的 BigQuery AI 和 ML SDK 为 ABAP 应用逻辑中存储在 BigQuery 中的企业数据生成嵌入。
实例化 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( ).