As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Agentes OpenAI
Esta página explica como instrumentar um agente do OpenAI Agents, como os intervalos são identificados e como os campos de avaliação são extraídos. AgentCore As avaliações oferecem suporte aos agentes OpenAI criados em Python e TypeScript; esta página aborda cada idioma separadamente, em suporte a agentes e suporte a agentes em Python. TypeScript
Tópicos
Suporte a agentes Python
Um agente Python OpenAI Agents emite spans sob o nome do escopo () ou opentelemetry.instrumentation.openai_agents (OpenTelemetry). openinference.instrumentation.openai_agents OpenInference
Instrumente seu agente
Você pode instrumentar um agente do OpenAI Agents com uma das duas bibliotecas de instrumentação: OpenTelemetry (opentelemetry-instrumentation-openai-agents) ou OpenInference (). openinference-instrumentation-openai-agents O Amazon Bedrock AgentCore Evaluations oferece suporte às duas bibliotecas. As bibliotecas emitem nomes de escopo diferentes e usam atributos de extensão diferentes. O serviço de avaliação extrai os mesmos valores de cada um.
Quando seu agente executa com o AWS Distro for OpenTelemetry (ADOT), como no Amazon Bedrock AgentCore Runtime, você não precisa adicionar código de instrumentação explícito. Adicionar a biblioteca de instrumentação às dependências do seu projeto é suficiente. O ADOT o descobre na inicialização e o ativa automaticamente.
Adicione a biblioteca de instrumentação para o caminho que você deseja para suas dependências. Use a versão mais recente disponível, a menos que você tenha um motivo para fixar.
exemplo
- OpenTelemetry
-
NOTA: Use a versão 0.61.0 ou posterior. Essa é a versão mais antiga testada com o serviço de avaliação.
Adicione opentelemetry-instrumentation-openai-agents às suas dependências. O nome do escopo emitido éopentelemetry.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: Use a versão 1.5.0 ou posterior. Essa é a versão mais antiga testada com o serviço de avaliação.
Adicione openinference-instrumentation-openai-agents às suas dependências. O nome do escopo emitido éopeninference.instrumentation.openai_agents.
requirements.txt:
openinference-instrumentation-openai-agents>=1.5.0
pyproject.toml:
[project]
dependencies = [
"openinference-instrumentation-openai-agents>=1.5.0",
]
A instrumentação é uma etapa na configuração da observabilidade. Para exportar a telemetria para avaliação, conclua a configuração completa em Configurar observabilidade.
Como os intervalos são identificados
O atributo usado para classificar extensões difere entre as duas bibliotecas de instrumentação.
exemplo
- OpenTelemetry
-
A biblioteca de OpenTelemetry instrumentação classifica as extensões usando o atributo. gen_ai.operation.name
| Tipo de extensão |
Atributo de identificação |
|
Invoque o agente
|
gen_ai.operation.name = invoke_agent
|
|
Ferramenta de execução
|
gen_ai.operation.name = execute_tool
|
|
Inferência
|
gen_ai.operation.name = chat
|
O OpenAI Agents também emite extensões internas de limite de turno com =. gen_ai.operation.name unknown O serviço de avaliação os ignora.
- OpenInference
-
A biblioteca de OpenInference instrumentação classifica as extensões usando o atributo. openinference.span.kind
| Tipo de extensão |
Atributo de identificação |
|
Invoque o agente
|
openinference.span.kind= AGENT ou CHAIN
|
|
Ferramenta de execução
|
openinference.span.kind = TOOL
|
|
Inferência
|
openinference.span.kind = LLM
|
Com a OpenInference biblioteca, CHAIN os espaços AGENT e são recipientes estruturais vazios: eles não contêm conteúdo de conversação. O prompt do usuário e a resposta do agente são reconstruídos a partir dos intervalos de inferência (LLM) no mesmo rastreamento.
O OpenAI Agents serializa as mensagens em um formato baseado em partes, no qual cada mensagem carrega uma parts variedade de blocos de conteúdo digitado (por exemplo,). [{"role": "user", "parts": [{"type": "text", "content": "…"}]}] Com a OpenTelemetry biblioteca, o AgentCore Evaluations analisa o texto dessas partes. Com a OpenInference biblioteca, a saída do modelo é o objeto OpenAI Response completo, e o AgentCore Evaluations lê o texto da resposta. output[].content[].text
A localização desse conteúdo depende de como a telemetria foi coletada. O atributo de identificação (gen_ai.operation.nameouopeninference.span.kind) está no intervalo em ambos os casos. Para obter mais informações, consulte Configuração e entrega de telemetria.
Com a telemetria dividida, o AgentCore Evaluations lê o conteúdo da conversa a partir do registro do evento correlacionado a cada período. A localização das entradas e saídas da ferramenta difere entre as duas bibliotecas:
-
OpenTelemetry:
-
Solicitação do usuário e resposta do agente: do registro de eventos do invocar o agente span, em body.input e. body.output
-
Chamada de ferramenta: o nome da ferramentagen_ai.tool.name, os argumentos e o resultado de gen_ai.tool.call.arguments e gen_ai.tool.call.result na extensão da ferramenta de execução. Com a OpenTelemetry biblioteca, os argumentos e resultados da ferramenta permanecem nos atributos de amplitude, mesmo com a telemetria dividida.
-
OpenInference:
-
Solicitação do usuário e resposta do agente: reconstruída a partir do registro de eventos do intervalo de inferência. AgentCore O Evaluations lê as mensagens de body.input ebody.output, em seguida, preenche o espaço vazio do agente de invocação com a solicitação do usuário e a resposta do agente.
-
Chamada de ferramenta: o nome da ferramenta tool.name na extensão da ferramenta de execução. Os argumentos e resultados da ferramenta vêm do registro de eventos desse período, em body.input body.output e.
Para obter mais informações, consulte Exemplos de extensões em telemetria dividida.
Com a telemetria unificada, o mesmo conteúdo permanece no espaço como atributos. Os atributos dependem da biblioteca de instrumentação:
-
OpenTelemetry:
-
Solicitação do usuário e resposta do agente: de gen_ai.input.messages e gen_ai.output.messages para o intervalo do agente de invocação.
-
Chamada de ferramenta: o nome da ferramenta degen_ai.tool.name, os argumentos e o resultado de gen_ai.tool.call.arguments egen_ai.tool.call.result, no intervalo da ferramenta de execução.
-
OpenInference:
-
Solicitação do usuário e resposta do agente: a partir dos atributos da mensagem indexada no intervalo de inferência (llm.input_messages.*ellm.output_messages.*) e preenchidos no intervalo vazio do agente de invocação.
-
Chamada de ferramenta: o nome da ferramenta detool.name, os argumentos e o resultado de input.value eoutput.value, no intervalo da ferramenta de execução.
Para obter mais informações, consulte Exemplos de extensões em telemetria unificada.
Exemplos de extensões em telemetria dividida
Com a telemetria dividida, o intervalo carrega os atributos de identificação e o conteúdo fica em um registro de evento correlacionado. Os exemplos a seguir são de um agente de planejamento de viagens do Python OpenAI Agents implantado no Amazon Bedrock Runtime. AgentCore O mesmo agente é mostrado em cada biblioteca de instrumentação.
Esses exemplos não são extensões completas. Eles mostram dados representativos de uma interação real do agente, com alguns campos omitidos e valores longos truncados para facilitar a leitura.
OpenTelemetry
exemplo
- Invoke agent span
-
O gen_ai.operation.name atributo (invoke_agent) identifica isso como uma extensão do agente de invocação.
{
"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"
}
}
O registro do evento correlacionado acompanha a conversa. Cada mensagem content é a matriz em formato de peças do OpenAI; o prompt do usuário é o texto da mensagem do usuário e a resposta do agente é o texto da mensagem do assistente.
{
"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
-
O gen_ai.operation.name atributo (execute_tool) identifica isso como uma extensão da ferramenta de execução; gen_ai.tool.name contém o nome da ferramenta. Com a OpenTelemetry biblioteca, os argumentos e resultados da ferramenta permanecem nos atributos de amplitude, mesmo com a telemetria 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
-
O gen_ai.operation.name atributo (chat) identifica isso como um intervalo de inferência. Esse intervalo contém os metadados do modelo egen_ai.tool.definitions, na lista de ferramentas disponíveis para o agente. As mensagens de conversa da chamada modelo estão ativas no registro do evento correlacionado, em body.input e. body.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
Com a OpenInference biblioteca, o span invoke agent (AGENT) é um contêiner vazio. AgentCore As avaliações reconstroem a solicitação do usuário e a resposta do agente a partir do intervalo de inferência (LLM), cujo conteúdo está em um registro de evento correlacionado.
exemplo
- Invoke agent span
-
O openinference.span.kind atributo (AGENT) identifica isso como uma extensão do agente de invocação. O intervalo não contém conteúdo de conversa.
{
"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
-
O openinference.span.kind atributo (TOOL) identifica isso como uma extensão da ferramenta de execução; tool.name contém o nome da ferramenta. Os argumentos e resultados da ferramenta estão no registro do evento correlacionado.
{
"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
-
O openinference.span.kind atributo (LLM) identifica isso como um intervalo de inferência. As funções das mensagens e as definições das ferramentas estão nos atributos span; o conteúdo da mensagem está no registro do evento correlacionado. O ADOT nivela as funções de entrada parauser, portanto, o AgentCore Evaluations usa a última mensagem de entrada de texto simples como solicitação do usuário. A mensagem de saída é o objeto OpenAI Response, do qual AgentCore Evaluations lê o texto da resposta.
{
"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 ...\"}]}]}"
}
]
}
}
}
Exemplos de extensões em telemetria unificada
Com a telemetria unificada, o mesmo conteúdo permanece nos atributos de extensão e nenhum registro de evento separado é produzido. Os exemplos a seguir são de um agente de planejamento de viagens do Python OpenAI Agents. O mesmo agente é mostrado em cada biblioteca de instrumentação.
Esses exemplos não são extensões completas. Eles mostram dados representativos de uma interação real do agente, com alguns campos omitidos e valores longos truncados para facilitar a leitura.
OpenTelemetry
exemplo
- Invoke agent span
-
O gen_ai.input.messages atributo contém o prompt do usuário e o gen_ai.output.messages atributo contém a resposta do agente. Ambos são matrizes em formato de peças 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
-
O gen_ai.tool.call.arguments atributo contém os argumentos da ferramenta e o gen_ai.tool.call.result atributo contém o resultado da ferramenta.
{
"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
-
O gen_ai.operation.name atributo (chat) identifica isso como um intervalo de inferência. Os metadados do modelo e o gen_ai.tool.definitions atributo (a lista de ferramentas disponíveis para o agente) permanecem alinhados no período.
{
"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
exemplo
- Execute tool span
-
O input.value atributo contém os argumentos da ferramenta e o output.value atributo contém o resultado da ferramenta.
{
"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
-
O conteúdo da mensagem está embutido nos atributos indexados. Os llm.input_messages.* atributos mantêm o prompt do sistema e o prompt do usuário, e os llm.output_messages.* atributos mantêm a resposta do agente. AgentCore As avaliações reconstroem a solicitação do usuário e a resposta do agente a partir desse intervalo e preenchem o intervalo vazio do 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 suporte de agentes
Um agente TypeScript OpenAI Agents emite os mesmos tipos de abrangência, atributos de identificação e layout de conteúdo que um agente Python, portanto, o serviço de avaliação o lê da mesma forma. Há duas bibliotecas de TypeScript instrumentação, cada uma com seu próprio nome de escopo.
Instrumente seu agente
Adicione a biblioteca de instrumentação da convenção que você deseja às suas TypeScript dependências. Use a versão mais recente disponível, a menos que você tenha um motivo para fixar.
exemplo
- ADOT (OpenTelemetry)
-
Para TypeScript agentes no ADOT, adicione o pacote de autoinstrumentação do AWS Distro Node () @aws/aws-distro-opentelemetry-node-autoinstrumentation às suas dependências. Ele inclui a instrumentação integrada do OpenAI Agents, que é ativada na inicialização e emite o nome do escopo. @aws/aws-distro-opentelemetry-instrumentation-openai-agents
package.json:
{
"dependencies": {
"@aws/aws-distro-opentelemetry-node-autoinstrumentation": "^0.12.0"
}
}
- OpenInference
-
Adicione @arizeai/openinference-instrumentation-openai-agents às suas dependências. O nome do escopo emitido é@arizeai/openinference-instrumentation-openai-agents.
package.json:
{
"dependencies": {
"@arizeai/openinference-instrumentation-openai-agents": "^0.2.2"
}
}
A instrumentação é uma etapa na configuração da observabilidade. Para exportar a telemetria para avaliação, conclua a configuração completa em Configurar observabilidade.
Como os intervalos são identificados
A identificação do Span é a mesma de um agente Python. A ADOT-native OpenTelemetry biblioteca (do pacote de autoinstrumentação do AWS Distro Node@aws/aws-distro-opentelemetry-node-autoinstrumentation, emitindo o nome do escopo@aws/aws-distro-opentelemetry-instrumentation-openai-agents) define gen_ai.operation.name e a biblioteca OpenInference JS () define. @arizeai/openinference-instrumentation-openai-agents openinference.span.kind Para os valores, consulte Como os períodos são identificados no suporte do agente Python.
A extração de campo lê os mesmos atributos de um agente Python. Observe que, com a ADOT-native TypeScript biblioteca, o intervalo do agente de invocação é um contêiner estrutural: o prompt do usuário e a resposta do agente são reconstruídos a partir do intervalo de inferência (chat) em vez do intervalo do agente de invocação, ao contrário da OpenTelemetry biblioteca Python, que os mantém no intervalo do agente de invocação. Para saber de onde cada campo é lido, consulte Como os campos de avaliação são extraídos no suporte do agente Python.
Exemplos de períodos de um agente TypeScript
Os exemplos a seguir são de um agente de planejamento de viagens do TypeScript OpenAI Agents implantado no Amazon Bedrock Runtime com telemetria AgentCore unificada. O mesmo agente é mostrado em cada biblioteca de instrumentação.
Esses exemplos não são extensões completas. Eles mostram dados representativos de uma interação real do agente, com alguns campos omitidos e valores longos truncados para facilitar a leitura.
OpenTelemetry
Com a ADOT-native biblioteca (do pacote de autoinstrumentação do AWS Distro Node@aws/aws-distro-opentelemetry-node-autoinstrumentation, emitindo o nome do escopo@aws/aws-distro-opentelemetry-instrumentation-openai-agents), a extensão do agente invoke é um contêiner estrutural e o conteúdo da conversa reside na extensão inference (chat), no formato de partes e nos atributos. gen_ai.input.messages gen_ai.output.messages AgentCore As avaliações reconstroem a solicitação do usuário e a resposta do agente a partir do intervalo de inferência.
exemplo
- Invoke agent span
-
O gen_ai.operation.name atributo (invoke_agent) identifica isso como uma extensão do agente de invocação. O span contém o nome do agente e a lista de ferramentas, mas não contém o conteúdo da conversa.
{
"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
-
O gen_ai.operation.name atributo (execute_tool) identifica isso como uma extensão da ferramenta de execução; gen_ai.tool.name contém o nome da ferramenta. Os gen_ai.tool.call.result atributos gen_ai.tool.call.arguments e contêm os argumentos e o resultado da ferramenta.
{
"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
-
O gen_ai.operation.name atributo (chat) identifica isso como um intervalo de inferência. Os gen_ai.output.messages atributos gen_ai.input.messages e mantêm a conversa no formato de peças, gen_ai.system_instructions mantêm o prompt do sistema e gen_ai.tool.definitions listam as ferramentas disponíveis para o 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
Com a biblioteca OpenInference JS, os intervalos invoke agent (AGENT) e turn (CHAIN) são contêineres vazios. AgentCore As avaliações reconstroem o prompt do usuário e a resposta do agente a partir do intervalo de inferência (LLM), cujas mensagens estão no índice e nos atributos. llm.input_messages.* llm.output_messages.*
exemplo
- Invoke agent span
-
O openinference.span.kind atributo (AGENT) identifica isso como uma extensão do agente de invocação. O intervalo não contém conteúdo de conversa.
{
"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
-
O openinference.span.kind atributo (TOOL) identifica isso como uma extensão da ferramenta de execução; tool.name contém o nome da ferramenta. Os output.value atributos input.value e contêm os argumentos e o resultado da ferramenta.
{
"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
-
O openinference.span.kind atributo (LLM) identifica isso como um intervalo de inferência. Os llm.input_messages.* atributos mantêm a solicitação do sistema e a solicitação do usuário, os llm.output_messages.* atributos mantêm a resposta do agente e os llm.tools.*.tool.json_schema atributos mantêm as definições da ferramenta. AgentCore As avaliações reconstroem a solicitação do usuário e a resposta do agente a partir desse intervalo e preenchem o intervalo vazio do 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"
}
}