ABAP 環境から Vertex AI エージェントを呼び出す

このクイックスタートでは、エージェント開発キット(ADK)で構築された Vertex AI エージェントを ABAP 環境から呼び出す方法について説明します。

このガイドでは、ABAP SDK for Google Cloud のオンプレミス エディションまたはクラウド エディションを使用して AI エージェントを呼び出すプロセスについて説明します。作成手順やデプロイ手順については説明しません。AI エージェントは、エージェント開発キット(ADK)を使用して作成します。これはエージェントを設計するためのオープンソース フレームワークで、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 エージェントを呼び出すプログラムの作成

  1. SAP システムで、トランザクション SE38 を使用して、カスタム名前空間(Z や Y など)に実行可能プログラムを作成します。

    1. SAP GUI で、トランザクション コード SE38 を入力します。

    2. [Program] フィールドに、プログラムの名前を入力します(例: ZDEMO_CALL_AGENT)。

    3. [Create] をクリックします。

    4. プログラムの属性を指定します。

      1. [表題] フィールドに、プログラムのタイトル(例: Call Vertex AI Agent)を入力します。

      2. [タイプ] フィールドで 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.
      
      

      次のように置き換えます。

  2. SE38 でアプリを実行します。

  3. 結果が、エージェントをローカルで実行したときに観測された結果と一致していることを確認します。

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

次のステップ