View a markdown version of this page

Agentes de OpenAI - Base amazónica AgentCore

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Agentes de OpenAI

Esta página explica cómo instrumentar un agente de OpenAI Agents, cómo se identifican los intervalos y cómo se extraen los campos de evaluación. AgentCore Evaluations es compatible con los agentes de OpenAI creados en Python y, en esta página TypeScript, se trata de cada idioma por separado, tanto en el soporte de agentes como en el soporte de agentes de Python. TypeScript

Temas

Soporte de agentes de Python

Un agente de Python OpenAI Agents emite intervalos con el nombre de ámbito opentelemetry.instrumentation.openai_agents (OpenTelemetry) o openinference.instrumentation.openai_agents (). OpenInference

Instrumente a su agente

Puede instrumentar un agente de OpenAI Agents con cualquiera de las dos bibliotecas de instrumentación: OpenTelemetry (opentelemetry-instrumentation-openai-agents) o OpenInference (openinference-instrumentation-openai-agents). Amazon Bedrock AgentCore Evaluations es compatible con ambas bibliotecas. Las bibliotecas emiten distintos nombres de ámbito y utilizan distintos atributos de intervalo. El servicio de evaluación extrae los mismos valores de cada uno.

Cuando su agente se ejecuta con la AWS distribución para OpenTelemetry (ADOT), como en Amazon Bedrock AgentCore Runtime, no es necesario añadir código de instrumentación explícito. Basta con añadir la biblioteca de instrumentación a las dependencias de su proyecto. ADOT la descubre al inicio y la activa automáticamente.

Agregue la biblioteca de instrumentación para la ruta que desee a sus dependencias. Usa la última versión disponible a menos que tengas un motivo para anclar.

ejemplo
OpenTelemetry

NOTA: Usa la versión 0.61.0 o posterior. Esta es la primera versión probada con el servicio de evaluación.

Añada opentelemetry-instrumentation-openai-agents a sus dependencias. El nombre del ámbito emitido esopentelemetry.instrumentation.openai_agents.

requirements.txt:

opentelemetry-instrumentation-openai-agents>=0.61.0

pyproject.toml:

[project] dependencies = [ "opentelemetry-instrumentation-openai-agents>=0.61.0", ]
OpenInference

NOTA: Utilice la versión 1.5.0 o posterior. Esta es la primera versión probada con el servicio de evaluación.

Añada openinference-instrumentation-openai-agents a sus dependencias. El nombre del ámbito emitido esopeninference.instrumentation.openai_agents.

requirements.txt:

openinference-instrumentation-openai-agents>=1.5.0

pyproject.toml:

[project] dependencies = [ "openinference-instrumentation-openai-agents>=1.5.0", ]
nota

La instrumentación es un paso para configurar la observabilidad. Para exportar la telemetría para su evaluación, complete la configuración completa en Configurar la observabilidad.

Cómo se identifican los intervalos

El atributo utilizado para clasificar los intervalos difiere entre las dos bibliotecas de instrumentación.

ejemplo
OpenTelemetry

La biblioteca de OpenTelemetry instrumentación clasifica los intervalos mediante el atributo. gen_ai.operation.name

Tipo de intervalo Atributo identificativo

Invocar al agente

gen_ai.operation.name = invoke_agent

Ejecute la herramienta

gen_ai.operation.name = execute_tool

Inferencia

gen_ai.operation.name = chat

nota

Los agentes de OpenAI también emiten intervalos de límite de giro internos con =. gen_ai.operation.name unknown El servicio de evaluación los omite.

OpenInference

La biblioteca de OpenInference instrumentación clasifica los intervalos mediante el atributo. openinference.span.kind

Tipo de intervalo Atributo identificativo

Invocar al agente

openinference.span.kind= AGENT o CHAIN

Ejecutar herramienta

openinference.span.kind = TOOL

Inferencia

openinference.span.kind = LLM

nota

En la OpenInference biblioteca, CHAIN los espacios AGENT y son contenedores estructurales vacíos: no contienen contenido de conversación. La solicitud del usuario y la respuesta del agente se reconstruyen a partir de los intervalos de inferencia (LLM) de la misma traza.

Cómo se extraen los campos de evaluación

OpenAI Agents serializa los mensajes en un formato basado en partes, en el que cada mensaje contiene una parts serie de bloques de contenido escritos (por ejemplo,). [{"role": "user", "parts": [{"type": "text", "content": "…​"}]}] Con la OpenTelemetry biblioteca, AgentCore Evaluations analiza el texto de estas partes. Con la OpenInference biblioteca, la salida del modelo es el objeto de respuesta completo de OpenAI, y AgentCore Evaluations lee el texto de la respuesta. output[].content[].text

La ubicación de este contenido depende de cómo se recopiló la telemetría. El atributo identificativo (gen_ai.operation.nameoopeninference.span.kind) está en el intervalo en ambos casos. Para obtener más información, consulte Configuración y entrega de telemetría.

De los registros de eventos

Con la telemetría dividida, AgentCore Evaluations lee el contenido de la conversación del registro de eventos en relación con cada período. La ubicación de las entradas y salidas de las herramientas difiere entre las dos bibliotecas:

  • OpenTelemetry:

    • Mensaje del usuario y respuesta del agente: desde el registro de eventos del intervalo de agentes que invoca, en body.input ybody.output.

    • Llamada a la herramienta: el nombre de la herramienta degen_ai.tool.name, los argumentos y el resultado de gen_ai.tool.call.arguments y gen_ai.tool.call.result sobre el conjunto de herramientas de ejecución. Con la OpenTelemetry biblioteca, los argumentos y los resultados de la herramienta permanecen en los atributos del conjunto incluso con la telemetría dividida.

  • OpenInference:

    • Mensaje del usuario y respuesta del agente: se reconstruyeron a partir del registro de eventos del intervalo de inferencia. AgentCore Las evaluaciones leen los mensajes body.input ybody.output, a continuación, rellenan el intervalo vacío del agente de invocación con la solicitud del usuario y la respuesta del agente.

    • Llamada a la herramienta: el nombre de la herramienta que aparece tool.name en el intervalo de herramientas de ejecución. Los argumentos y el resultado de la herramienta provienen del registro de eventos de ese intervalo, en body.input ybody.output.

Para obtener más información, consulte el ejemplo de intervalos en telemetría dividida.

A partir de los atributos de intervalo

Con la telemetría unificada, el mismo contenido permanece en el intervalo que los atributos. Los atributos dependen de la biblioteca de instrumentación:

  • OpenTelemetry:

    • Mensaje del usuario y respuesta del agente: desde gen_ai.input.messages y después del gen_ai.output.messages intervalo del agente que invoca.

    • Llamada a la herramienta: el nombre de la herramienta desdegen_ai.tool.name, los argumentos y el resultado de gen_ai.tool.call.arguments ygen_ai.tool.call.result, en el intervalo de la herramienta de ejecución.

  • OpenInference:

    • El mensaje del usuario y la respuesta del agente: a partir de los atributos del mensaje indexado en el intervalo de inferencia (llm.input_messages.*yllm.output_messages.*) y, a continuación, se rellenan en el intervalo vacío del agente de invocación.

    • Llamada a la herramienta: el nombre de la herramienta detool.name, y los argumentos y el resultado de input.value youtput.value, en el intervalo de la herramienta de ejecución.

Para obtener más información, consulte Ejemplos de intervalos en telemetría unificada.

Ejemplos de intervalos en telemetría dividida

Con la telemetría dividida, el intervalo contiene los atributos de identificación y el contenido se encuentra en un registro de eventos correlacionado. Los siguientes ejemplos provienen de un agente de planificación de viajes de Python OpenAI Agents implementado en Amazon Bedrock Runtime. AgentCore El mismo agente se muestra en cada biblioteca de instrumentación.

nota

Estos ejemplos no son conjuntos completos. Muestran datos representativos de una interacción real con un agente; se omiten algunos campos y se truncan los valores largos para facilitar la lectura.

OpenTelemetry

ejemplo
Invoke agent span

El gen_ai.operation.name atributo (invoke_agent) lo identifica como un intervalo de agentes de invocación.

{ "traceId": "6a01eef11066751d68f90def0da1f80a", "spanId": "3a300b0b3fe650e4", "name": "invoke_agent openaiOtelTravel", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": "openaiOtelTravel", "gen_ai.system": "openai", "gen_ai.provider.name": "openai", "gen_ai.request.model": "gpt-4o-mini-2024-07-18", "session.id": "sea-nyc-trip-2-turns-openai-otel" }, "status": { "code": "OK" } }

El registro de eventos correlacionados contiene la conversación. Cada mensaje content es la matriz de formato de piezas de OpenAI; la línea de comandos del usuario es el texto del mensaje del usuario y la respuesta del agente es el texto del mensaje del asistente.

{ "spanId": "3a300b0b3fe650e4", "traceId": "6a01eef11066751d68f90def0da1f80a", "scope": { "name": "opentelemetry.instrumentation.openai_agents" }, "body": { "input": { "messages": [ { "role": "user", "content": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]" } ] }, "output": { "messages": [ { "role": "assistant", "content": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]" } ] } } }
Execute tool span

El gen_ai.operation.name atributo (execute_tool) lo identifica como un intervalo de herramientas de ejecución; gen_ai.tool.name contiene el nombre de la herramienta. Con la OpenTelemetry biblioteca, los argumentos y el resultado de la herramienta permanecen en los atributos del conjunto incluso con la telemetría dividida.

{ "traceId": "6a01eefa5c52f3d86a35038f35f5ba30", "spanId": "3cbc4ea5f73fef81", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.type": "function", "gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}", "session.id": "sea-nyc-trip-2-turns-openai-otel" }, "status": { "code": "OK" } }
Inference span

El gen_ai.operation.name atributo (chat) lo identifica como un intervalo de inferencia. Este intervalo contiene los metadatos del modelo y, en élgen_ai.tool.definitions, la lista de herramientas disponibles para el agente. Los mensajes de conversación de la llamada modelo aparecen en el registro de eventos correlacionados, en body.input ybody.output.

{ "traceId": "6a01eef11066751d68f90def0da1f80a", "spanId": "7c1f9a2b4d6e8a03", "name": "openai.response", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "chat", "gen_ai.provider.name": "openai", "gen_ai.request.model": "gpt-4o-mini-2024-07-18", "gen_ai.response.model": "gpt-4o-mini-2024-07-18", "gen_ai.usage.input_tokens": 269, "gen_ai.usage.output_tokens": 78, "gen_ai.tool.definitions": "[{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", \"parameters\": { ... }}}]", "session.id": "sea-nyc-trip-2-turns-openai-otel" }, "status": { "code": "OK" } }
{ "spanId": "7c1f9a2b4d6e8a03", "traceId": "6a01eef11066751d68f90def0da1f80a", "scope": { "name": "opentelemetry.instrumentation.openai_agents" }, "body": { "input": { "messages": [ { "role": "user", "content": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]" } ] }, "output": { "messages": [ { "role": "assistant", "content": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]" } ] } } }

OpenInference

Con la OpenInference biblioteca, el intervalo invoke agent (AGENT) es un contenedor vacío. AgentCore Las evaluaciones reconstruyen la solicitud del usuario y la respuesta del agente a partir del intervalo inference (LLM), cuyo contenido se encuentra en un registro de eventos correlacionados.

ejemplo
Invoke agent span

El openinference.span.kind atributo (AGENT) lo identifica como un intervalo de agentes de invocación. El intervalo no incluye contenido de conversación.

{ "traceId": "6a387ee61078243c1cc455ed45c6c313", "spanId": "9a1c7dce81b692cd", "name": "openaiOInfTravel", "kind": "INTERNAL", "scope": { "name": "openinference.instrumentation.openai_agents", "version": "1.5.0" }, "attributes": { "openinference.span.kind": "AGENT", "graph.node.id": "openaiOInfTravel", "llm.system": "openai", "session.id": "sea-nyc-trip-2-turns-openai-oi" }, "status": { "code": "OK" } }
Execute tool span

El openinference.span.kind atributo (TOOL) lo identifica como un conjunto de herramientas de ejecución; tool.name contiene el nombre de la herramienta. Los argumentos y el resultado de la herramienta se encuentran en el registro de eventos correlacionados.

{ "traceId": "6a387ef07b8f4f3732fab45d3c0b51ff", "spanId": "b4e78cb0a06a6fe2", "name": "search_flights", "kind": "INTERNAL", "scope": { "name": "openinference.instrumentation.openai_agents", "version": "1.5.0" }, "attributes": { "openinference.span.kind": "TOOL", "tool.name": "search_flights", "input.mime_type": "application/json", "output.mime_type": "application/json", "session.id": "sea-nyc-trip-2-turns-openai-oi" }, "status": { "code": "OK" } }
{ "spanId": "b4e78cb0a06a6fe2", "traceId": "6a387ef07b8f4f3732fab45d3c0b51ff", "scope": { "name": "openinference.instrumentation.openai_agents" }, "body": { "input": { "messages": [ { "role": "user", "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}" } ] }, "output": { "messages": [ { "role": "assistant", "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}" } ] } } }
Inference span

El openinference.span.kind atributo (LLM) lo identifica como un intervalo de inferencia. Las funciones de los mensajes y las definiciones de las herramientas se encuentran en los atributos del intervalo; el contenido del mensaje se encuentra en el registro de eventos correlacionados. ADOT aplana los roles de entrada para user que AgentCore Evaluations utilice el último mensaje de texto sin formato como mensaje de usuario. El mensaje de salida es el objeto de respuesta de OpenAI, desde el que AgentCore Evaluations lee el texto de la respuesta.

{ "traceId": "6a387ee61078243c1cc455ed45c6c313", "spanId": "1221a062c7f90a8e", "name": "response", "kind": "INTERNAL", "scope": { "name": "openinference.instrumentation.openai_agents", "version": "1.5.0" }, "attributes": { "openinference.span.kind": "LLM", "llm.model_name": "gpt-4o-mini-2024-07-18", "llm.input_messages.0.message.role": "system", "llm.input_messages.1.message.role": "user", "llm.output_messages.0.message.role": "assistant", "llm.tools.0.tool.json_schema": "{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", ...}}", "session.id": "sea-nyc-trip-2-turns-openai-oi" }, "status": { "code": "OK" } }
{ "spanId": "1221a062c7f90a8e", "traceId": "6a387ee61078243c1cc455ed45c6c313", "scope": { "name": "openinference.instrumentation.openai_agents" }, "body": { "input": { "messages": [ { "role": "user", "content": "[{\"content\": \"Hey, how can you help me\", \"role\": \"user\"}]" }, { "role": "user", "content": "You are a travel planning assistant. Help users plan trips ..." }, { "role": "user", "content": "Hey, how can you help me" } ] }, "output": { "messages": [ { "role": "assistant", "content": "{\"id\": \"resp_abc123...\", \"output\": [{\"type\": \"message\", \"content\": [{\"type\": \"output_text\", \"text\": \"I can assist you with planning your trips ...\"}]}]}" } ] } } }

El ejemplo abarca la telemetría unificada

Con la telemetría unificada, el mismo contenido permanece en los atributos del intervalo y no se produce ningún registro de eventos independiente. Los siguientes ejemplos provienen de un agente de planificación de viajes de Python OpenAI Agents. El mismo agente se muestra en cada biblioteca de instrumentación.

nota

Estos ejemplos no son conjuntos completos. Muestran datos representativos de una interacción real con un agente; se omiten algunos campos y se truncan los valores largos para facilitar la lectura.

OpenTelemetry

ejemplo
Invoke agent span

El gen_ai.input.messages atributo contiene la solicitud del usuario y la respuesta del gen_ai.output.messages agente. Ambas son matrices en formato de piezas de OpenAI.

{ "traceId": "6a4de7b85e61747e6b568a1f4768e89d", "spanId": "50656fd77904d125", "name": "invoke_agent openaiOtelTravel", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": "openaiOtelTravel", "gen_ai.system": "openai", "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]", "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]", "session.id": "sea-nyc-trip-2-turns-unified" }, "status": { "code": "OK" } }
Execute tool span

El gen_ai.tool.call.arguments atributo contiene los argumentos de la herramienta y el gen_ai.tool.call.result atributo contiene el resultado de la herramienta.

{ "traceId": "6a4de7c376913db82e6f0f336a16731d", "spanId": "8840e8e23724ebd7", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}", "session.id": "sea-nyc-trip-2-turns-unified" }, "status": { "code": "OK" } }
Inference span

El gen_ai.operation.name atributo (chat) lo identifica como un intervalo de inferencia. Los metadatos del modelo y el gen_ai.tool.definitions atributo (la lista de herramientas disponibles para el agente) permanecen alineados en el intervalo.

{ "traceId": "6a4de7b85e61747e6b568a1f4768e89d", "spanId": "9b2c1e5f7a3d0846", "name": "openai.response", "kind": "INTERNAL", "scope": { "name": "opentelemetry.instrumentation.openai_agents", "version": "0.62.1" }, "attributes": { "gen_ai.operation.name": "chat", "gen_ai.provider.name": "openai", "gen_ai.request.model": "gpt-4o-mini-2024-07-18", "gen_ai.response.model": "gpt-4o-mini-2024-07-18", "gen_ai.usage.input_tokens": 269, "gen_ai.usage.output_tokens": 78, "gen_ai.tool.definitions": "[{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", \"parameters\": { ... }}}]", "session.id": "sea-nyc-trip-2-turns-unified" }, "status": { "code": "OK" } }

OpenInference

ejemplo
Execute tool span

El input.value atributo contiene los argumentos de la herramienta y el output.value atributo contiene el resultado de la herramienta.

{ "traceId": "6a387ef07b8f4f3732fab45d3c0b51ff", "spanId": "d5a1c9e70b46f312", "name": "search_flights", "kind": "INTERNAL", "scope": { "name": "openinference.instrumentation.openai_agents", "version": "1.5.1" }, "attributes": { "openinference.span.kind": "TOOL", "tool.name": "search_flights", "input.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "output.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}", "session.id": "sea-nyc-trip-2-turns-oi" }, "status": { "code": "OK" } }
Inference span

El contenido del mensaje está en línea en los atributos indexados. Los llm.input_messages.* atributos contienen la solicitud del sistema y la solicitud del usuario, y los llm.output_messages.* atributos contienen la respuesta del agente. AgentCore Las evaluaciones reconstruyen la solicitud del usuario y la respuesta del agente a partir de este intervalo y rellenan el intervalo vacío de invoke agent (). AGENT

{ "traceId": "6a387ee61078243c1cc455ed45c6c313", "spanId": "c9f0a2b41d773e88", "name": "response", "kind": "INTERNAL", "scope": { "name": "openinference.instrumentation.openai_agents", "version": "1.5.1" }, "attributes": { "openinference.span.kind": "LLM", "llm.model_name": "gpt-4o-mini-2024-07-18", "llm.input_messages.0.message.role": "system", "llm.input_messages.0.message.content": "You are a travel planning assistant ...", "llm.input_messages.1.message.role": "user", "llm.input_messages.1.message.content": "Hey, how can you help me", "llm.output_messages.0.message.role": "assistant", "llm.output_messages.0.message.contents.0.message_content.text": "I can assist you with planning your trips ...", "session.id": "sea-nyc-trip-2-turns-oi" }, "status": { "code": "OK" } }

TypeScript soporte de agentes

Un agente de TypeScript OpenAI Agents emite los mismos tipos de segmentos, atributos de identificación y diseño de contenido que un agente de Python, por lo que el servicio de evaluación lo lee de la misma manera. Hay dos bibliotecas de TypeScript instrumentación, cada una con su propio nombre de ámbito.

Instrumente a su agente

Agregue a sus TypeScript dependencias la biblioteca de instrumentación de la convención que desee. Usa la última versión disponible a menos que tengas un motivo para anclar.

ejemplo
ADOT (OpenTelemetry)

Para TypeScript los agentes de ADOT, añada el paquete de autoinstrumentación AWS Distro Node (@aws/aws-distro-opentelemetry-node-autoinstrumentation) a sus dependencias. Incluye la instrumentación integrada de OpenAI Agents, que se activa al inicio y emite el nombre del ámbito. @aws/aws-distro-opentelemetry-instrumentation-openai-agents

package.json:

{ "dependencies": { "@aws/aws-distro-opentelemetry-node-autoinstrumentation": "^0.12.0" } }
OpenInference

Añada @arizeai/openinference-instrumentation-openai-agents a sus dependencias. El nombre del ámbito emitido es. @arizeai/openinference-instrumentation-openai-agents

package.json:

{ "dependencies": { "@arizeai/openinference-instrumentation-openai-agents": "^0.2.2" } }
nota

La instrumentación es un paso para configurar la observabilidad. Para exportar la telemetría para su evaluación, complete la configuración completa en Configurar la observabilidad.

Cómo se identifican los intervalos

La identificación del intervalo es la misma que la de un agente de Python. La ADOT-native OpenTelemetry biblioteca (del paquete de autoinstrumentación AWS Distro Node@aws/aws-distro-opentelemetry-node-autoinstrumentation, que emite el nombre del ámbito@aws/aws-distro-opentelemetry-instrumentation-openai-agents) se establece gen_ai.operation.name y la biblioteca OpenInference JS () se establece. @arizeai/openinference-instrumentation-openai-agents openinference.span.kind Para ver los valores, consulte Cómo se identifican los intervalos en la sección Compatibilidad con agentes de Python. Soporte de agentes de Python

Cómo se extraen los campos de evaluación

La extracción de campos lee los mismos atributos que para un agente de Python. Tenga en cuenta que en la ADOT-native TypeScript biblioteca, el intervalo del agente de invocación es un contenedor estructural: la solicitud del usuario y la respuesta del agente se reconstruyen a partir del intervalo de inference (chat) en lugar del intervalo del agente de invocación, a diferencia de la OpenTelemetry biblioteca de Python, que los mantiene en el intervalo del agente de invocación. Para saber desde dónde se lee cada campo, consulta Cómo se extraen los campos de evaluación en la versión compatible con el agente de Python. Soporte de agentes de Python

Ejemplos de intervalos de un agente TypeScript

Los siguientes ejemplos provienen de un agente de planificación de viajes de TypeScript OpenAI Agents implementado en Amazon Bedrock AgentCore Runtime con telemetría unificada. El mismo agente se muestra en cada biblioteca de instrumentación.

nota

Estos ejemplos no son conjuntos completos. Muestran datos representativos de una interacción real con un agente; se omiten algunos campos y se truncan los valores largos para facilitar la lectura.

OpenTelemetry

En la ADOT-native biblioteca (del paquete de autoinstrumentación de AWS Distro Node, donde se emite el nombre del ámbito@aws/aws-distro-opentelemetry-instrumentation-openai-agents)@aws/aws-distro-opentelemetry-node-autoinstrumentation, el intervalo del agente invocador es un contenedor estructural y el contenido de la conversación se encuentra en el intervalo inference (), en el formato de las partes y los atributos. chat gen_ai.input.messages gen_ai.output.messages AgentCore Las evaluaciones reconstruyen la solicitud del usuario y la respuesta del agente a partir del intervalo de inferencia.

ejemplo
Invoke agent span

El gen_ai.operation.name atributo (invoke_agent) lo identifica como un intervalo de agentes de invocación. El intervalo contiene el nombre del agente y la lista de herramientas, pero no el contenido de la conversación.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "9a1c7dce81b692cd", "name": "invoke_agent openaiAdotTS", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents", "version": "0.12.0" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": "openaiAdotTS", "gen_ai.provider.name": "openai", "open_ai.agent.tools": "[\"search_flights\", \"book_flight\", \"search_hotels\", \"book_hotel\", \"search_activities\", \"book_activity\"]", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }
Execute tool span

El gen_ai.operation.name atributo (execute_tool) lo identifica como un conjunto de herramientas de ejecución; gen_ai.tool.name contiene el nombre de la herramienta. Los gen_ai.tool.call.result atributos gen_ai.tool.call.arguments y contienen los argumentos y el resultado de la herramienta.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "3cbc4ea5f73fef81", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents", "version": "0.12.0" }, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.type": "function", "gen_ai.tool.call.arguments": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "gen_ai.tool.call.result": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }
Inference span

El gen_ai.operation.name atributo (chat) lo identifica como un intervalo de inferencia. Los gen_ai.output.messages atributos gen_ai.input.messages y mantienen la conversación en formato de partes, gen_ai.system_instructions contienen el indicador del sistema y gen_ai.tool.definitions muestran las herramientas disponibles para el agente.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "7c1f9a2b4d6e8a03", "name": "chat gpt-4o-mini-2024-07-18", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-openai-agents", "version": "0.12.0" }, "attributes": { "gen_ai.operation.name": "chat", "gen_ai.provider.name": "openai", "gen_ai.response.model": "gpt-4o-mini-2024-07-18", "gen_ai.input.messages": "[{\"role\": \"user\", \"parts\": [{\"type\": \"text\", \"content\": \"Hey, how can you help me\"}]}]", "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"I can assist you with planning your trips ...\"}]}]", "gen_ai.system_instructions": "[{\"type\": \"text\", \"content\": \"You are a travel planning assistant ...\"}]", "gen_ai.tool.definitions": "[{\"type\": \"function\", \"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", ...}]", "gen_ai.usage.input_tokens": 422, "gen_ai.usage.output_tokens": 82, "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }

OpenInference

En la biblioteca OpenInference JS, los intervalos invoke agent (AGENT) y turn (CHAIN) son contenedores vacíos. AgentCore Las evaluaciones reconstruyen la solicitud del usuario y la respuesta del agente a partir del intervalo inference (LLM), cuyos mensajes se encuentran en el índice y los atributos. llm.input_messages.* llm.output_messages.*

ejemplo
Invoke agent span

El openinference.span.kind atributo (AGENT) lo identifica como un intervalo de agentes de invocación. El intervalo no incluye contenido de conversación.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "9a1c7dce81b692cd", "name": "openaiAgentsOInf", "kind": "INTERNAL", "scope": { "name": "@arizeai/openinference-instrumentation-openai-agents", "version": "0.2.2" }, "attributes": { "openinference.span.kind": "AGENT", "graph.node.id": "openaiAgentsOInf", "llm.system": "openai", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }
Execute tool span

El openinference.span.kind atributo (TOOL) lo identifica como un conjunto de herramientas de ejecución; tool.name contiene el nombre de la herramienta. Los output.value atributos input.value y contienen los argumentos y el resultado de la herramienta.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "b4e78cb0a06a6fe2", "name": "search_flights", "kind": "INTERNAL", "scope": { "name": "@arizeai/openinference-instrumentation-openai-agents", "version": "0.2.2" }, "attributes": { "openinference.span.kind": "TOOL", "tool.name": "search_flights", "input.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "output.value": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"flights\": [ ... ]}", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }
Inference span

El openinference.span.kind atributo (LLM) lo identifica como un intervalo de inferencia. Los llm.input_messages.* atributos contienen la solicitud del sistema y la solicitud del usuario, los llm.output_messages.* atributos contienen la respuesta del agente y los llm.tools.*.tool.json_schema atributos contienen las definiciones de la herramienta. AgentCore Las evaluaciones reconstruyen la solicitud del usuario y la respuesta del agente a partir de este intervalo y rellenan el intervalo vacío de invoke agent (). AGENT

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "1221a062c7f90a8e", "name": "response", "kind": "INTERNAL", "scope": { "name": "@arizeai/openinference-instrumentation-openai-agents", "version": "0.2.2" }, "attributes": { "openinference.span.kind": "LLM", "llm.model_name": "gpt-4o-mini-2024-07-18", "llm.input_messages.0.message.role": "system", "llm.input_messages.0.message.content": "You are a travel planning assistant ...", "llm.input_messages.1.message.role": "user", "llm.input_messages.1.message.content": "Hey, how can you help me", "llm.output_messages.0.message.role": "assistant", "llm.output_messages.0.message.contents.0.message_content.text": "I can assist you with travel planning by ...", "llm.tools.0.tool.json_schema": "{\"type\": \"function\", \"function\": {\"name\": \"search_flights\", ...}}", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }