从 ABAP 环境调用 Vertex AI 代理

本快速入门介绍如何从 ABAP 环境中调用使用代理开发套件 (ADK) 构建的 Vertex AI 代理。

本指南介绍了使用本地版本或任何云版本的 ABAP SDK for Google Cloud 调用 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。

如需了解如何创建、测试和部署代理,请参阅以下内容:

确保您已为代理授予使用受管理的会话的所需权限

部署后,您会获得一个资源标识符,类似于以下示例,该标识符可在 ABAP 程序中启用代理调用:

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

从资源标识符中记下 REASONING_ENGINE_ID,例如 6384464913570601984。您在后面的步骤中需要用到它。

创建一个程序以从 ABAP 环境调用 Vertex AI 代理

  1. 在 SAP 系统中,使用事务 SE38 在自定义命名空间中创建可执行程序(例如 Z 或 Y)。

    1. 在 SAP GUI 中,输入事务代码 SE38

    2. 程序字段中,输入程序的名称,例如 ZDEMO_CALL_AGENT

    3. 点击创建

    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.
      
      

      替换以下内容:

      • DEMO_AIPLATFORM:用于向 Google Cloud进行身份验证的客户端密钥。
      • LOCATION_ID:代理的部署位置。您可以在初始化代理时指定位置。如需了解详情,请参阅初始化代理
      • REASONING_ENGINE_ID:您在将代理部署到 Vertex AI Agent Engine 部分中记下的代理资源标识符。
  2. SE38 中运行您的应用。

  3. 验证结果是否与在本地运行代理时观察到的结果一致。

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

后续步骤