适用于智能 SAP 应用的 Vertex AI Vector Search

本文档介绍了一个可使用 Vertex AI SDK for ABAP 通过 Vertex AI Vector Search 构建智能 SAP 应用的参考架构。借助 Vector Search,您可以构建超越关键字匹配的 SAP 应用,使用语义理解功能帮助用户从企业数据中精确查找所需内容。您还可以将 Vector Search 与检索增强生成 (RAG) 结合使用,在 SAP 环境中构建强大的 AI 应用。RAG 通过提供来自企业数据的相关背景信息来提高 AI 模型的回答质量,确保 AI 模型始终基于您的企业数据。

本文档的目标受众群体包括 ABAP 开发者、SAP 解决方案架构师和云架构师。本文档假定您熟悉 Vector Search 术语

架构

下图展示了一个在 SAP 应用环境中使用 Vector Search 的参考架构:

适用于 SAP 的 Vector Search

此参考架构包括以下组件:

# 组件 详细信息
1 SAP 中的查询起点

使用以下任一选项开始搜索:

  • OData 服务:通过 SAP 前端应用中的 OData 服务提供搜索查询。
  • SAP 应用逻辑:通过 SAP 应用逻辑(例如 SAP 增强功能、报告或后台作业)提供搜索查询。
2 Vertex AI SDK for ABAP SDK 的向量搜索调用程序模块会根据您的搜索查询执行向量搜索。
3 Vertex AI Vector Search

企业数据会以向量嵌入的形式编入索引,并整理到已部署的索引中。

输入搜索查询后,系统会对这些已编入索引的数据执行向量搜索,以查找最接近的匹配项。

然后,这些最接近的匹配项会返回到 SAP 应用,从而支持语义搜索和 RAG 等功能。

使用的产品

此参考架构使用以下 Google Cloud 产品:

  • Vertex AI SDK for ABAP:提供模块和工具集,以便您使用 ABAP 原生构建以 AI 为中心的应用。
  • Vertex AI Vector Search:使用向量嵌入,可在企业数据中进行大规模高效的搜索。这意味着,您可以按含义和上下文进行搜索,而不仅仅是按关键字进行搜索。

使用场景

下表列出了 Vector Search 在 SAP 应用中的使用场景:

  • 构建推荐引擎:分析用户输入和行为,以便在 SAP 业务(例如产品、公司代码和总账科目)中建议相关内容,而不仅仅是进行关键字匹配。
  • 构建 RAG 流水线:访问并整合来自各种来源的信息,以便使用相关 SAP 和非 SAP 信息来丰富 AI 模型的上下文,从而生成准确且相关的模型回答。
  • 执行语义图片搜索:支持搜索外观相似的图片,这对于购物、视觉发现和医学成像分析非常有用。
  • 执行语义文本搜索:了解文本的含义和上下文,以提高法律、学术和客户反馈分析方面的搜索准确性。
  • 执行基于自然语言的搜索:为用户问题提供即时解答,增强了常见问题解答、知识库和教育工具方面的性能。
  • 执行异常检测:识别金融、网络安全和制造领域中的异常模式和潜在威胁。

设计考虑事项

本部分提供的指导可帮助您使用此参考架构来开发出能够满足特定安全性、隐私性、合规性、费用和性能要求的架构。

安全性、隐私权和合规性

安全和合规性是共担责任。如需了解详情,请参阅 Vertex AI 共担责任

如需了解 Google Cloud在数据隐私保护方面的承诺,请参阅隐私权资源中心

费用优化

若想要降低费用,不妨考虑为索引选择较小的分片大小和较低维度的嵌入,这样您就可以使用较小的计算机来部署索引。

Vertex AI 是 Google Cloud的一项计费服务。如需了解价格信息,请参阅 Vertex AI 价格Vector Search 价格。您可使用价格计算器根据您的预计使用量来估算费用。

性能优化

若想要缩短查询大型数据集的延迟时间,不妨考虑在创建索引时选择更高的分片大小,并在部署索引时选择高性能计算机。如需详细了解索引的分片大小,请参阅索引大小

若想要提高搜索回答的相关性,不妨以更高的维度生成企业数据的嵌入。高性能计算机和更高的嵌入维度均会导致产生更高的费用。您可使用价格计算器根据您的预计使用量来估算费用。

准备工作

在 SAP 应用环境中开始使用 Vector Search 之前,请确保您或您的管理员已完成以下操作:

创建和管理向量索引

如需使用 Vector Search,您需要将企业数据以向量嵌入形式编入索引并进行部署。为此,请按以下步骤操作:

  1. 在 Vertex AI 或任何其他平台中,使用文本或多模态嵌入 AI 模型生成向量嵌入。
  2. 将嵌入上传到 Cloud Storage 存储桶。
  3. 使用包含嵌入的 Cloud Storage 存储桶创建向量索引。
  4. 创建索引端点并将向量索引部署到该端点,以对已编入索引的企业数据执行语义搜索。

您可以通过 Google Cloud 控制台执行上述步骤,也可以使用 Vertex AI SDK for ABAP 从 SAP 环境中触发这些步骤。

为了为企业 AI 解决方案获得最准确的 Vector Search 结果,您还需要使用最新的企业数据更新索引。如需了解详情,请参阅更新和重建向量索引

从 SAP 应用调用 Vector Search

在 SAP 应用中,您可以使用 Vertex AI SDK for ABAP 通过以下方式对已编入索引的企业数据执行语义搜索:

您可以使用 Vector Search 的结果,通过 RAG 将企业背景信息添加到 AI 模型的上下文中,从而增强 AI 模型的上下文。这样可以确保模型回答基于您的企业数据。您还可以将这些结果用作业务流程的输入或用于生成建议。

使用文本提示进行语义搜索

如需使用文本提示搜索已编入索引的文本和多模态数据,您可以使用 Vertex AI SDK for ABAP 的 /GOOG/CL_VECTOR_SEARCH 类的 FIND_NEIGHBORS_BY_STRING 方法。您可以将方法 GET_NEAREST_NEIGHBORS 调用与方法 FIND_NEIGHBORS_BY_STRING 调用进行链接,以获取搜索回答。

以下代码示例展示了如何使用文本提示执行语义搜索:

TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key  = 'SEARCH_KEY' ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_string(
                                                          iv_search_string         = 'SEARCH_STRING'
                                                          iv_embeddings_model_key  = 'MODEL_KEY'
                                                          iv_neighbor_count        = NEIGHBOR_COUNT
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

替换以下内容:

  • SEARCH_KEY:搜索键,可在 Vector Search 参数中进行配置。
  • SEARCH_STRING:输入文本提示。
  • MODEL_KEY:在模型生成参数中配置的模型键。此模型用于将搜索查询转换为嵌入。
  • NEIGHBOR_COUNT:搜索查询要检索的最近邻的数量。

如需查看基于文本搜索企业文本和多模态数据的示例,请参阅 GitHub 代码示例:使用文本提示对文本数据集进行语义搜索使用文本提示对图片进行语义搜索

使用多模态提示进行语义搜索

如果您想从多模态数据(可以是图片或视频)中查找最接近的匹配项,此类搜索非常有用。例如,假设您有一个 SAP Web 应用(FioriUI5),并且想要拍摄服装、商品或设备零件的照片,并查找与该照片最接近的匹配项,那么您可以选择此搜索选项。

如需使用多模态提示搜索已编入索引的多模态数据,您可以使用 Vertex AI SDK for ABAP 的 /GOOG/CL_VECTOR_SEARCH 类的 FIND_NEIGHBORS_BY_EMBEDDING 方法。您可以将方法 GET_NEAREST_NEIGHBORS 调用与方法 FIND_NEIGHBORS_BY_EMBEDDING 调用进行链接,以获取搜索回答。

以下代码示例展示了如何使用图片执行语义搜索:

DATA lv_search_string TYPE string,
DATA ls_image TYPE /goog/cl_embeddings_model=>ty_image.

TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key = 'SEARCH_KEY' ).
    DATA(lo_embeddings_model) = NEW /goog/cl_embeddings_model( iv_model_key = 'MODEL_KEY' ).

    ls_image-bytes_base64_encoded = 'RAW_DATA'.

    DATA(lt_embeddings) = lo_embeddings_model->gen_image_embeddings( iv_image     = ls_image
                                                                     iv_dimension = 'DIMENSION'
                                            )->get_vector( ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_embedding(
                                                          iv_neighbor_count = NEIGHBOR_COUNT
                                                          it_embeddings     = lt_embeddings
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

替换以下内容:

  • SEARCH_KEY:搜索键,可在 Vector Search 参数中进行配置。
  • MODEL_KEY:在模型生成参数中配置的模型键。此模型用于将搜索查询转换为嵌入。
  • RAW_DATA:要在查询中内嵌包含的图片、PDF 或视频的 Base64 编码原始数据。
  • DIMENSION:输出嵌入的维度数。
  • NEIGHBOR_COUNT:搜索查询要检索的最近邻的数量。

如需查看基于图片的企业数据搜索示例,请参阅 GitHub 代码示例

使用企业实体 ID 进行语义搜索

这类搜索非常适合在您想要根据特定实体 ID 查找类似企业实体的 SAP 使用场景进行使用,例如,当特定商品缺货时,您可以使用这种搜索方式查找或推荐类似商品。实体 ID 对应于存储在向量索引中的数据点。

如需使用企业实体 ID 搜索向量索引,您可以使用 Vertex AI SDK for ABAP 的 /GOOG/CL_VECTOR_SEARCH 类的 FIND_NEIGHBORS_BY_ENTITY_ID 方法。您可以将方法 GET_NEAREST_NEIGHBORS 调用与方法 FIND_NEIGHBORS_BY_ENTITY_ID 调用进行链接,以获取搜索回答。

以下代码示例展示了如何使用企业实体 ID 执行语义搜索:

Below is a code snippet that can be taken as reference for an entity id search.
TRY.
    DATA(lo_vector_search) = NEW /goog/cl_vector_search( iv_search_key  = 'SEARCH_KEY' ).
    DATA(lt_vector_search_response) = lo_vector_search->find_neighbors_by_entity_id(
                                                          iv_entity_id = 'ENTITY_ID'
                                                     )->get_nearest_neighbors( ).
    cl_demo_output=>display( lt_vector_search_response ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( 'Search not successful.' && lo_cx_sdk->get_text( ) ).

ENDTRY.

替换以下内容:

  • SEARCH_KEY:搜索键,可在 Vector Search 参数中进行配置。
  • ENTITY_ID:要搜索的实体 ID。

如需查看使用实体 ID 对示例企业数据进行搜索的示例,请参阅 GitHub 代码示例

将 Vector Search 与 RAG 搭配使用,为 AI 模型提供更多上下文

Vector Search 会根据您的搜索查询,返回最相关的企业数据作为回答。您可以使用 RAG 向 AI 模型提供来自 Vector Search 的搜索回答,从而为其提供更多上下文。RAG 通过提供检索到的企业数据中的相关背景信息,确保模型回答始终基于您的企业数据,从而提高 AI 模型回答的质量。

如需通过将 Vector Search 与 RAG 搭配使用来为 AI 模型提供更多上下文,请执行以下步骤:

  1. 准备搜索查询以获取企业背景信息。
  2. 对包含企业数据的索引执行向量搜索。
  3. 按照最佳实践,将搜索回答串联或增补到最终提示中,以实现高效提示。

为了让 AI 模型为基于 RAG 的架构提供最相关的回答,请使用最新企业数据的嵌入式数据及时更新索引。如需了解详情,请参阅更新和重建向量索引

如需使用示例数据集试用企业用例,请尝试使用 GitHub 上的 SAP 中通过嵌入增强的向量搜索示例解决方案。此示例解决方案展示了 ABAP 中的一个商品推荐引擎,并提供了有关所需配置和实现细节的指导。您可以使用示例代码和参考文档作为其他推荐系统的基础,在这些系统中,您可以直接从 SAP 应用执行语义搜索。

后续步骤

贡献者

作者:Devesh Singh | SAP 应用工程师

其他贡献者:Vikash Kumar | 技术文档工程师