借助适用于 ABAP 的 BigQuery AI 和 ML SDK,您可以对存储在 BigQuery 中的企业数据使用 Gemini 查询,并从基于 ABAP 的代理或应用返回结果。借助 SDK,您可以使用 Gemini 模型执行以下操作:
- 在 BigQuery 中从文本数据生成数据洞见
- 在 BigQuery 中从图片或视频数据生成数据洞见
您可以使用 BigQuery 函数 ML.GENERATE_TEXT
对存储在 BigQuery 数据集中的企业数据运行基于 Gemini 的数据洞见。
您可以通过在 BigQuery ML 中创建表示 Vertex AI 模型端点的远程模型,来访问 Vertex AI 上的 Gemini 模型。基于您要使用的 Vertex AI 模型创建远程模型后,您可以通过对远程模型运行 BigQuery ML 函数来访问该模型的功能。
准备工作
在将适用于 ABAP 的 BigQuery AI 和 ML SDK 与 Gemini 模型搭配使用之前,请确保您或您的管理员已满足以下前提条件:
- 在您的 Google Cloud 项目中启用了 BigQuery API、BigQuery Connection API 和 Vertex AI API。如需了解如何启用 Google Cloud API,请参阅启用 API。
- 确保您的 Google Cloud 项目已启用结算功能。
- 在客户端密钥中为身份验证配置的服务账号必须具有所需的权限。
- 在 SAP 环境中安装了适用于 ABAP 的 BigQuery AI 和 ML SDK。
- 为支持的 Gemini 模型创建了远程模型。
价格
适用于 ABAP 的 BigQuery AI 和 ML SDK 可免费使用。但是,您需要承担 BigQuery 和 Vertex AI 平台的以下费用:
- BigQuery ML:您在 BigQuery 中处理数据会产生费用。
- Vertex AI:调用由远程模型表示的 Vertex AI 服务会产生费用。
您可使用价格计算器根据您的预计使用量来估算费用。
如需详细了解 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 查询:
保存查询,以运行 Gemini in BigQuery。 使用类
/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
:用于控制 token 选择的随机程度的值。TOP_P
:用于更改模型选择输出 token 的方式的值。TOP_K
:用于更改模型选择输出 token 的方式的值。MAX_OUTPUT_TOKENS
:用于设置回答中可生成的 token 数上限的值。IS_FLATTEN_JSON_OUTPUT
:用于确定函数返回的 JSON 内容是否解析为单独的列的布尔值。IS_GROUND_WITH_GOOGLE_SEARCH
:用于确定 Vertex AI 模型在生成回答时是否使用通过 Google 搜索建立依据的布尔值。
获取 Gemini 查询的查询结果
如需接收 BigQuery ML 对 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( ).
获取完成原因
如需获取模型停止为每行生成 token 的原因,请使用 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( ).
用量元数据包含以下指标:
- 一行回答中的 token 总数
- 输入提示中的 token 数量
- token 总数
获取安全性评分
如需获取回答的安全评分,请使用 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_OUTPUT
设置为TRUE
且在输入查询中将参数GROUNDING_WITH_GOOGLE_SEARCH
也设置为TRUE
时,系统会填充ET_BQML_RESPONSE_GROUNDING
。
获取建立依据来源
如需列出模型用于生成回答的建立依据来源,请使用 GET_GROUNDING_SOURCE
方法。
DATA(lt_query_grounding_sources) = lo_bq_generative_model->execute_query( io_query = lo_bq_query
)->get_grounding_source( ).