AgentLoop recopila datos de observability para las aplicaciones Java desarrolladas con el framework AgentScope mediante la sonda de Java. Esta sonda se basa en el estándar OpenTelemetry y captura automáticamente las trazas de llamadas de su aplicación. Además, reporta a AgentLoop los datos de ejecución del agente, así como las invocaciones de modelos y herramientas. Este tema describe cómo integrar una aplicación Java de AgentScope en AgentLoop para que usted monitoree el estado de ejecución de su aplicación de IA en tiempo real.
Descripción general del framework
AgentScope es un framework de código abierto de Alibaba para desarrollar aplicaciones multiagente. Proporciona varios tipos de agentes, como ReActAgent, e incluye adaptadores de modelos integrados como DashScope. También admite la llamada a herramientas, la gestión de memoria y la colaboración entre múltiples agentes. AgentScope Java es la implementación de este framework en Java y resulta adecuado para construir aplicaciones LLM dentro del ecosistema JVM.
Tras la integración, se monitorea automáticamente la siguiente información:
Trazas de ejecución del agente.
Invocaciones de LLM: uso de tokens y contenido de entrada y salida de cada invocación al modelo.
Trazas de llamadas a herramientas: detalles de cada herramienta registrada en el
Toolkit.-
Pasos ReAct: acción y observación de cada iteración del ciclo.
AgentLoop reporta esta información como datos de tipo Trace y Metric.
Métodos de integración
Para integrar una aplicación Java de AgentScope en AgentLoop, primero obtenga los parámetros de integración en la consola de AgentLoop y luego instale la sonda de Java según su entorno de despliegue.
Requisitos previos y límites
Versión de JDK: ejecute la aplicación Java de AgentScope sobre JDK 17 o posterior.
Memoria de la JVM: al instalar la sonda de Java, compruebe que la memoria heap máxima de la JVM de destino supere los 300 MB.
Servicio AgentLoop: AgentLoop debe estar habilitado y contar con un AgentSpace creado.
Obtener los parámetros de integración
Inicie sesión en la consola de AgentLoop. En el panel de navegación izquierdo, haga clic en Integration Center.
Haga clic en la tarjeta AgentScope.
En la página de integración de AgentScope, seleccione el lenguaje Java.
Introduzca el nombre de la aplicación. La página genera los parámetros y las instrucciones de instalación obligatorios para integrar la sonda de Java.
Instalar la sonda de Java
Elija uno de los siguientes métodos de instalación según su entorno de despliegue:
Integración con Container Service for Kubernetes (ACK) y Container Compute Service (ACS): indicado para aplicaciones desplegadas en clústeres ACK o ACS. El componente ack-onepilot instala y mantiene automáticamente la sonda de Java en entornos de contenedores.
-
Integración manual: diseñado para aplicaciones que se ejecutan fuera de los clústeres ACK o ACS. Por ejemplo, aplicaciones iniciadas con el comando
java -jar, Tomcat o Jetty. Usted descarga la sonda de Java y la agrega manualmente al proceso de inicio de la aplicación.Una vez completada la integración y reiniciada la aplicación, compruebe que los datos se reportan correctamente en la sección View monitoring details.
Integración con ACK y ACS
El asistente de integración de sondas de monitoreo de aplicaciones (ack-onepilot) es un componente clave para integrar sondas de diversos lenguajes. Este asistente prepara automáticamente los paquetes de sondas en entornos de contenedores y configura el entorno de reporte correspondiente. Para más información sobre el funcionamiento de ack-onepilot, consulte Overview of the ack-onepilot component.
Después de integrar la sonda, se aplica automáticamente una nueva versión cuando la aplicación se reinicia. De este modo, ack-onepilot actualiza la sonda a la versión más reciente y mantiene una experiencia uniforme. Si prefiere que la sonda montada no se actualice de forma automática con cada nuevo lanzamiento, controle la versión por su cuenta. Para más información, consulte Manually control the probe version.
Este método consta de tres pasos: instalar ack-onepilot, otorgar los permisos de acceso que ARMS requiere y habilitar el monitoreo de aplicaciones.
Paso 1: Instalar el asistente de integración de sondas (ack-onepilot)
Inicie sesión en la consola de Container Service for Kubernetes. En la página Clusters, haga clic en el nombre del clúster de destino.
-
En el panel de navegación izquierdo, haga clic en Add-ons y busque ack-onepilot.
ImportanteLa versión de ack-onepilot debe ser 5.1.0 o posterior.
-
En la tarjeta ack-onepilot, haga clic en Install.
NotaDe manera predeterminada, el componente ack-onepilot admite hasta 1000 pods. Por cada 1000 pods adicionales en el clúster, aumente 0.5 núcleos de CPU y 512 MB de memoria en los recursos de ack-onepilot.
Para instalar ack-onepilot en un clúster ACS, configure accessKey y accessKeySecret (el AccessKey ID y el AccessKey secret de su cuenta de Alibaba Cloud) en la parte inferior de la tarjeta de instalación. Para más información, consulte Create an AccessKey pair. Compruebe que la cuenta de Alibaba Cloud correspondiente cuente con los permisos AliyunARMSFullAccess y AliyunSTSAssumeRoleAccess.
-
En la página que aparece, configure los parámetros. Utilice los valores predeterminados y haga clic en OK.
NotaUna vez finalizada la instalación, puede actualizar, configurar o desinstalar el componente ack-onepilot desde la página Add-ons.
Paso 2: Otorgar permisos de acceso a los recursos de ARMS
El procedimiento de autorización depende del tipo de clúster:
Clústeres administrados ACK: compruebe si el clúster contiene el ARMS Addon Token. Si el token existe, no se requiere ninguna autorización adicional. En caso contrario, agregue las políticas de acceso manualmente.
Clústeres dedicados y clústeres registrados: proporcione a ack-onepilot el par de AccessKey de una cuenta de Alibaba Cloud que tenga permisos de ARMS.
Clústeres ASK/ECI: complete la autorización en la página Cloud Resource Access Authorization.
Clústeres administrados ACK
Si el ARMS Addon Token no existe en su clúster administrado ACK, siga estas operaciones para otorgar manualmente los permisos de acceso a los recursos de ARMS. Si el token ya existe, salte al paso 3.
Compruebe si el ARMS Addon Token existe en el clúster.
Inicie sesión en la consola de Container Service for Kubernetes. En la página Clusters, haga clic en el nombre del clúster de destino para acceder a su página de detalles.
En el panel de navegación izquierdo, elija Configurations > Secrets. En la parte superior de la página, seleccione kube-system en Namespace y compruebe si existe addon.arms.token.
Si el ARMS Addon Token existe en el clúster, ARMS realiza una autorización sin contraseña. Los clústeres administrados de Kubernetes incluyen este token de forma predeterminada, aunque algunos clústeres creados en versiones anteriores podrían no tenerlo. Por lo tanto, en un clúster administrado de Kubernetes, compruebe primero la existencia del ARMS Addon Token. Si no existe, aplique la autorización manual.
Agregue las políticas de acceso manualmente.
Inicie sesión en la consola de Container Service for Kubernetes. En la página Clusters, haga clic en el nombre del clúster de destino.
En la pestaña Basic Information de la página Cluster Information, dentro de la sección Cluster Resources, haga clic en el enlace junto a Worker RAM Role.
En la pestaña Permissions, haga clic en Grant Permission.
-
En el panel Grant Permission, agregue las dos políticas de acceso siguientes y haga clic en Confirm Grant Permission.
AliyunTracingAnalysisFullAccess: permisos completos para Managed Service for OpenTelemetry.
AliyunARMSFullAccess: permisos completos para ARMS.
Clústeres dedicados y clústeres registrados
Para monitorear aplicaciones en clústeres dedicados ACK y clústeres registrados de ACK One, compruebe que la cuenta de Alibaba Cloud correspondiente tenga los permisos AliyunARMSFullAccess y AliyunSTSAssumeRoleAccess. Para más información sobre cómo otorgar permisos, consulte Grant permissions to a RAM user.
Después de instalar el componente ack-onepilot, también debe introducir en él el par de AccessKey de una cuenta de Alibaba Cloud con permisos de ARMS. Utilice uno de los siguientes métodos.
Método 1: Introducir el par de AccessKey en Helm
Inicie sesión en la consola de Container Service for Kubernetes. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, elija Applications > Helm y luego haga clic en Update junto al componente ack-onepilot.
-
Reemplace
accessKeyyaccessKeySecretcon el par de AccessKey de la cuenta actual y haga clic en OK.NotaPara más información sobre cómo obtener un par de AccessKey, consulte Create an AccessKey pair.
En la sección
controllerdel editor YAML, localiceaccessKey: __ACCESSKEY__yaccessKeySecret: __ACCESSKEY_SECRET__, y reemplace los marcadores de posición con el par de AccessKey real. Reinicie el Deployment de la aplicación.
Método 2: Hacer referencia a un Secret de Kubernetes
Inicie sesión en la consola de Container Service for Kubernetes. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, elija Configurations > Secrets.
-
Seleccione el namespace de ack-onepilot, cree un Secret y agregue el par de AccessKey.
NotaPara más información sobre cómo obtener un par de AccessKey, consulte Create an AccessKey pair.
Establezca el nombre del Secret como
ack-onepilot-aksky seleccione Opaque como tipo. En la sección de datos, agregue dos entradas: defina los nombres comoakysk, y asigne como valores el AccessKey ID y el AccessKey secret correspondientes. Luego haga clic en OK. En el panel de navegación izquierdo, elija Workloads > Deployments y haga clic en el componente ack-onepilot. Este componente suele ubicarse en el namespace ack-onepilot y se denomina ack-onepilot-ack-onepilot.
-
En la esquina superior derecha de la página ack-onepilot-ack-onepilot, haga clic en Edit. En la sección Environment Variables, agregue
ONE_PILOT_ACCESSKEYyONE_PILOT_ACCESSKEY_SECRET, haga referencia a los valores almacenados en el Secret y haga clic en OK.Para el Secret, seleccione ack-onepilot-aksk. En ONE_PILOT_ACCESSKEY, seleccione ak como clave. En ONE_PILOT_ACCESSKEY_SECRET, seleccione sk como clave.
Clústeres ASK/ECI
Para monitorear aplicaciones en clústeres ACK Serverless o clústeres conectados a ECI, complete la autorización en la página Cloud Resource Access Authorization y luego reinicie todos los pods del componente ack-onepilot.
Paso 3: Habilitar el monitoreo de aplicaciones para una aplicación Java
Para habilitar el monitoreo de aplicaciones, agregue etiquetas de monitoreo al Deployment de su aplicación en el editor YAML.
Inicie sesión en la consola de Container Service for Kubernetes. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre del clúster de destino. En el panel de navegación izquierdo, elija Workloads > Deployments.
-
En la página Deployments, localice la aplicación de destino y elija Edit YAML.
Para crear una aplicación nueva, haga clic en Create Resources from YAML.
-
En el archivo YAML, agregue las siguientes
labelsbajo el nivel spec.template.metadata.labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "deployment-name" # Replace deployment-name with the name of your application. armsPilotAppWorkspace: "workspace" # Replace with the current Workspace name. aliyun.com/app-language: javaEl siguiente fragmento muestra la ubicación de las etiquetas dentro de un Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: arms-springboot-demo spec: template: metadata: labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "arms-k8s-demo" armsPilotAppWorkspace: "workspace" Haga clic en Update.
Integración manual
Utilice la integración manual para instalar la sonda de Java en entornos distintos a los clústeres ACK o ACS. Por ejemplo, en aplicaciones iniciadas con el comando java -jar, Tomcat o Jetty.
Después de seleccionar el lenguaje Java en la página de integración de AgentScope, localice la sección de integración manual y descargue la sonda de Java siguiendo las instrucciones en pantalla. La página ya generó los parámetros de integración para el AgentSpace actual.
-
Extraiga la sonda.
Acceda al directorio del paquete de la sonda y ejecute el siguiente comando para extraerlo en el directorio de trabajo que prefiera.
unzip AliyunJavaAgent.zip -d /{user.workspace}/Nota{user.workspace} es un directorio de ejemplo. Reemplácelo con su directorio real.
-
Configure los parámetros AppName y LicenseKey.
Utilice la LicenseKey que obtuvo previamente en el Integration Center de AgentLoop. AppName es el nombre que se muestra para la aplicación en AgentLoop y se puede personalizar. En una arquitectura distribuida, una aplicación puede contener varias instancias equivalentes.
ImportanteCada AgentSpace utiliza una LicenseKey distinta. Después de cambiar de AgentSpace, obtenga nuevamente la LicenseKey.
Proporcione AppName y LicenseKey mediante uno de los siguientes métodos:
Método 1 (recomendado): use los parámetros de inicio -D. Reemplace los marcadores de posición
{LicenseKey}y{AppName}en el comando de inicio de Step 4 con la LicenseKey obtenida en la consola y el AppName de la aplicación.-
Método 2: modifique el archivo de configuración de la sonda. Más indicado cuando desea reutilizar el script de inicio en distintas aplicaciones. Siga estos pasos:
Revise la versión de la sonda de Java en el archivo version extraído en el paso anterior.
-
Modifique el archivo de configuración de la sonda según su versión:
-
Para la sonda 4.0.0 o posterior, cree un archivo arms-agent.properties en el directorio de la sonda y agregue la siguiente configuración. Luego añada
-Dotel.javaagent.configuration-file=/path/to/arms-agent.propertiesal comando de inicio, o establezca la variable de entornoOTEL_JAVAAGENT_CONFIGURATION_FILE=/path/to/arms-agent.propertiespara habilitar el archivo de configuración.arms.licenseKey={LicenseKey} arms.appName={AppName} -
Para una sonda anterior a la 4.0.0, agregue la siguiente configuración al archivo arms-agent.config incluido en el paquete de la sonda.
arms.licenseKey={LicenseKey} arms.appName={AppName}
-
NotaEn versiones de la sonda anteriores a la 4.4.0, este método se conecta de forma predeterminada al
default workspace.Para más información sobre otros elementos del archivo de configuración de la sonda, consulte Modificar el archivo de configuración de la sonda de Java y la región de reporte predeterminada.
-
Agregue el comando de integración al comando de inicio.
Reemplace
{user.workspace}con el directorio real donde extrajo el paquete de la sonda, y sustituya demoApp.jar por la ruta real del paquete JAR.NotaSi la versión de la sonda es anterior a la 2.7.3.5, reemplace AliyunJavaAgent/aliyun-java-agent.jar en este documento por ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar. Se recomienda actualizar la sonda a la versión más reciente lo antes posible.
En sistemas operativos Windows, reemplace
/en el script por\, y cambie los archivos.shpor archivos.bat.La versión 2.7.1.4 de la sonda y posteriores permiten habilitar Application Security durante la integración del monitoreo de aplicaciones. Para habilitarlo, agregue
-Darms.appsec.enable=trueal script. Para más información sobre las reglas de facturación de Application Security, consulte Billing rules.
Agregue el parámetro -javaagent según su entorno de ejecución:
Entorno de ejecución
Pasos
Spring Boot u otras aplicaciones Java iniciadas con el comando
java -jarAgregue el parámetro -javaagent al comando de inicio. Asegúrese de colocarlo antes del parámetro -jar.
java -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace} -jar demoApp.jarTomcat
Agregue la siguiente configuración al archivo
{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} "Si su versión de Tomcat no incluye el archivo de configuraciónsetenv.sh, abra el archivo{TOMCAT_HOME}/bin/catalina.shy agregue la configuración anterior después deJAVA_OPTS. Para ver un ejemplo específico, consulte la línea 256 de catalina.sh.Jetty
Agregue la siguiente configuración al archivo
{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}Para desplegar varias instancias de la misma aplicación en un solo servidor, utilice el parámetro -Darms.agentId (un número lógico) para distinguir los procesos JVM que se van a integrar. Por ejemplo:
java -javaagent:/{user.workspace}/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey={LicenseKey} -Darms.appName={AppName} -Darms.workspace={workspace} -Darms.agentId=001 -jar demoApp.jar Reinicie la aplicación Java.
Código de ejemplo
El siguiente ejemplo utiliza AgentScope Java 2.0.1 para construir un agente mínimo ejecutable que incluye una invocación de modelo y una llamada a herramienta. Antes de ejecutarlo, compruebe que tiene instalado JDK 17 o posterior y que DASHSCOPE_API_KEY está definida como variable de entorno.
Agregue las dependencias de AgentScope Java 2.0.1 al archivo pom.xml de su proyecto Maven:
Agregue
agentscope-corepara usar funciones básicas comoReActAgent.Agregue
agentscope-extensions-model-dashscopepara invocar modelos a través de DashScope.Agregue
agentscope-harnesssi necesita las funciones de 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>
<!-- Add this dependency if Harness features are required -->
<dependency>
<groupId>io.agentscope</groupId>
<artifactId>agentscope-harness</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
Escriba un agente mínimo con llamadas a herramientas: el adaptador de modelo DashScopeChatModel se importa desde io.agentscope.extensions.model.dashscope, los mensajes se construyen con Msg, MsgRole y TextBlock, y las herramientas se registran con 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"));
}
}
Para ejecutar este ejemplo con el monitoreo habilitado, empaquételo como un archivo JAR e inícielo con el comando de integración descrito en Step 4 del procedimiento de integración manual. Reemplace demoApp.jar por la ruta del archivo JAR del ejemplo. Si despliega el ejemplo en un clúster ACK o ACS, agregue al Deployment las etiquetas de monitoreo descritas en el paso 3.
Consultar los detalles del monitoreo
Inicie sesión en la consola de AgentLoop y seleccione el AgentSpace de destino. En el panel de navegación izquierdo, haga clic en AI Agent Observability.
-
En la página AI Application List, localice la aplicación Java de AgentScope integrada y haga clic en Application Name para ir a la página de detalles.
En la página de detalles de la aplicación, puede consultar las trazas de llamadas:
Overview: incluye el Trace ID, la hora de inicio, la duración total, Total tokens, entre otros datos.
Trace timeline: muestra la cadena completa de llamadas del agente por nivel y la duración de cada span. El span raíz es de tipo AGENT y corresponde a una ejecución del agente; su duración equivale a la duración total de la llamada. Los niveles inferiores son de tipo STEP (cada iteración del ciclo ReAct), LLM (invocaciones del modelo, con los conteos de tokens de entrada y salida) y TOOL (llamadas a herramientas, como
get_timeen el ejemplo).Filtrado por tipo de span: filtra los spans por AGENT, STEP, LLM o TOOL para localizar rápidamente el nodo deseado.
Detalles del span: haga clic en un span para ver sus detalles en el panel derecho. Por ejemplo, un span LLM muestra Input Messages (el prompt del sistema y la pregunta del usuario) y Output Messages (la respuesta del modelo y los detalles de la llamada a la herramienta).
Referencias
Para conocer la API y más usos de AgentScope Java 2.0.1, consulte la documentación oficial de AgentScope.
Para instalar la sonda de Java en Container Service for Kubernetes (ACK) o Container Compute Service (ACS), consulte Install the Java probe in ACK and ACS clusters by using the ack-onepilot component.
Para instalar la sonda de Java manualmente, consulte Manually install the probe.
Para conocer los métodos de solución de problemas cuando la integración de la sonda de Java o el reporte de datos presentan anomalías, consulte la documentación de solución de problemas de la sonda de Java.