适用于 SAP 的由 Gemini 提供支持的业务规则引擎

本文档介绍了构建由 Gemini 等大型语言模型 (LLM) 提供支持的业务规则引擎的参考架构,以便在 SAP 业务应用中自动做出决策。它使用 ABAP SDK for Google Cloud 的各种集成功能。

本文档的目标受众群体包括 ABAP 开发者、SAP 解决方案架构师和云架构师。本文档假定您对 ABAP SDK for Google CloudVertex AI SDK for ABAP 以及LLM 简介有基本的了解。

什么是业务规则引擎 (BRE)?

业务规则引擎 (BRE) 是一种软件系统,可让您定义、部署和执行业务规则。这些规则实质上是逻辑语句,用于决定您的业务如何运作。BRE 会将逻辑语句外部化,而不是将业务规则硬编码到应用中,从而高效地管理和修改规则。

由 Gemini 提供支持的 BRE 使用 Google 新一代 AI 模型 Gemini 的先进语言处理和推理功能,根据作为业务规则的经过精心设计的提示存储库自动做出决策。这些提示包含特定说明和预期的输出格式,可指导 Gemini 以与预定义业务逻辑一致的方式分析数据、识别模式和做出决策。

架构

下图展示了为 SAP 应用创建 Gemini 支持的 BRE 的参考架构:

适用于 SAP 的由 Gemini 提供支持的业务规则引擎

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

组件 子系统 详细信息
1 SAP ERP SAP ERP 系统(例如 SAP S/4HANA),该系统使用 Gemini 驱动的 BRE 来提取数据洞见,以便自动做出决策。根据您的用例,您需要向 BRE 模块提供规则 ID 和必要的输入数据。
2 BRE 模块 BRE 模块使用 ABAP SDK for Google Cloud 从 Cloud Storage 检索已配置的规则,并使用 Vertex AI SDK for ABAP 调用 Gemini 来处理这些规则。
3 规则库 将规则(经过优化的提示)存储在 Cloud Storage 中,以文本文件(例如 .txt.prompt)的形式存储,并采用一致的命名惯例。例如 RiskShiftingClause.prompt。 如需对经过工程化处理的提示进行结构化管理,您还可以考虑使用 Cloud SQL 等数据库。
4 规则处理器 Vertex AI SDK for ABAP 会将输入数据(例如送货说明)和检索到的规则(提示)发送到 Gemini。Gemini 会处理提示和输入数据,执行分析,并以指定格式返回结果。

使用的产品

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

  • ABAP SDK for Google Cloud:可帮助您开发 ABAP 应用,将您的 SAP 系统与 Cloud Storage 等 Google Cloud 服务相关联。

  • Vertex AI SDK for ABAP:可让您在 SAP 环境中使用 Google 的 Vertex AI。这简化了在 SAP 应用中构建 AI 驱动功能的过程。

  • Cloud Storage:一种用于在线存储和访问任意数量数据的云服务。

  • Vertex AI:可让您为各种应用构建、部署和扩缩机器学习模型。

使用场景

假设您的公司以 PDF 格式接收入站采购订单 (PO),并使用自动化流程在 SAP 中生成销售订单。您需要更新此流程,以便识别和缓解在来单的送货说明中发现的风险转移条款

合同中的风险转移条款是指将风险从一方转移到另一方的条款。如果未能识别和处理这些条款,可能会让您的公司遭遇意料之外的费用、法律纠纷和声誉损害。

以下是写在采购订单文件的送货说明中的风险转移条款示例。

“卖方保证,自交货之日起,商品在 10 年内不会出现任何缺陷。”

您需要针对以下情况编写规则:

  • 确定风险转移条款并对其进行分类。
  • 请说明为什么该内容被视为潜在的危险信号。
  • 就如何降低风险提供建议。

您可以使用 Gemini 构建 BRE 以生成智能 JSON 回答,从而使您的 SAP 业务应用能够做出自动决策、触发任何流程拒绝或发起下游人工验证。

风险转移条款示例

下表列出了在入站采购订单中可以找到的风险转移条款示例:

问题类别 示例条款(送货说明) 潜在问题
过度赔偿条款 卖方应对因产品而产生或与之相关的所有索赔、损失、损害和费用(包括但不限于律师费用)向买方进行赔偿。 如果此类声明过于宽泛,并且让卖方对不可预见的事件或客户滥用行为承担责任,可能会出现问题。
保密性过度延伸 买方向卖方披露的所有信息(包括但不限于价格、规格和营销计划)均应被视为买方的机密信息和专有信息。 这可能会妨碍卖方运用常规行业知识或与其他客户合作。
管辖法律不明确 本协议应受相应地点的法律(例如伊利诺伊州的法律)管辖。 如果买方和卖方位于不同的司法管辖区,这可能会导致法律冲突。
不可抗力限制 卖方不得因任何不可抗力事件(包括天灾、战争或恐怖主义行为)而免除履行本协议的义务。 这可能会使卖方对超出其控制范围的事件承担责任。
知识产权不明确 商品的所有知识产权均应归买方所有。 如果卖家来自受制裁的国家/地区或与受制裁的国家/地区有联系,这可能是一个危险信号。

精心设计的提示示例

本部分介绍了使用 RTF 框架设计的示例提示。提示工程中的 RTF 框架代表角色、任务和格式。这是一种有效的提示构建方式,可让您从 Gemini 等 LLM 中获得更好、更一致的结果。

  • 角色:您希望 LLM 采用的角色,例如“销售专家”或“法律顾问”。
  • 任务:LLM 的特定操作,例如“总结此文本”或“分析某些内容”。
  • 格式:所需的输出结构,例如列表或 JSON。

如需了解您可以用来影响模型回答的常见提示策略,请参阅提示策略概览

以下提示可作为定义规则,帮助 Gemini 识别风险转移条款等问题:

RTF 框架
Role

You are a legal advisor for my company.

Task

Analyze the below delivery instruction on a purchase order from my
customer and let me know if it could cause any issues to my company.

Format

Respond to me in plain text JSON format with 4 fields.

Field 1 should be "issue" with possible values Yes or No.

Field 2 should be "issueCategory" with possible values Indemnification
Overreach, Unilateral Termination Clause, Confidentiality Overextension,
Unreasonable Warranty, Ambiguous Governing Law, Unclear Dispute Resolution,
Force Majeure Limitation, Unbalanced Liability,
Intellectual Property Ambiguity, Compliance with Sanctions, Others or None.

Field 3 should be "explanation" - use this field to give a short
explanation for your response on Field 1.

Field 4 should be "recommendation" - use this field to give a short
recommendation of how to mitigate such issues.

Do not include backticks in the response.

Delivery Instruction: "Seller warrants that the products will be free
from defects for a period of ten years from the date of delivery."

{
  "issue": "Yes",
  "issueCategory": "Unreasonable Warranty",
  "explanation":   "A ten-year warranty is significantly longer than
  industry standard for most products. This could expose your company to
  substantial financial risk if issues arise with the products years
  down the line.",
  "recommendation": "Negotiate a shorter warranty period that aligns
  with industry standards and your product's expected lifespan.
  Offer extended warranty options at an additional cost if the
  customer requires longer coverage."
}

您可以将此提示存储在 Cloud Storage 等代码库中。SAP 事务可以将输入数据传递给 BRE 模块。

然后,使用 ABAP SDK for Google Cloud 从 Cloud Storage 检索提示,并使用 Vertex AI SDK for ABAP 将其传递给 Gemini 以执行。

示例 JSON 回答是由 Gemini 为此风险转移条款示例生成的。

以下示例代码展示了如何检索规则并在代码中使用它。假定您将 BRE 服务实现为 ABAP 类,例如 lcl_bre

 DATA(lo_bre) = NEW lcl_bre( iv_key_name  = 'CLIENT_KEY'
                             iv_model_key = 'MODEL_KEY' ).

 " Sample delivery text
 DATA(lv_delivery_text) = |Seller warrants that the products will be free from defects for| &&
                          |a period of ten years from the date of delivery.|.

 " Execute the rule for identifying Risk-Shifting clauses.
 DATA(lv_response) = lo_bre->execute_rule( iv_rule_id = 'RiskShiftingClause-Rule-001.prompt'
                                           iv_data    = lv_delivery_text ).
 " JSON response
 cl_demo_output=>display_json( lv_response ).

替换以下内容:

  • CLIENT_KEY:为对 Vertex AI 和 Cloud Storage 进行身份验证而配置的客户端密钥。
  • MODEL_KEY:用于访问 LLM 的模型键名,可在模型生成参数中进行配置。

execute_rule 方法执行以下操作:

  1. 使用 /GOOG/CL_STORAGE_V1 类从 Cloud Storage 读取规则文件。

  2. 使用 /GOOG/CL_GENERATIVE_MODEL 类将处理规则发送到 Gemini,该规则会作为对模型的说明进行设置。然后,模型会生成 JSON 回答。

以下是完整的示例代码,供您参考:

REPORT zra_bre_example.

" Local class definition
CLASS lcl_bre DEFINITION FINAL.

  PUBLIC SECTION.
    METHODS constructor
      IMPORTING iv_key_name  TYPE /goog/keyname
                iv_model_key TYPE /goog/model_key
      RAISING   /goog/cx_sdk.

    METHODS convert_xstring_to_string
      IMPORTING iv_xstring       TYPE xstring
      RETURNING VALUE(iv_string) TYPE string.

    METHODS execute_rule
      IMPORTING iv_rule_id              TYPE string
                iv_data                 TYPE string
      RETURNING VALUE(rv_response_text) TYPE string
      RAISING   /goog/cx_sdk.

  PRIVATE SECTION.
    DATA mo_storage TYPE REF TO /goog/cl_storage_v1.
    DATA mo_model   TYPE REF TO /goog/cl_generative_model.
ENDCLASS.

" Local class implementation
CLASS lcl_bre IMPLEMENTATION.
  METHOD constructor.
    mo_storage = NEW /goog/cl_storage_v1( iv_key_name = iv_key_name ).
    mo_model = NEW /goog/cl_generative_model( iv_model_key = iv_model_key ).
  ENDMETHOD.

  METHOD convert_xstring_to_string.
DATA lv_file_length TYPE i.
    DATA lt_bin_data    TYPE STANDARD TABLE OF char1024.

    " Call function module to convert xstring to binary format
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING buffer        = iv_xstring
      IMPORTING output_length = lv_file_length
      TABLES    binary_tab    = lt_bin_data.
    IF sy-subrc <> 0.
      " Handle error
    ENDIF.

    " Call function module to convert from binary to string format
    CALL FUNCTION 'SCMS_BINARY_TO_STRING'
      EXPORTING input_length = lv_file_length
      IMPORTING text_buffer  = iv_string
      TABLES    binary_tab   = lt_bin_data.
    IF sy-subrc <> 0.
      " Handle error
    ENDIF.
  ENDMETHOD.

  METHOD execute_rule.
    DATA lv_xdata       TYPE xstring.
    DATA lv_instruction TYPE string.

    " Get the rule file from rule repository(cloud storage)
    mo_storage->add_common_qparam( iv_name  = 'alt'
                                   iv_value = 'media' ).

    mo_storage->get_objects( EXPORTING iv_p_bucket = 'gemini-bre-repo'
                                       iv_p_object = iv_rule_id
                             IMPORTING es_output   = DATA(ls_output)
                                       ev_ret_code = DATA(lv_ret_code)
                                       ev_err_text = DATA(lv_err_text)
                                       es_err_resp = DATA(ls_err_resp)
                                       es_raw      = lv_xdata ).

    IF mo_storage->is_success( lv_ret_code ) = abap_true.
      " Set the instruction for Gemini as per the configured rule
      lv_instruction = convert_xstring_to_string( iv_xstring = lv_xdata ).
    ELSE.
      " Handle error
    ENDIF.

    " Set the text to be analyzed
    DATA(lv_prompt) = |Please analyze the Delivery Instruction:{ cl_abap_char_utilities=>newline }{ iv_data }|.

    " Call Gemini to process the rule and identify Risk-Shifting clauses
    rv_response_text = mo_model->set_system_instructions( iv_text = lv_instruction
                      )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY_DANGEROUS_CONTENT'
                                              iv_harm_block_threshold = 'BLOCK_NONE'
                      )->generate_content( iv_prompt_text = lv_prompt
                      )->get_text( ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  TRY.
      DATA(lo_bre) = NEW lcl_bre( iv_key_name  = 'DEMO_AIPLATFORM'
                                  iv_model_key = 'gemini-flash' ).

      " Sample delivery text
 DATA(lv_delivery_text) = |Seller warrants that the products will be free from defects for| &&
                             |a period of ten years from the date of delivery.|.

      " Execute the rule for identifying Risk-Shifting clauses.
      DATA(lv_response) = lo_bre->execute_rule( iv_rule_id = 'RiskShiftingClause-Rule-001.prompt'
                                                iv_data    = lv_delivery_text ).
      " JSON response
      cl_demo_output=>display_json( lv_response ).

    CATCH /goog/cx_sdk INTO DATA(lo_exception).
      DATA(lv_msg) = lo_exception->get_text( ).
      " Handle error
  ENDTRY.

设计考虑事项

本部分提供的指导可帮助您使用此参考架构开发一个或多个架构,以帮助您满足您在安全性、隐私性、合规性、费用和性能方面的具体要求。

安全性、隐私权和合规性

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

如需了解 Gemini 如何使用您的数据,请参阅 Gemini for Google Cloud 如何使用您的数据

费用

如需估算 Google Cloud 资源(例如 Cloud Storage)的费用,请使用Google Cloud 价格计算器

如需了解 Vertex AI 和 Gemini API 相关的价格,请参阅 Vertex AI 价格

设计替代方案

虽然本文档主要介绍本地版本或任何云版本的 ABAP SDK for Google Cloud,但您也可以使用 SAP BTP 版本的 ABAP SDK for Google Cloud 获得类似的结果。Vertex AI SDK for ABAP 不适用于 SAP BTP 环境,但您可以使用本文档中为 SDK 的本地版提供的代码示例,对其进行调整,并在 SAP BTP 环境中构建类似的解决方案。

后续步骤

贡献者

作者:Ameya Suvarna | SAP 应用工程师团队负责人

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