全部產品
Search
文件中心

AgentLoop:接入 AgentScope(Java) 應用

更新時間:Aug 29, 2026

AgentLoop 支援通過 Java 探針,為基於 AgentScope 架構構建的 Java 應用採集可觀測資料。Java 探針基於 OpenTelemetry 標準自動採集應用調用鏈路,將 AgentScope Java 應用中的 Agent 執行、模型調用和工具調用資料上報至 AgentLoop。本文介紹如何將 AgentScope Java 應用接入 AgentLoop,即時掌握 AI 應用的運行狀態。

架構與監控資料

AgentScope 是阿里巴巴開源的多 Agent 應用開發架構,提供 ReActAgent 等多種 Agent 類型,內建 DashScope 等模型適配器,支援工具調用、記憶管理和多 Agent 協作。AgentScope Java 是該架構的 Java 實現,適用於在 JVM 生態中構建大語言模型應用。

AgentScope Java 應用接入 AgentLoop 後,將自動監控以下內容:

  • Agent 執行鏈路。

  • LLM 調用:模型調用的 Token 用量、輸入和輸出內容。

  • 工具調用鏈路:Toolkit 中各工具的調用詳情。

  • ReAct Step:每一輪迴圈的行動與觀察。

接入方式

AgentScope Java 應用通過 Java 探針接入 AgentLoop,先在 AgentLoop 控制台擷取接入參數,再根據部署環境選擇一種探針安裝方式。

前提條件與使用限制

通用條件:

  • JDK 版本:建議使用 JDK 17 及以上版本運行 AgentScope Java 應用。

  • JVM 記憶體:安裝 Java 探針時,建議目標 JVM 最大堆記憶體大於 300 MB。

  • AgentLoop 服務:已開通 AgentLoop 服務,並建立智能體空間。

  • 資料類型:當前主要上報 Trace 和 Metric 資料。

Container Service ACK 或容器計算服務 ACS 接入時,還需滿足以下條件:

  • 叢集可安裝應用監控探針接入助手(ack-onepilot)組件,且組件版本為 5.1.0 及以上。

  • 已為叢集授予 ARMS 資源的存取權限:ACK 託管叢集需存在 ARMS Addon Token,或已為 Worker RAM 角色添加 AliyunTracingAnalysisFullAccess 和 AliyunARMSFullAccess 權限原則;ACK 專有版叢集和 ACK One 註冊叢集需使用已包含 AliyunARMSFullAccess 和 AliyunSTSAssumeRoleAccess 許可權的阿里雲帳號;ACK Serverless 叢集或對接了 ECI 的叢集需完成雲資源訪問授權。

    運行範例程式碼前,需在環境變數中設定 DASHSCOPE_API_KEY。

擷取接入參數

  1. 登入 AgentLoop 控制台,在左側導覽列單擊接入中心。

  2. 單擊 AgentScope 卡片。

  3. 在 AgentScope 接入頁面選擇 Java 語言。

  4. 輸入應用程式名稱,頁面將產生 Java 探針接入所需的參數和安裝指引。

Container Service ACK 和容器計算服務 ACS 接入

ack-onepilot 組件說明

應用監控探針接入助手(ack-onepilot)是用於接入各語言探針的重要組件,可以協助在容器環境中自動準備好應用監控探針包並構建好探針的上報環境。應用監控探針接入助手(ack-onepilot)的基本原理請參見ack-onepilot組件基本原理說明。

探針接入後,在新版本探針發布時,應用重啟時 ack-onepilot 會自動將探針升級到最新版本。如果不需要跟隨應用監控探針的版本發布自動更新掛載的探針,可以自主控制探針版本。具體操作,請參見自主控制探針版本。

步驟一:安裝探針接入助手(ack-onepilot)

  1. 登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱。

  2. 在左側導覽列單擊組件管理,搜尋並定位ack-onepilot。

  3. 在ack-onepilot卡片上單擊安裝。

    說明
    • ack-onepilot 組件預設支援 1000 個 Pod 規模,叢集內 Pod 每增加 1000 個,ack-onepilot 資源對應的 CPU 請增加 0.5 核、記憶體請增加 512 MB。

    • 如果在 ACS 叢集中安裝 ack-onepilot,請在安裝卡片的最下方配置 accessKey 與 accessKeySecret,即阿里雲帳號的 AccessKey ID 和 AccessKey Secret。擷取方法,請參見建立AccessKey。請確認對應的阿里雲帳號已包含 AliyunARMSFullAccess 和 AliyunSTSAssumeRoleAccess 許可權。

  4. 在彈出的頁面中可以配置相關的參數,建議使用預設值,單擊確認。

    安裝完成後,可以在組件管理頁面升級、配置或卸載ack-onepilot組件。

步驟二:授予 ARMS 資源的存取權限

根據叢集類型,選擇對應的授權方式。

ACK 託管叢集

如果 ACK 託管叢集中不存在 ARMS Addon Token,請執行以下操作手動為叢集授予 ARMS 資源的存取權限;如果已存在 ARMS Addon Token,請跳轉至步驟三:為 Java 應用開啟應用監控。

查看叢集是否存在 ARMS Addon Token。

  1. 登入Container Service管理主控台,在叢集列表頁面,單擊目的地組群名稱進入叢集詳情頁。

  2. 在左側導覽列選擇組態管理 > 保密字典,然後在頂部選擇命名空間為kube-system,查看 addon.arms.token 是否存在。

    叢集存在 ARMS Addon Token 時,ARMS 會進行免密授權。ACK 託管叢集預設存在 ARMS Addon Token,但部分早期建立的 ACK 託管叢集可能沒有 ARMS Addon Token。因此,對於 ACK 託管叢集,建議首先檢查 ARMS Addon Token 是否存在;若不存在,需進行手動授權。

手動添加權限原則。

  1. 登入Container Service管理主控台,在叢集列表頁面單擊目的地組群名稱。

  2. 在叢集資訊 > 基本資料頁簽的叢集資源地區,單擊Worker RAM角色右側的連結。

  3. 在許可權管理頁簽單擊新增授權。

  4. 在新增授權面板添加以下兩個權限原則,然後單擊確認新增授權。

    • AliyunTracingAnalysisFullAccess:可觀測鏈路 OpenTelemetry 版的完整許可權。

    • AliyunARMSFullAccess:ARMS 的完整許可權。

專有版叢集/註冊叢集

如果需要監控 ACK 專有版叢集和 ACK One 註冊叢集應用,請確認對應的阿里雲帳號已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess許可權。添加許可權的操作,請參見管理RAM使用者的許可權。

安裝 ack-onepilot 組件後,還需要在 ack-onepilot 中填寫有 ARMS 許可權的阿里雲帳號 AK/SK,可以通過以下兩種方式填寫。

方式一:Helm 中直接填寫 AK/SK
  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表。

  2. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇應用 > Helm頁面,單擊ack-onepilot組件右側的更新。

  3. 將accessKey和accessKeySecret替換為當前帳號的AccessKey,然後單擊确定。

    說明

    擷取AccessKey的操作,請參見建立AccessKey。

    在YAML配置編輯器的controller配置段中,找到accessKey: __ACCESSKEY__和accessKeySecret: __ACCESSKEY_SECRET__,將佔位符替換為實際的AccessKey資訊。

  4. 重啟應用 Deployment。

方式二:通過 K8s Secret 引入 AK/SK
  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表。

  2. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列選擇組態管理 > 保密字典。

  3. 選擇 ack-onepilot 命名空間,然後建立 Secret,添加 AK/SK 資訊。

    說明

    擷取AccessKey的操作,請參見建立AccessKey。

    Secret 名稱設定為 ack-onepilot-aksk,類型選擇 Opaque,在資料區域添加兩行:名稱分別為 ak 和 sk,值分別填入對應的 AccessKey ID 和 AccessKey Secret,然後單擊确定。

  4. 在左側導覽列選擇工作負載 > 無狀態,單擊 ack-onepilot 組件(一般在 ack-onepilot 命名空間下,名稱為 ack-onepilot-ack-onepilot)。

  5. 在 ack-onepilot-ack-onepilot 頁面右上方單擊編輯,然後在環境變數地區添加ONE_PILOT_ACCESSKEY和ONE_PILOT_ACCESSKEY_SECRET,通過保密字典引用的方式替換為 Secret 中儲存的值,單擊确定。

    保密字典選擇 ack-onepilot-aksk,ONE_PILOT_ACCESSKEY 的鍵名選擇 ak,ONE_PILOT_ACCESSKEY_SECRET 的鍵名選擇 sk。

ASK/ECI 叢集

如果需監控 ACK Serverless 叢集或對接了 ECI 的叢集應用,請在雲資源訪問授權頁面完成授權,然後重啟 ack-onepilot 組件下的所有 Pod。

步驟三:為 Java 應用開啟應用監控

為應用的 Deployment 添加探針接入所需的 labels 後,應用重啟時探針將自動生效。需要在 Deployment 的 spec.template.metadata.labels 層級下添加以下 labels:

  armsPilotAutoEnable: "on"
  armsPilotCreateAppName: "deployment-name" # 請將deployment-name替換為您的應用程式名稱。
  armsPilotAppWorkspace: "workspace" # 替換為當前智能體空間(Workspace)的名稱。
  aliyun.com/app-language: java
  one-agent.jdk.version: "OpenJDK18" # JDK 版本,配合 JDK 17 及以上版本使用。
  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表。

  2. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態。

  3. 在無狀態頁面的目標應用右側選擇 YAML 編輯。

    如需建立一個新應用,單擊使用YAML建立資源。

  4. 在 YAML 檔案中,將上述 labels 添加到 spec.template.metadata.labels 層級下。

    如果當前還沒有可啟動並執行 AgentScope Java 應用,可以參見範例程式碼構造一個最小可啟動並執行 Agent 應用,打包鏡像後部署到叢集,用於驗證探針接入是否生效。

  5. 單擊更新。

    更新完成後,在AI 應用列表頁面出現目標應用即表示接入生效,查看方式請參見查看監控詳情。

手動接入

  1. 在 AgentScope 接入頁面選擇 Java 語言後,找到手動接入地區,按照頁面提示下載 Java 探針。頁面已根據當前智能體空間產生接入參數,無需選擇公網或內網串連方式。

  2. 解壓探針。

    進入探針安裝包所在目錄,並執行以下命令將安裝包解壓到任意工作目錄下。

    unzip AliyunJavaAgent.zip -d /{user.workspace}/

    {user.workspace}是樣本目錄,請替換為真實的目錄。

  3. 添加接入參數。

    LicenseKey 使用前文從 AgentLoop 接入中心擷取的參數。AppName 表示應用在 AgentLoop 中展示的名稱,可以根據需要自訂;在分布式架構中,同一個應用內可以包含多個對等執行個體。

    不同智能體空間使用的 LicenseKey 不同,切換智能體空間後需要重新擷取。

    請通過下列兩種方式,添加AppName與LicenseKey。

    • 方法一(推薦):將接入指令碼中的{LicenseKey}與{AppName}替換為從控制台獲得的LicenseKey以及該應用對應的AppName。

    • 方法二:如果希望在不同應用中重用啟動指令碼,可以通過修改探針設定檔來填寫 LicenseKey 和 AppName 的相關資訊,具體步驟如下。

      4.4.0 以下版本探針通過該方式預設接入 default workspace。

      1. 在上一步解壓出的 version 檔案中查看 Java 探針版本。

      2. 修改探針設定檔。

        • 4.0.0 及以上版本探針:在探針目錄下建立一個 arms-agent.properties 檔案,並添加以下配置,然後在啟動命令中添加 -Dotel.javaagent.configuration-file=/path/to/arms-agent.properties 或添加環境變數 OTEL_JAVAAGENT_CONFIGURATION_FILE=/path/to/arms-agent.properties 來啟用該設定檔。

          arms.licenseKey={LicenseKey}
          arms.appName={AppName}
        • 4.0.0 以下版本探針:在探針包的 arms-agent.config 檔案中添加以下配置。

          arms.licenseKey={LicenseKey}
          arms.appName={AppName}

          修改 Java 探針設定檔及預設上報地區。

  4. 將接入命令添加到啟動命令中。

    將{user.workspace}替換成實際探針安裝包的解壓目錄,將demoApp.jar替換為真實的JAR包地址,{workspace}替換為資料要上報的目標智能體空間名稱。如果當前還沒有可啟動並執行 JAR 包,可以參見範例程式碼構造一個最小可啟動並執行 Agent 應用。

    說明
    • 如果使用的探針版本在 2.7.3.5 以下,請將本文中的 AliyunJavaAgent/aliyun-java-agent.jar 替換為 ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar,並建議儘快將探針升級至最新版本。

    • 在 Windows 作業系統中,請將指令碼中的/替換為\,並將.sh檔案替換為.bat檔案。

    • v2.7.1.4 及以上版本探針已支援在接入應用監控時開通應用安全,如果需要開通應用安全,請在指令碼中添加-Darms.appsec.enable=true。應用安全的計費規則,請參見計費說明。

    運行環境

    步驟

    Spring Boot 或其他通過 java -jar 命令啟動的 Java 應用

    在啟動命令後加上 -javaagent 參數,並確保 -javaagent 參數寫在 -jar 參數之前。java -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace} -jar demoApp.jar

    Tomcat

    在 {TOMCAT_HOME}/bin/setenv.sh 檔案中添加以下配置。JAVA_OPTS="$JAVA_OPTS -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace}" 如果 Tomcat 版本沒有 setenv.sh 設定檔,請開啟 {TOMCAT_HOME}/bin/catalina.sh 檔案,並在 JAVA_OPTS 後添加上述配置,具體樣本請參見catalina.sh的第 256 行。

    Jetty

    在 {JETTY_HOME}/start.ini 設定檔中添加以下配置。aliyun-java-agent.jar --exec -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace}

    如需在一台伺服器上部署同一應用的多個執行個體,可以通過 -Darms.agentId 參數(邏輯編號)來區分接入的 JVM 進程,例如:

    java -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace} -Darms.agentId=001 -jar demoApp.jar
  5. 重啟 Java 應用。

    應用重啟後,在AI 應用列表頁面出現目標應用即表示接入生效,查看方式請參見查看監控詳情。

範例程式碼

以下樣本基於 AgentScope Java 2.0.1 構造一個最小可運行 Agent,包含一次模型調用和一次工具調用。運行前請確認已安裝 JDK 17 及以上版本,並在環境變數中設定 DASHSCOPE_API_KEY。

在 Maven 專案的 pom.xml 中引入 AgentScope Java 2.0.1 依賴:使用 ReActAgent 等基礎能力時引入 agentscope-core;通過 DashScope 調用模型時引入 agentscope-extensions-model-dashscope;需要 Harness 能力時額外引入 agentscope-harness。

<dependencies>
  <dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-core</artifactId>
    <version>2.0.1</version>
  </dependency>
  <dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-extensions-model-dashscope</artifactId>
    <version>2.0.1</version>
  </dependency>
  <!-- 需要 Harness 能力時引入 -->
  <dependency>
    <groupId>io.agentscope</groupId>
    <artifactId>agentscope-harness</artifactId>
    <version>2.0.1</version>
  </dependency>
</dependencies>

編寫一個帶工具調用的最小 Agent:模型適配器 DashScopeChatModel 從 io.agentscope.extensions.model.dashscope 匯入,訊息通過 Msg、MsgRole 和 TextBlock 構造,工具通過 Toolkit 註冊。

import io.agentscope.core.agent.ReActAgent;
import io.agentscope.core.message.Msg;
import io.agentscope.core.message.MsgRole;
import io.agentscope.core.message.TextBlock;
import io.agentscope.core.tool.Tool;
import io.agentscope.core.tool.ToolParam;
import io.agentscope.core.tool.Toolkit;
import io.agentscope.extensions.model.dashscope.DashScopeChatModel;

public class QuickStart {
    public static void main(String[] args) {
        Toolkit toolkit = new Toolkit();
        toolkit.registerTool(new SimpleTools());

        DashScopeChatModel model = DashScopeChatModel.builder()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .modelName("qwen-plus")
                .build();

        ReActAgent agent = ReActAgent.builder()
                .name("TravelAgent")
                .sysPrompt("You are a travel assistant. Use tools when needed.")
                .model(model)
                .toolkit(toolkit)
                .build();

        Msg msg = Msg.builder()
                .role(MsgRole.USER)
                .content(TextBlock.builder()
                        .text("What time is it in Hangzhou? Give me one travel tip.")
                        .build())
                .build();

        Msg response = agent.call(msg).block();
        System.out.println(response.getTextContent());
    }
}

class SimpleTools {
    @Tool(name = "get_time", description = "Get current local time")
    public String getTime(
            @ToolParam(name = "city", description = "City name") String city) {
        return city + ": " + java.time.LocalDateTime.now()
                .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
}

構造完成後,可以按照手動接入的步驟為應用掛載探針並啟動。

查看監控詳情

  1. 登入 AgentLoop 控制台,選擇目標智能體空間,在左側導覽列單擊 AI Agent 可觀測。

  2. 在 AI 應用列表頁面找到已接入的 AgentScope Java 應用,單擊應用程式名稱進入詳情頁。

    在應用詳情頁可查看該應用的調用鏈路(Trace)詳情:

  • 概覽資訊:包括 Trace ID、開始時間、總耗時和 Total tokens 等。

  • 鏈路時序圖:按層級展示完整的 Agent 調用鏈以及各 Span 的耗時。根 Span 為 AGENT 類型,對應一次 Agent 執行,其耗時即本次調用的總耗時;其下依次為 STEP 類型(對應 ReAct 迴圈的每一輪)、LLM 類型(模型調用,包含輸入和輸出 Token 數)和 TOOL 類型(工具調用,例如樣本中的 get_time)。

  • Span 類型篩選:支援按 AGENT、STEP、LLM、TOOL 篩選 Span,快速定位目標節點。

  • Span 詳情:單擊某個 Span,在右側詳情面板查看具體資訊。例如 LLM Span 展示 Input Messages(system 提示詞和 user 問題)和 Output Messages(模型響應及工具調用詳情)。

    如果應用或資料未出現在監控頁面,請參見 Java 探針排障文檔進行排查。

更多參考