全部产品
Search
文档中心

Agent 观测与优化 AgentLoop:接入 AgentScope(Java) 应用

更新时间:Aug 28, 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 数据。

容器服务 ACK 或容器计算服务 ACS 接入时,还需满足以下条件:

  • 集群可安装应用监控探针接入助手(ack-onepilot)组件,且组件版本为 5.1.0 及以上。

  • 已为集群授予 ARMS 资源的访问权限:ACK 托管集群需存在 ARMS Addon Token,或已为 Worker RAM 角色添加 AliyunTracingAnalysisFullAccess 和 AliyunARMSFullAccess 权限策略;ACK 专有版集群和 ACK One 注册集群需使用已包含 AliyunARMSFullAccessAliyunSTSAssumeRoleAccess 权限的阿里云账号;ACK Serverless 集群或对接了 ECI 的集群需完成云资源访问授权。

    运行示例代码前,需在环境变量中设置 DASHSCOPE_API_KEY

获取接入参数

  1. 登录 AgentLoop 控制台,在左侧导航栏单击接入中心

  2. 单击 AgentScope 卡片。

  3. 在 AgentScope 接入页面选择 Java 语言。

  4. 输入应用名,页面将生成 Java 探针接入所需的参数和安装指引。

容器服务 ACK 和容器计算服务 ACS 接入

ack-onepilot 组件说明

应用监控探针接入助手(ack-onepilot)是用于接入各语言探针的重要组件,可以帮助在容器环境中自动准备好应用监控探针包并构建好探针的上报环境。应用监控探针接入助手(ack-onepilot)的基本原理请参见ack-onepilot组件基本原理说明

探针接入后,在新版本探针发布时,应用重启时 ack-onepilot 会自动将探针升级到最新版本。如果不需要跟随应用监控探针的版本发布自动更新挂载的探针,可以自主控制探针版本。具体操作,请参见自主控制探针版本

步骤一:安装探针接入助手(ack-onepilot)

  1. 登录容器服务管理控制台,在集群列表页面单击目标集群名称。

  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. 登录容器服务管理控制台,在集群列表页面,单击目标集群名称进入集群详情页。

  2. 在左侧导航栏选择配置管理 > 保密字典,然后在顶部选择命名空间kube-system,查看 addon.arms.token 是否存在。

    集群存在 ARMS Addon Token 时,ARMS 会进行免密授权。ACK 托管集群默认存在 ARMS Addon Token,但部分早期创建的 ACK 托管集群可能没有 ARMS Addon Token。因此,对于 ACK 托管集群,建议首先检查 ARMS Addon Token 是否存在;若不存在,需进行手动授权。

手动添加权限策略。

  1. 登录容器服务管理控制台,在集群列表页面单击目标集群名称。

  2. 集群信息 > 基本信息页签的集群资源区域,单击Worker RAM角色右侧的链接。

  3. 权限管理页签单击新增授权

  4. 新增授权面板添加以下两个权限策略,然后单击确认新增授权

    • AliyunTracingAnalysisFullAccess:可观测链路 OpenTelemetry 版的完整权限。

    • AliyunARMSFullAccess:ARMS 的完整权限。

专有版集群/注册集群

如果需要监控 ACK 专有版集群和 ACK One 注册集群应用,请确认对应的阿里云账号已包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess权限。添加权限的操作,请参见管理RAM用户的权限

安装 ack-onepilot 组件后,还需要在 ack-onepilot 中填写有 ARMS 权限的阿里云账号 AK/SK,可以通过以下两种方式填写。

方式一:Helm 中直接填写 AK/SK
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏选择应用 > Helm页面,单击ack-onepilot组件右侧的更新

  3. accessKeyaccessKeySecret替换为当前账号的AccessKey,然后单击确定

    说明

    获取AccessKey的操作,请参见创建AccessKey

    在YAML配置编辑器的controller配置段中,找到accessKey: __ACCESSKEY__accessKeySecret: __ACCESSKEY_SECRET__,将占位符替换为实际的AccessKey信息。

  4. 重启应用 Deployment。

方式二:通过 K8s Secret 引入 AK/SK
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏选择配置管理 > 保密字典

  3. 选择 ack-onepilot 命名空间,然后创建 Secret,添加 AK/SK 信息。

    说明

    获取AccessKey的操作,请参见创建AccessKey

    Secret 名称设置为 ack-onepilot-aksk,类型选择 Opaque,在数据区域添加两行:名称分别为 aksk,值分别填入对应的 AccessKey ID 和 AccessKey Secret,然后单击确定

  4. 在左侧导航栏选择工作负载 > 无状态,单击 ack-onepilot 组件(一般在 ack-onepilot 命名空间下,名称为 ack-onepilot-ack-onepilot)。

  5. 在 ack-onepilot-ack-onepilot 页面右上角单击编辑,然后在环境变量区域添加ONE_PILOT_ACCESSKEYONE_PILOT_ACCESSKEY_SECRET,通过保密字典引用的方式替换为 Secret 中保存的值,单击确定

    保密字典选择 ack-onepilot-akskONE_PILOT_ACCESSKEY 的键名选择 akONE_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. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  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 不同,切换智能体空间后需要重新获取。

    请通过下列两种方式,添加AppNameLicenseKey

    • 方法一(推荐):将接入脚本中的{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:模型适配器 DashScopeChatModelio.agentscope.extensions.model.dashscope 导入,消息通过 MsgMsgRoleTextBlock 构造,工具通过 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 探针排障文档进行排查。

更多参考