获取有关 BigQuery 数据的 Gemini 分析洞见

借助适用于 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 模型搭配使用之前,请确保您或您的管理员已满足以下前提条件:

价格

适用于 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( ).