이 문서에서는 Gemini와 같은 대규모 언어 모델(LLM)을 기반으로 하는 비즈니스 규칙 엔진을 빌드하여 SAP 비즈니스 애플리케이션 내에서 의사결정을 자동화하기 위한 참조 아키텍처를 설명합니다. ABAP SDK for Google Cloud의 다양한 통합 기능을 사용합니다.
이 문서의 주요 대상에는 ABAP 개발자, SAP 솔루션 설계자, 클라우드 설계자가 포함됩니다. 이 문서에서는 ABAP SDK for Google Cloud, ABAP용 Vertex AI SDK, 기본적인 LLM 소개에 대한 기본적인 이해가 있다고 가정합니다.
비즈니스 규칙 엔진(BRE)이란 무엇인가요?
비즈니스 규칙 엔진(BRE)은 비즈니스 규칙을 정의, 배포, 실행할 수 있는 소프트웨어 시스템입니다. 이러한 규칙은 본질적으로 비즈니스 운영 방식을 지정하는 로직 문입니다. BRE는 비즈니스 규칙을 애플리케이션에 하드코딩하는 대신 로직 문을 외부화하므로 규칙을 효율적으로 관리하고 수정할 수 있습니다.
Gemini 기반 BRE는 Google의 차세대 AI 모델인 Gemini의 고급 언어 처리 및 추론 기능을 사용하여 비즈니스 규칙으로 작동하는 설계된 프롬프트 저장소를 기반으로 의사결정을 자동화합니다. 특정 안내와 예상 출력 형식으로 작성된 이러한 프롬프트는 Gemini가 사전 정의된 비즈니스 로직과 일관된 방식으로 데이터를 분석하고, 패턴을 식별하고, 결정을 내릴 수 있도록 안내합니다.
아키텍처
다음 다이어그램은 SAP 애플리케이션용 Gemini 지원 BRE를 만들기 위한 참조 아키텍처를 보여줍니다.
이 참조 아키텍처에는 다음 구성요소가 포함됩니다.
구성요소 | 하위 시스템 | 세부정보 |
---|---|---|
1 | SAP ERP | Gemini 기반 BRE를 사용하여 자동화된 의사결정을 위한 통계를 도출하는 SAP S/4HANA와 같은 SAP ERP 시스템입니다. 사용 사례에 따라 BRE 모듈에 규칙 ID와 필요한 입력 데이터를 제공합니다. |
2 | BRE 모듈 | BRE 모듈은 ABAP SDK for Google Cloud를 사용하여 Cloud Storage에서 구성된 규칙을 검색하고 ABAP용 Vertex AI SDK를 사용하여 Gemini를 호출하여 규칙을 처리합니다. |
3 | 규칙 저장소 | 일관된 이름 지정 규칙을 사용하여 .txt 또는 .prompt 와 같은 텍스트 파일로 Cloud Storage에 규칙(엔지니어링된 프롬프트)을 저장합니다. 예를 들면 RiskShiftingClause.prompt 입니다.
엔지니어링된 프롬프트를 구조적으로 관리하려면 Cloud SQL과 같은 데이터베이스를 사용하는 것도 고려해 볼 수 있습니다. |
4 | 규칙 프로세서 | ABAP용 Vertex AI SDK는 입력 데이터(예: 전송 안내)와 검색된 규칙(프롬프트)을 Gemini로 전송합니다. Gemini는 프롬프트와 입력 데이터를 처리하고 분석을 실행한 후 지정된 형식으로 결과를 반환합니다. |
사용 제품
이 참조 아키텍처에는 다음과 같은 Google Cloud 제품이 사용됩니다.
ABAP SDK for Google Cloud: SAP 시스템을 Cloud Storage와 같은 Google Cloud 서비스에 연결하는 ABAP 애플리케이션을 개발하는 데 도움이 됩니다.
ABAP용 Vertex AI SDK: SAP 환경 내에서 Google의 Vertex AI를 사용할 수 있습니다. 이렇게 하면 SAP 애플리케이션에서 AI 기반 기능을 간편하게 빌드할 수 있습니다.
Cloud Storage: 온라인에서 원하는 양의 데이터를 저장하고 액세스할 수 있는 클라우드 서비스입니다.
Vertex AI: 다양한 애플리케이션을 위한 머신러닝 모델을 빌드, 배포, 확장할 수 있습니다.
사용 사례
회사에서 인바운드 구매주문서(PO)를 PDF로 수신하고 자동화된 프로세스를 사용하여 SAP에서 판매 주문을 생성하는 시나리오를 생각해 보세요. 수신 PO의 배송 주석에서 발견된 위험 이전 조항을 식별하고 완화하려면 이 프로세스를 업데이트해야 합니다.
계약의 위험 이전 조항은 한 당사자에서 다른 당사자로 위험을 이전하는 조항입니다. 이러한 조항을 파악하고 해결하지 않으면 예상치 못한 비용, 법적 분쟁, 평판 손상이 발생할 수 있습니다.
다음은 PO 문서의 배송 주석에 작성된 위험 이전 조항의 예입니다.
'판매자는 제품이 배송일로부터 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에서 프롬프트를 가져오고 ABAP용 Vertex AI SDK를 사용하여 실행을 위해 Gemini에 전달합니다.
샘플 JSON 응답은 이 위험 이전 조항 예시를 위해 Gemini에서 생성합니다.
다음 샘플 코드는 규칙을 검색하여 코드에서 사용하는 방법을 보여줍니다.
BRE 서비스를 lcl_bre
와 같은 ABAP 클래스로 구현한다고 가정합니다.
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
메서드는 다음을 실행합니다.
/GOOG/CL_STORAGE_V1
클래스를 사용하여 Cloud Storage에서 규칙 파일을 읽습니다./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에서 데이터를 사용하는 방법에 대한 자세한 내용은 Google Cloud용 Gemini에서 데이터를 사용하는 방법을 참고하세요.
비용
Cloud Storage와 같은 Google Cloud 리소스의 비용을 예상하려면 Google Cloud 가격 계산기를 사용하세요.
Vertex AI 및 Gemini API 관련 가격 책정은 Vertex AI 가격 책정을 참고하세요.
설계 대안
이 문서에서는 ABAP SDK for Google Cloud의 온프레미스 또는 모든 클라우드 버전에 중점을 두고 있지만 ABAP SDK for Google Cloud의 SAP BTP 버전을 사용하여 유사한 결과를 얻을 수 있습니다. ABAP용 Vertex AI SDK는 SAP BTP 환경에서 사용할 수 없지만 온프레미스 SDK용으로 이 문서에 제공된 코드 샘플을 사용하여 조정하고 SAP BTP 환경 내에서 유사한 솔루션을 빌드할 수 있습니다.
다음 단계
- ABAP용 Vertex AI SDK에 대해 알아보려면 ABAP용 Vertex AI SDK 개요를 참조하세요.
- ABAP SDK for Google Cloud에 대해 알아보려면 ABAP SDK for Google Cloud 개요를 참조하세요.
ABAP SDK for Google Cloud 문제를 해결하는 데 도움이 필요한 경우 다음을 수행하세요.
- ABAP SDK for Google Cloud 문제 해결 가이드를 참조합니다.
- Cloud 포럼의 커뮤니티에서 ABAP SDK for Google Cloud에 대해 질문하고 논의하세요.
- 사용 가능한 모든 진단 정보를 수집하여 Cloud Customer Care에 문의합니다. Customer Care 문의 정보는 Google Cloud 기반 SAP 지원 받기를 참조하세요.
참여자
작성자: Ameya Suvarna | SAP 애플리케이션 엔지니어 팀장
기타 참여자: Vikash Kumar | 기술 문서 작성자