借助适用于 ABAP 的 BigQuery AI 和 ML SDK,您可以通过基于自然语言的搜索字符串对 BigQuery 中的向量化企业数据执行向量搜索,并从基于 ABAP 的代理或应用返回结果。
借助 BigQuery 向量搜索,您可以使用 GoogleSQL 使用向量索引执行语义搜索,以获取近似结果。借助向量搜索,您可以使用高维向量或嵌入在大型数据集中查找语义相似的数据点。您可以将向量嵌入存储在 BigQuery 中,将 BigQuery 用作向量数据库,并使用 BigQuery 函数 VECTOR_SEARCH
对其进行向量相似性搜索。
准备工作
在将适用于 ABAP 的 BigQuery AI 和 ML SDK 与 Gemini 模型搭配使用之前,请确保您或您的管理员已满足以下前提条件:
- 在 Google Cloud 项目中启用了 BigQuery API。如需了解如何启用 Google Cloud API,请参阅启用 API。
- 您的 Google Cloud 项目已启用结算功能。
- 您已生成向量嵌入并将其存储在 BigQuery 中的向量数据集中。如需了解如何使用适用于 ABAP 的 BigQuery AI 和 ML SDK 从 SAP 应用中执行此操作,请参阅生成嵌入。
- 您已创建企业数据的向量索引。如需了解详情,请参阅创建向量索引。
- 向用于进行身份验证的客户端密钥中配置的服务账号授予所需权限。
- 在 SAP 环境中安装了适用于 ABAP 的 BigQuery AI 和 ML SDK。
价格
适用于 ABAP 的 BigQuery AI 和 ML SDK 可免费使用。不过,您需要为使用 BigQuery 计算价格的 CREATE VECTOR INDEX
语句和 VECTOR_SEARCH
函数支付费用。
您可使用价格计算器根据您的预计使用量来估算费用。
如需详细了解 BigQuery 价格,请参阅 BigQuery 价格页面。
在 BigQuery 上执行向量搜索
本部分介绍了如何使用适用于 ABAP 的 BigQuery AI 和 ML SDK 对 ABAP 应用中存储在 BigQuery 中的企业数据执行向量语义搜索。
实例化 BigQuery 向量搜索调用程序类
如需使用搜索字符串执行向量搜索,您可以实例化类 /GOOG/CL_BQ_VECTOR_SEARCH
。
TRY.
DATA(lo_bq_vector_search) = NEW /goog/cl_bq_vector_search( 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 函数 VECTOR_SEARCH
执行向量搜索,请使用类 /GOOG/CL_BQ_VECTOR_SEARCH
的方法 FIND_NEAREST_NEIGHBORS
。
使用查询设置的类 /GOOG/CL_BQ_QUERY
的对象会作为输入传递给该方法。
lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query ).
LO_BQ_QUERY
是设置查询后类 /GOOG/CL_BQ_QUERY
的引用。您可以从查询文本中传递搜索字符串。
替换向量搜索参数
您可以在 BigQuery 上保存的查询或传递的查询文本中定义向量搜索参数(在 VECTOR_SEARCH
函数定义下)。但是,如果您需要从 ABAP 应用逻辑替换同一查询的参数,可以使用类 /GOOG/CL_BQ_VECTOR_SEARCH
的 SET_SEARCH_PARAMETERS
方法来执行此操作。初始查询中的搜索参数会完全替换为通过此方法传递的参数。
lo_bq_vector_search->set_search_parameters( iv_top_k = TOP_K
iv_distance_type = DISTANCE_TYPE
iv_fraction_lists_to_search = 'FRACTION_LISTS_TO_SEARCH' ).
替换以下内容:
TOP_K
:INT64
值,用于指定要返回的最近邻项的数量。DISTANCE_TYPE
:一个字符串值,用于指定用于计算两个向量之间距离的指标类型,请从VECTOR_SEARCH
函数的定义下的DISTANCE_TYPE
参数中查找可能的值。FRACTION_LISTS_TO_SEARCH
:一个字符串值,用于指定要搜索的列表的百分比,在VECTOR_SEARCH
函数的定义选项下从FRACTION_LISTS_TO_SEARCH
参数中查找可能的值。
获取向量搜索回答
如需接收 BigQuery ML 对向量搜索查询的处理后的回答,并以有意义的方式进行呈现,请使用类 /GOOG/CL_BQ_SEARCH_RESPONSE
。
由 /GOOG/CL_BQ_SEARCH_RESPONSE
类捕获的响应会链接到通过 /GOOG/CL_BQ_VECTOR_SEARCH
类的方法发出的请求,以便您可以在单个语句中直接访问响应,而无需使用变量来存储中间结果。
获取搜索字符串的最近邻项
如需获取搜索字符串的最近邻项,请使用 GET_NEAREST_NEIGHBORS
方法。
返回的邻居项数量取决于在调用的查询中函数 VECTOR_SEARCH
的 TOP_K
参数中指定或设置的值。
DATA(lt_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
)->get_nearest_neighbors( ).
LT_SEARCH_RESPONSE
还包含搜索响应项与搜索字符串的距离,以指示相似度。
获取搜索字符串的最近邻项
如需获取搜索字符串的最近邻项,请使用 GET_NEAREST_NEIGHBOR
方法。
这样一来,系统只会根据搜索字符串提取最近邻项,而不管在调用的查询中函数 VECTOR_SEARCH
的 TOP_K
参数中指定或设置的值是什么。
DATA(ls_search_response) = lo_bq_vector_search->find_nearest_neighbors( io_query = lo_bq_query
)->get_nearest_neighbor( ).
LS_SEARCH_RESPONSE
还包含搜索响应与搜索字符串的距离,以指示相似度。