接入 AgentScope(Java) 应用

更新时间:
复制 MD 格式

大模型可观测支持通过 Java 探针,为基于 AgentScope 框架构建的 Java 应用采集可观测数据。Java 探针基于 OpenTelemetry 标准自动采集应用调用链路,将 AgentScope Java 应用中的 Agent 执行、模型调用和工具调用数据上报至云监控 2.0。本文介绍如何将 AgentScope Java 应用接入云监控 2.0,实时掌握 AI 应用的运行状态。

框架介绍

AgentScope 是阿里巴巴开源的多 Agent 应用开发框架,提供 ReActAgent 等多种 Agent 类型,内置 DashScope 等模型适配器,支持工具调用、记忆管理和多 Agent 协作。AgentScope Java 是该框架的 Java 实现,适用于在 JVM 生态中构建大语言模型应用。

接入后,自动监控以下内容:

  • Agent 执行链路。

  • LLM 调用:模型调用的 Token 用量、输入和输出内容。

  • 工具调用链路:Toolkit 中各工具的调用详情。

  • ReAct Step:每一轮循环的行动与观察。

接入方式

AgentScope Java 应用通过 Java 探针接入云监控 2.0:先在云监控 2.0 控制台获取接入参数,再根据部署环境选择一种探针安装方式。

前提条件与使用限制

  • JDK 版本:建议使用 JDK 17 及以上版本运行 AgentScope Java 应用。

  • JVM 内存:安装 Java 探针时,建议目标 JVM 最大堆内存大于 300 MB。

  • 云监控服务:已开通云监控 2.0 服务,并创建工作空间。

  • 数据类型:当前主要上报 Trace 和 Metric 数据。

获取接入参数

  1. 登录云监控 2.0 控制台,选择目标工作空间。

  2. 在左侧导航栏单击接入中心。

  3. 在AI 应用可观测区域选择 AgentScope Java 接入项。

  4. 输入应用名,根据部署环境选择连接方式,然后单击LicenseKey右侧的点击获取。

请记录以下参数,安装探针时需要使用:

  • LicenseKey:数据写入鉴权的 LicenseKey。

  • 工作空间:云监控 2.0 工作空间标识。

  • RegionId:应用上报数据所在地域,例如 cn-hangzhou。

  • 应用名:应用在云监控 2.0 中展示的名称。

安装 Java 探针

根据部署环境选择对应页签,按页签内步骤安装 Java 探针:

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

ack-onepilot组件说明

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

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

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

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

  2. 在左侧导航栏单击组件管理,搜索并定位ack-onepilot。

    重要

    ack-onepilot版本需在5.1.0或以上。

  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,请跳转至步骤三。

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

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

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

说明

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

手动添加权限策略。

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

  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. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  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. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  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)应用并开启应用监控的完整YAML示例模板如下:

展开查看完整示例YAML文件(Java)

apiVersion: v1
kind: Namespace
metadata:
  name: arms-demo
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-springboot-demo
  namespace: arms-demo
  labels:
    app: arms-springboot-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: arms-springboot-demo
  template:
    metadata:
      labels:
        app: arms-springboot-demo
        armsPilotAutoEnable: "on"
        armsPilotCreateAppName: "arms-k8s-demo"
        armsPilotAppWorkspace: "workspace"   # 替换为当前Workspace名称。
        one-agent.jdk.version: "OpenJDK18"
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
          imagePullPolicy: Always
          name: arms-springboot-demo
          env:
            - name: SELF_INVOKE_SWITCH
              value: "true"
            - name: COMPONENT_HOST
              value: "arms-demo-component"
            - name: COMPONENT_PORT
              value: "6666"
            - name: MYSQL_SERVICE_HOST
              value: "arms-demo-mysql"
            - name: MYSQL_SERVICE_PORT
              value: "3306"
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-springboot-demo-subcomponent
  namespace: arms-demo
  labels:
    app: arms-springboot-demo-subcomponent
spec:
  replicas: 2
  selector:
    matchLabels:
      app: arms-springboot-demo-subcomponent
  template:
    metadata:
      labels:
        app: arms-springboot-demo-subcomponent
        armsPilotAutoEnable: "on"
        armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
        armsPilotAppWorkspace: "workspace"   # 替换为当前Workspace名称。
        one-agent.jdk.version: "OpenJDK18"
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
          imagePullPolicy: Always
          name: arms-springboot-demo-subcomponent
          env:
            - name: SELF_INVOKE_SWITCH
              value: "false"
            - name: MYSQL_SERVICE_HOST
              value: "arms-demo-mysql"
            - name: MYSQL_SERVICE_PORT
              value: "3306"
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: arms-demo-component
  name: arms-demo-component
  namespace: arms-demo
spec:
  ports:
    - name: arms-demo-component-svc
      port: 6666
      targetPort: 8888
  selector:
    app: arms-springboot-demo-subcomponent
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
  name: arms-demo-mysql
  namespace: arms-demo
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
          name: mysql
          ports:
            - containerPort: 3306
              name: mysql
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: mysql
  name: arms-demo-mysql
  namespace: arms-demo
spec:
  ports:
    - name: arms-mysql-svc
      port: 3306
      targetPort: 3306
  selector:
    app: mysql
---
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表。

  2. 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态。

  3. 在无状态页面的目标应用右侧选择image > YAML 编辑。

    如需创建一个新应用,单击使用YAML创建资源。

  4. 在YAML文件中将以下labels添加到spec.template.metadata层级下。

    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "deployment-name"    # 请将deployment-name替换为您的应用名称。
      armsPilotAppWorkspace: "workspace"  # 替换为当前Workspace名称。
      aliyun.com/app-language: java
    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-demo
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-springboot-demo
      namespace: arms-demo
      labels:
        app: arms-springboot-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo
      template:
        metadata:
          labels:
            app: arms-springboot-demo
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo"
            armsPilotAppWorkspace: "workspace"
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
  5. 单击更新。

手动接入

安装探针

  1. 登录云监控2.0控制台,选择目标工作空间,在左侧导航栏单击接入中心。

  2. 单击Java应用监控卡片,然后单击手动安装。

  3. 下载探针。

    • 方法一:手动下载。在Java应用监控面板根据提示下载对应的探针。

    • 方法二:使用wget命令下载。根据您的地域下载对应的探针安装包。

      查看各地域对应的探针安装包下载命令

      地域

      公网地址

      VPC地址

      华东1(杭州)

      wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华东2(上海)

      wget "http://arms-apm-cn-shanghai.oss-cn-shanghai.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华北1(青岛)

      wget "http://arms-apm-cn-qingdao.oss-cn-qingdao.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-qingdao.oss-cn-qingdao-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华北2(北京)

      wget "http://arms-apm-cn-beijing.oss-cn-beijing.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-beijing.oss-cn-beijing-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华北3(张家口)

      wget "http://arms-apm-cn-zhangjiakou.oss-cn-zhangjiakou.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-zhangjiakou.oss-cn-zhangjiakou-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华北5(呼和浩特)

      wget "http://arms-apm-cn-huhehaote.oss-cn-huhehaote.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-huhehaote.oss-cn-huhehaote-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华北6(乌兰察布)

      wget "http://arms-apm-cn-wulanchabu.oss-cn-wulanchabu.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-wulanchabu.oss-cn-wulanchabu-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华南1(深圳)

      wget "http://arms-apm-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-shenzhen.oss-cn-shenzhen-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华南2(河源)

      wget "http://arms-apm-cn-heyuan.oss-cn-heyuan.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-heyuan.oss-cn-heyuan-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华南3(广州)

      wget "http://arms-apm-cn-guangzhou.oss-cn-guangzhou.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-guangzhou.oss-cn-guangzhou-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      西南1(成都)

      wget "http://arms-apm-cn-chengdu.oss-cn-chengdu.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-chengdu.oss-cn-chengdu-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      中国(香港)

      wget "http://arms-apm-cn-hongkong.oss-cn-hongkong.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-hongkong.oss-cn-hongkong-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      新加坡

      wget "http://arms-apm-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-ap-southeast-1.oss-ap-southeast-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      亚太东南3(吉隆坡)

      wget "http://arms-apm-ap-southeast-3.oss-ap-southeast-3.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-ap-southeast-3.oss-ap-southeast-3-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      亚太东南5(雅加达)

      wget "http://arms-apm-ap-southeast-5.oss-ap-southeast-5.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-ap-southeast-5.oss-ap-southeast-5-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      亚太东北1(东京)

      wget "http://arms-apm-ap-northeast-1.oss-ap-northeast-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-ap-northeast-1.oss-ap-northeast-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      欧洲中部1(法兰克福)

      wget "http://arms-apm-eu-central-1.oss-eu-central-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-eu-central-1.oss-eu-central-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      欧洲西部1(伦敦)

      wget "http://arms-apm-eu-west-1.oss-eu-west-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-eu-west-1.oss-eu-west-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      美国东部1(弗吉尼亚)

      wget "http://arms-apm-us-east-1.oss-us-east-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-us-east-1.oss-us-east-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      美国西部1(硅谷)

      wget "http://arms-apm-us-west-1.oss-us-west-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-us-west-1.oss-us-west-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华东1金融云

      无

      wget "http://arms-apm-cn-hangzhou-finance.oss-cn-hzjbp-b-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华东2金融云

      无

      wget "http://arms-apm-cn-shanghai-finance-1.oss-cn-shanghai-finance-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      华南1金融云

      无

      wget "http://arms-apm-cn-shenzhen-finance-1.oss-cn-shenzhen-finance-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip

      政务云

      wget "http://arms-apm-cn-north-2-gov-1.oss-cn-north-2-gov-1.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
      wget "http://arms-apm-cn-north-2-gov-1.oss-cn-north-2-gov-1-internal.aliyuncs.com/AliyunJavaAgent.zip" -O AliyunJavaAgent.zip
  4. 解压探针。

    进入探针安装包所在目录,并执行以下命令将安装包解压到任意工作目录下。

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

    {user.workspace}是示例目录,请替换为真实的目录。

  5. 添加AppName和LicenseKey参数。

    在Java应用监控面板获取到对应的LicenseKey。AppName代表接入到ARMS的哪一个应用中,您可以根据需要自定义您的应用名,在分布式架构中,同一个应用内可以包含多个对等的实例。

    重要

    不同的workspace的LicenseKey不同,新workspace的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 探针配置文件及默认上报地域。

  6. 将接入命令添加到启动命令中。

    将{user.workspace}替换成实际探针安装包的解压目录,将demoApp.jar替换为真实的JAR包地址。

    说明
    • 如果您使用的探针版本在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
  7. 重启Java应用。

示例代码

以下示例基于 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. 登录云监控 2.0 控制台,选择目标工作空间,在左侧导航栏选择所有功能 > AI 应用可观测。

  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(模型响应及工具调用详情)。

更多参考