從 ABAP 環境呼叫 Vertex AI Agents

本快速入門說明如何從 ABAP 環境呼叫使用代理程式開發套件 (ADK) 建構的 Vertex AI 代理。

本指南說明如何使用 Google Cloud 的 ABAP SDK 內部部署版或任何雲端版本,呼叫 AI 服務機器人,但不涵蓋建立或部署程序。您可以使用代理開發套件 (ADK) 建立 AI 代理,這是用於設計代理的開放原始碼架構,建構於 Google AgentspaceCustomer Engagement Suite with Google AI 所採用的相同架構。接著,您可以將代理程式部署至 Vertex AI Agent Engine,這是 Vertex AI 中的全代管執行階段,可協助您將自訂代理程式部署至正式環境,並透過內建測試、發布和可靠性,在全球安全的規模中部署。

事前準備

執行本快速入門前,請確認您或管理員已完成下列先決條件:

將代理部署至 Vertex AI Agent Engine

建立、測試並部署代理至 Vertex AI Agent Engine。在本快速入門課程中,您可以建立天氣和時間代理程式,並將代理程式部署至 Vertex AI Agent Engine。

如要瞭解如何建立、測試及部署服務機器人,請參閱以下文章:

請確認您已授予必要權限,讓服務專員可以使用受管理的會話。

部署完成後,您會取得類似以下範例的資源 ID,這可在 ABAP 程式中啟用代理程式叫用:

AgentEngine created. Resource name: projects/project_id/locations/us-central1/reasoningEngines/REASONING_ENGINE_ID

從資源 ID 中記下 REASONING_ENGINE_ID,例如 6384464913570601984。在後續步驟中會用到這項資訊。

建立程式,從 ABAP 環境呼叫 Vertex AI Agent

  1. 在 SAP 系統中,使用交易 SE38 在自訂命名空間 (例如 Z 或 Y) 中建立可執行的程式。

    1. 在 SAP GUI 中輸入交易代碼 SE38

    2. 在「Program」欄位中輸入程式名稱,例如 ZDEMO_CALL_AGENT

    3. 按一下 [建立]。

    4. 指定節目屬性:

      1. 在「Title」欄位中輸入節目名稱,例如 Call Vertex AI Agent

      2. 在「Type」欄位中,選擇「Executable Program」。

      3. 按一下 [儲存]

    5. 將程式儲存為本機物件

    6. ABAP 編輯器中,新增下列程式碼:

        REPORT zdemo_call_agent.
      
        DATA lv_p_projects_id          TYPE string.
        DATA lv_p_locations_id         TYPE string.
        DATA lv_p_reasoning_engines_id TYPE string.
        DATA ls_input                  TYPE /goog/cl_aiplatform_v1=>ty_1072.
      
        TYPES: BEGIN OF ty_agent_input,
                message    TYPE string,
                session_id TYPE string,
                user_id    TYPE string,
              END OF ty_agent_input.
      
        DATA ls_agent_input TYPE ty_agent_input.
      
        TYPES: BEGIN OF ty_response,
                content TYPE /goog/cl_aiplatform_v1=>ty_695,
              END OF ty_response.
        DATA ls_agent_response TYPE ty_response.
      
        TRY.
      
            " Open HTTP Connection
            DATA(lo_client) = NEW /goog/cl_aiplatform_v1( iv_key_name = 'DEMO_AIPLATFORM' ).
            DATA lv_agent_response_txt TYPE string.
      
            " Populate relevant parameters
            lv_p_projects_id = lo_client->gv_project_id.
            lv_p_locations_id = 'LOCATION_ID'.
            lv_p_reasoning_engines_id = 'REASONING_ENGINE_ID'.
      
            ls_agent_input-message = 'What is the weather in New York'. "Prompt
            ls_agent_input-user_id = 'use-101'.
            ls_input-class_method = 'stream_query'.
            GET REFERENCE OF ls_agent_input INTO ls_input-input.
      
            lo_client->add_json_name_mapping( iv_abap = 'CLASS_METHOD' iv_json = 'class_method' ).
            lo_client->add_json_name_mapping( iv_abap = 'SESSION_ID'  iv_json = 'session_id' ).
            lo_client->add_json_name_mapping( iv_abap = 'USER_ID' iv_json = 'user_id' ).
      
            " Call API method: aiplatform.projects.locations.reasoningEngines.streamQuery
            lo_client->stream_query_reasoning_engi( EXPORTING iv_p_projects_id          = lv_p_projects_id
                                                              iv_p_locations_id         = lv_p_locations_id
                                                              iv_p_reasoning_engines_id = lv_p_reasoning_engines_id
                                                              is_input                  = ls_input
                                                    IMPORTING es_raw                    = lv_agent_response_txt
                                                              ev_ret_code               = DATA(lv_ret_code)
                                                              ev_err_text               = DATA(lv_err_text)
                                                              es_err_resp               = DATA(ls_err_resp) ).
      
            " Handle the output
            IF lo_client->is_success( lv_ret_code ).
              SPLIT lv_agent_response_txt AT cl_abap_char_utilities=>newline INTO TABLE DATA(lt_result_event_tab).
      
              " Deserialize to read the final response event from agent
              /goog/cl_json_util=>deserialize_json( EXPORTING iv_json        = lt_result_event_tab[ 3 ]
                                                              iv_pretty_name = /ui2/cl_json=>pretty_mode-extended
                                                    IMPORTING es_data        = ls_agent_response ).
      
              cl_demo_output=>display( ls_agent_response-content-parts[ 1 ]-text ).
      
            ELSE.
              MESSAGE lv_err_text TYPE 'E'.
            ENDIF.
      
            " Close HTTP Connection
            lo_client->close( ).
      
          CATCH /goog/cx_sdk INTO DATA(lo_exception).
            MESSAGE lo_exception->get_text( ) TYPE 'E'.
        ENDTRY.
      
      

      更改下列內容:

      • DEMO_AIPLATFORM:用於驗證 Google Cloud的用戶端金鑰。
      • LOCATION_ID:代理程式部署的位置。您可以在初始化代理程式時指定位置。詳情請參閱「初始化代理程式」。
      • REASONING_ENGINE_ID:在「將代理部署至 Vertex AI Agent Engine」一節中所述代理的資源 ID。
  2. SE38 中執行應用程式。

  3. 驗證結果是否與在本機執行代理程式時觀察到的結果一致。

    Example response: OK. The weather in New York is sunny with a temperature of 25 degrees Celsius (41 degrees Fahrenheit).
    

後續步驟