Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Control de la recopilación del historial de conversaciones

Última actualización: Sep 04, 2026

De forma predeterminada, el probe registra el historial de conversaciones durante las llamadas a LLM y agentes en un formato compatible con OpenTelemetry. Puede configurar cómo se recopilan y almacenan estos datos para sus aplicaciones de LLM.

El agente de ARMS admite tres modos para recopilar y registrar el historial de conversaciones:

  • Registrar el historial de conversaciones en los atributos de span (predeterminado).

  • Detener el registro del historial de conversaciones.

  • Registrar el historial de conversaciones en los registros.

Puede configurar el comportamiento de recopilación según sus necesidades.

Requisitos previos

  • Ha instalado Python probe o Java probe.

  • Python

    Componente/Framework

    Versiones compatibles

    Escenarios

    Versión del probe

    OpenAI Python SDK

    1.X

    • ChatCompletion

    • Completion

    • Embedding

    2.0.0 o posterior

    Java

    Componente/Framework

    Versiones compatibles

    Escenarios

    Versión del probe

    OpenAI Java SDK

    1.1.0 o posterior

    • ChatCompletion

    • Completion

    • Embedding

    4.6.0 o posterior

    Spring AI

    1.0.0 o posterior

    • OpenAI ChatModel

    • ChatClient (Default)

    • ToolManager (Default)

    4.6.0 o posterior

    Spring AI Alibaba

    1.0.0.3 o posterior

    • DashScope ChatModel

    4.6.0 o posterior

Ejemplo

Este ejemplo muestra cómo un React agent realiza una llamada a herramienta. La LLM application envía una solicitud con una tool definition al large model, que responde con una solicitud tool_call. La aplicación ejecuta la llamada, devuelve el tool call result y el large model genera la respuesta final. El siguiente sequence diagram ilustra este proceso.

image

Registro del historial de diálogos en atributos de span

Comportamiento de recopilación y formato de datos

De forma predeterminada, el probe registra los mensajes de entrada, los mensajes de salida, las instrucciones del sistema y las definiciones de herramientas como JSON en los atributos de span.

Nombre del atributo

Descripción

Esquema

Integridad del contenido

gen_ai.input.messages

mensajes de entrada

gen_ai.input.messages

Completo

gen_ai.output.messages

mensajes de salida

gen_ai.output.messages

Completo

gen_ai.system_instructions

instrucciones del sistema

gen_ai.system_instructions

Completo

gen_ai.tool.definitions

definiciones de herramientas

-

  • type

  • name

  • description

Configuración

  • Configure mediante las siguientes variables de entorno:

    Nombre de la variable de entorno

    Valor

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    True

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_CAPTURE_STRATEGY

    "span-attributes"

  • Para aplicaciones Java, también puede configurar esto con propiedades del sistema en el comando de inicio; por ejemplo:

    -Dotel.instrumentation.genai.capture-message-content=true \
    -Dotel.instrumentation.genai.message-content.capture-strategy=span-attributes

Ejemplo

GenAI client span 1

Atributo

Valor

nombre de span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

gen_ai.input.messages

[
  {
    "role": "user",
    "parts": [
      {
        "type": "text",
        "content": "Weather in Paris?"
      }
    ]
  }
]

gen_ai.output.messages

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "tool_call",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "name": "get_weather",
        "arguments": {
          "location": "Paris"
        }
      }
    ],
    "finish_reason": "tool_call"
  }
]

gen_ai.tool.definitions

[
  {
    "type": "function",
    "name": "get_weather",
    "description": "Get the current temperature for a specific location."
  }
]

GenAI client span 2

Atributo

Valor

nombre de span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-call_VSPygqKTWdrhaFErNvMV18Yl"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

gen_ai.input.messages

[
  {
    "role": "user",
    "parts": [
      {
        "type": "text",
        "content": "Weather in Paris?"
      }
    ]
  },
  {
    "role": "assistant",
    "parts": [
      {
        "type": "tool_call",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "name": "get_weather",
        "arguments": {
          "location": "Paris"
        }
      }
    ]
  },
  {
    "role": "tool",
    "parts": [
      {
        "type": "tool_call_response",
        "id": "call_VSPygqKTWdrhaFErNvMV18Yl",
        "response": "rainy, 57°F"
      }
    ]
  }
]

gen_ai.output.messages

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "text",
        "content": "The weather in Paris is currently rainy with a temperature of 57°F."
      }
    ],
    "finish_reason": "stop"
  }
]

Deshabilitar la recopilación del historial de conversaciones

Comportamiento de recopilación y formato de datos

En este modo, el probe no registra los mensajes de entrada, los mensajes de salida ni las instrucciones del sistema. Para las definiciones de herramientas, solo se registra información básica en formato JSON.

Atributo

Descripción

Esquema

Integridad del contenido

gen_ai.input.messages

mensajes de entrada

gen_ai.input.messages

No registrado

gen_ai.output.messages

mensajes de salida

gen_ai.output.messages

No registrado

gen_ai.system_instructions

instrucciones del sistema

gen_ai.system_instructions

No registrado

gen_ai.tool.definitions

definiciones de herramientas

-

  • type

  • name

Configuración

  • Establezca esta variable de entorno:

    Nombre de la variable de entorno

    Valor

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    False

  • Para aplicaciones Java, también puede agregar la siguiente propiedad del sistema al comando de inicio:

    -Dotel.instrumentation.genai.capture-message-content=false

Ejemplo

GenAI Client Span 1

Atributo

Valor

nombre de span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

gen_ai.tool.definitions

[
  {
    "type": "function",
    "name": "get_weather"
  }
]

GenAI Client Span 2

Atributo

Valor

nombre de span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-call_VSPygqKTWdrhaFErNvMV18Yl"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

Registro del historial de conversaciones en registros

Comportamiento de recolección y formato de datos

En este modo, los atributos del span almacenan únicamente información básica. El agente escribe los datos detallados de la conversación (mensajes de entrada, mensajes de salida, instrucciones del sistema y definiciones de herramientas) en un archivo de registro local como entradas JSON de una sola línea.

Atributo

Descripción

Esquema

Integridad del contenido

gen_ai.input.messages

mensajes de entrada

gen_ai.input.messages

Completo

gen_ai.output.messages

mensajes de salida

gen_ai.output.messages

Completo

gen_ai.system_instructions

instrucciones del sistema

gen_ai.system_instructions

Completo

gen_ai.tool.definitions

definiciones de herramientas

-

  • type

  • name

  • description

De forma predeterminada, cuando el agente se inicia, busca un directorio de registros disponible y verifica las siguientes ubicaciones en orden:

  1. Si se especifica un directorio mediante la variable de entorno APSARA_APM_AGENT_WORKSPACE_DIR, el agente escribe los registros en el subdirectorio .apsara-apm/{language}/logs dentro de dicho directorio.

  2. Directorio de registros del agente: /home/admin/.opt/.apsara-apm/{language}/logs

  3. Directorio principal: ~/.apsara-apm/{language}/{agent_version}_{agent_commit_id}/logs

Durante el inicio, el agente imprime el directorio de almacenamiento de registros en stdout. Para simplificar la gestión de directorios, especifique uno mediante la variable de entorno APSARA_APM_AGENT_WORKSPACE_DIR.

Picked up [/Uxxxs/tools/log/.apsara-apm/python] as Agent Workspace.

El archivo de registro del historial de conversaciones se denomina genai_messages_{ip}_{pid}.log. El tamaño máximo del archivo es de 256 MB. Al alcanzar este límite, se activa la rotación de archivos y solo se conservan los dos archivos de registro más recientes.

Configuración

  • Establezca las siguientes variables de entorno:

    Variable de entorno

    Valor

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT

    True

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_CAPTURE_STRATEGY

    event

  • Para aplicaciones Java, también puede agregar propiedades del sistema al comando de inicio. Por ejemplo:

    -Dotel.instrumentation.genai.capture-message-content=true \
    -Dotel.instrumentation.genai.message-content.capture-strategy=event

Ejemplo

GenAI Client Span 1

Atributo

Valor

nombre del span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.operation.name

"chat"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

17

gen_ai.usage.input_tokens

47

gen_ai.response.finish_reasons

["tool_calls"]

GenAI Client Event 1

El spanId corresponde al GenAI Client Span 1.

{
  "scope": {
    "name": "aliyun.instrumentation.openai",
    "version": "1.0.1"
  },
  "timeUnixNano": 1760080084146812928,
  "severity": "UNSPECIFIED",
  "attributes": {
    "event.name": "gen_ai.client.inference.operation.details",
    "gen_ai.provider.name": "openai",
    "gen_ai.operation.name": "chat",
    "gen_ai.request.model": "gpt-4",
    "gen_ai.request.max_tokens": 200,
    "gen_ai.request.top_p": 1.0,
    "gen_ai.response.id": "chatcmpl-9J3uIL87gldCFtiIbyaOvTeYBRA3l",
    "gen_ai.response.model": "gpt-4-0613",
    "gen_ai.usage.output_tokens": 17,
    "gen_ai.usage.input_tokens": 47,
    "gen_ai.response.finish_reasons": ["tool_calls"],
    "gen_ai.input.messages": "[{\"role\":\"user\",\"parts\":[{\"type\":\"text\",\"content\":\"Weather in Paris?\"}]}]",
    "gen_ai.output.messages": "[{\"role\":\"assistant\",\"parts\":[{\"type\":\"tool_call\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"name\":\"get_weather\",\"arguments\":{\"location\":\"Paris\"}}],\"finish_reason\":\"tool_call\"}]",
    "gen_ai.tool.definitions": "[{\"type\":\"function\",\"name\":\"get_weather\",\"description\":\"Get the current temperature for a specific location.\"}]"
  },
  "traceId": "0b46a347592ac487ed092ebe802c6818",
  "spanId": "b3c40af8cd1a522c"
}

GenAI Client Span 2

Atributo

Valor

nombre del span

"chat gpt-4"

gen_ai.provider.name

"openai"

gen_ai.request.model

"gpt-4"

gen_ai.request.max_tokens

200

gen_ai.request.top_p

1.0

gen_ai.response.id

"chatcmpl-call_VSPygqKTWdrhaFErNvMV18Yl"

gen_ai.response.model

"gpt-4-0613"

gen_ai.usage.output_tokens

52

gen_ai.usage.input_tokens

97

gen_ai.response.finish_reasons

["stop"]

GenAI Client Event 2

El spanId corresponde al GenAI Client Span 2.

{
  "scope": {
    "name": "aliyun.instrumentation.openai",
    "version": "1.0.1"
  },
  "timeUnixNano": 1760080084176812928,
  "severity": "UNSPECIFIED",
  "attributes": {
    "event.name": "gen_ai.client.inference.operation.details",
    "gen_ai.provider.name": "openai",
    "gen_ai.operation.name": "chat",
    "gen_ai.request.model": "gpt-4",
    "gen_ai.request.max_tokens": 200,
    "gen_ai.request.top_p": 1.0,
    "gen_ai.response.id": "chatcmpl-VSPygqKTWdrhaFErNvMV18Yl",
    "gen_ai.response.model": "gpt-4-0613",
    "gen_ai.usage.output_tokens": 52,
    "gen_ai.usage.input_tokens": 97,
    "gen_ai.response.finish_reasons": ["stop"],
    "gen_ai.input.messages": "[{\"role\":\"user\",\"parts\":[{\"type\":\"text\",\"content\":\"Weather in Paris?\"}]},{\"role\":\"assistant\",\"parts\":[{\"type\":\"tool_call\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"name\":\"get_weather\",\"arguments\":{\"location\": \"Paris\"}}]},{\"role\":\"tool\",\"parts\":[{\"type\":\"tool_call_response\",\"id\":\"call_VSPygqKTWdrhaFErNvMV18Yl\",\"response\":\"rainy, 57°F\"}]}]",
    "gen_ai.output.messages": "[{\"role\":\"assistant\",\"parts\":[{\"type\":\"text\",\"content\":\"The weather in Paris is currently rainy with a temperature of 57°F.\"}],\"finish_reason\":\"stop\"}]"
  },
  "traceId": "0b46a347592ac487ed092ebe802c6818",
  "spanId": "0a706a178bd746c5"
}

Envío del historial de conversaciones a SLS

Cuando el historial de conversaciones se registra en archivos locales, puede usar LoongCollector para recopilar y enviar los registros a Log Service (SLS) para su procesamiento.

Paso 1: Instalar LoongCollector

Si LoongCollector ya está instalado en su entorno, puede omitir este paso.

Tipo de entorno

Referencia

Linux

Install Collector

Windows

Install Collector

Kubernetes

Install and Configure

Paso 2: Crear la configuración de recolección

  1. Inicie sesión en la consola de Log Service. Haga clic en el Project deseado, expanda el Logstore donde desea almacenar los registros y luego haga clic en el icono image junto a Data Import. En la sección JSON - Text Log, haga clic en Connect Now.

  2. Seleccione un machine group existente o cree uno para el host donde se almacenan los registros.

    En Scenario, seleccione Host Scenario. En Installation Environment, seleccione ECS. En la lista Applied Machine Group, confirme que se haya agregado el grupo de máquinas deseado (por ejemplo, genai).

  3. Cree una configuración de recolección. En Input Configuration, reemplace File Path con la ruta real de su directorio de registros. Para obtener la ruta del directorio, consulte la salida estándar de su aplicación durante el inicio. En Processing Configuration, seleccione el análisis JSON estándar.

    Por ejemplo, establezca Configuration Name como playground-test-config, seleccione Text Log Collection para Input Type, use un formato de ruta de archivo como /home/admin/logs/.apsara-apm/java/**/logs/genai_messages_*.log y configure Maximum Directory Monitoring Depth en 1.

    xxx
    Picked up /home/admin/logs/.apsara-apm/java/4.6.0_4e280e61/ as Agent Workspace.
    Unable to locate the -XX:ErrorFile parameter in the JVM options.
    If you are using Kubernetes, we recommend updating ack-onepilot to version 3.2.3 or later.
    For other environments, please consider adding the following parameters manually:
    -XX:ErrorFile=/{JavaAgentDirectory}/hs_err_pid%p.log
    -XX:OnError=/{JavaAgentDirectory}/crash_log_collector.sh
    These settings will enable automatic crash log collection to ARMS, helping us monitor
     incidents and provide timely feedback.
    Please note that this reminder does not affect the functionality of ARMS.
    If you prefer not to make these changes, feel free to disregard this message.
    Apsara Java Agent start cost: 5071 ms
  4. Para habilitar la recuperación y el análisis de datos, configure los índices de la siguiente manera: Habilite Full-Text Index, pero deshabilite Case Sensitive e Include Chinese Characters. En Query on Specified Fields, agregue índices para los siguientes campos: attributes (tipo: json; habilite Case Sensitive e Include Chinese Characters), resource (tipo: json; habilite Case Sensitive e Include Chinese Characters), spanId (tipo: text; deshabilite Case Sensitive e Include Chinese Characters) y traceId (tipo: text; deshabilite Case Sensitive e Include Chinese Characters).

Nota

Para obtener más información sobre la recolección de registros, consulte Continuously collect text logs from hosts.

Paso 3: Consultar los registros recopilados en SLS

Después de completar la configuración inicial, los registros aparecen en Log Service (SLS) en unos minutos:

▼ attributes: {}
    event.name: "gen_ai.client.inference.operation.details"
    gen_ai.input.messages: "[{"role":"system","parts":[{"type":"text","content":"	
xxx
xxx
xxx
:
xxx
                              xxx"}]},{"role":"user","parts":[{"type":"text","content":"xxx"}]}]"
    gen_ai.operation.name: "invoke_agent"
    gen_ai.output.messages: "[{"role":"assistant","parts":[{"type":"text","content":"
xxx
                                    "}],"finishReason":"stop"}]"
    gen_ai.provider.name: "spring-ai"
    gen_ai.request.model: "qwen-max"
    gen_ai.request.temperature: 0.8
  ► gen_ai.response.finish_reasons: []
    gen_ai.response.id: "0d98f.xxx"
    gen_ai.tool.definitions: "[{"type":"function","name":"getBookingDetails"},{"type":"function","name":"cancelBooking"},{"type":"function","name":"changeBooking"}]"
    gen_ai.usage.input_tokens: 1300
    gen_ai.usage.output_tokens: 59
body:
▼ resource: {}
  ► attributes: {}

Ajuste del límite de longitud de mensajes

El sondeo trunca el contenido de los mensajes que supera el límite predeterminado de 8192 caracteres por mensaje. Los mensajes truncados se marcan con el identificador ...[truncated], como se muestra a continuación:

[
  {
    "role": "assistant",
    "parts": [
      {
        "type": "text",
        "content": "The weather in Paris...[truncated]"
      }
    ],
    "finish_reason": "stop"
  }
]

Configuración

  • Configure el límite mediante la siguiente variable de entorno:

    Variable de entorno

    Valor

    OTEL_INSTRUMENTATION_GENAI_MESSAGE_CONTENT_MAX_LENGTH

    8192

  • Para aplicaciones Java, también puede agregar una propiedad del sistema al comando de inicio. Por ejemplo:

    -Dotel.instrumentation.genai.message-content.max-length=8192

Cuerpos de mensaje sujetos a truncamiento

Tipo de historial de conversaciones

Mensaje

gen_ai.input.messages

TextPart.content

gen_ai.output.messages

TextPart.content

gen_ai.system_instructions

TextPart.content