View a markdown version of this page

Agenti OpenAI - Fondamento Amazon AgentCore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Agenti OpenAI

Questa pagina spiega come strumentare un agente OpenAI Agents, come vengono identificati gli intervalli e come vengono estratti i campi di valutazione. AgentCore Evaluations supporta gli agenti OpenAI integrati in Python e TypeScript; questa pagina tratta ogni lingua separatamente, nel supporto agli agenti Python e nel supporto agli agenti. TypeScript

Argomenti

Supporto per agenti Python

Un agente Python OpenAI Agents emette intervalli con il nome dell'ambito () o opentelemetry.instrumentation.openai_agents ()OpenTelemetry. openinference.instrumentation.openai_agents OpenInference

Instrumenta il tuo agente

Puoi strumentare un agente OpenAI Agents con una delle due librerie di strumentazione: OpenTelemetry (opentelemetry-instrumentation-openai-agents) o OpenInference (). openinference-instrumentation-openai-agents Amazon Bedrock AgentCore Evaluations supporta entrambe le librerie. Le librerie emettono nomi di ambito diversi e utilizzano attributi span diversi. Il servizio di valutazione estrae gli stessi valori da ciascuno di essi.

Quando l'agente viene eseguito con AWS Distro for OpenTelemetry (ADOT), ad esempio su Amazon Bedrock AgentCore Runtime, non è necessario aggiungere codice di strumentazione esplicito. È sufficiente aggiungere la libreria di strumentazione alle dipendenze del progetto. ADOT la rileva all'avvio e la attiva automaticamente.

Aggiungi la libreria di strumentazione per il percorso che desideri alle tue dipendenze. Usa l'ultima versione disponibile a meno che tu non abbia un motivo per bloccarlo.

Esempio
OpenTelemetry

NOTA: usa la versione 0.61.0 o successiva. Questa è la prima versione testata con il servizio di valutazione.

opentelemetry-instrumentation-openai-agentsAggiungila alle tue dipendenze. Il nome dell'ambito emesso è. 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: Usa la versione 1.5.0 o successiva. Questa è la prima versione testata con il servizio di valutazione.

openinference-instrumentation-openai-agentsAggiungila alle tue dipendenze. Il nome dell'ambito emesso è. openinference.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 strumentazione è un passo verso l'impostazione dell'osservabilità. Per esportare la telemetria per la valutazione, completa la configurazione completa in Imposta l'osservabilità. Imposta l'osservabilità

Come vengono identificati gli intervalli

L'attributo utilizzato per classificare gli intervalli è diverso tra le due librerie di strumentazione.

Esempio
OpenTelemetry

La libreria di OpenTelemetry strumentazione classifica gli intervalli utilizzando l'attributo. gen_ai.operation.name

Tipo di intervallo Attributo identificativo

Invoca l'agente

gen_ai.operation.name = invoke_agent

Strumento di esecuzione

gen_ai.operation.name = execute_tool

Inferenza

gen_ai.operation.name = chat

Nota

OpenAI Agents emette anche intervalli di turn-boundary interni con =. gen_ai.operation.name unknown Il servizio di valutazione li salta.

OpenInference

La libreria di OpenInference strumentazione classifica gli intervalli utilizzando l'attributo. openinference.span.kind

Tipo di intervallo Attributo identificativo

Invoca l'agente

openinference.span.kind= AGENT o CHAIN

Strumento di esecuzione

openinference.span.kind = TOOL

Inferenza

openinference.span.kind = LLM

Nota

Con la OpenInference libreria, gli AGENT and CHAIN span sono contenitori strutturali vuoti: non contengono contenuti di conversazione. Il prompt dell'utente e la risposta dell'agente vengono ricostruiti a partire dagli intervalli di inference (LLM) presenti nella stessa traccia.

Come vengono estratti i campi di valutazione

OpenAI Agents serializza i messaggi in un formato basato su parti, in cui ogni messaggio contiene una parts serie di blocchi di contenuto digitati (ad esempio,). [{"role": "user", "parts": [{"type": "text", "content": "…​"}]}] Con la OpenTelemetry libreria, AgentCore Evaluations analizza il testo da queste parti. Con la OpenInference libreria, l'output del modello è l'oggetto OpenAI Response completo e da AgentCore Evaluations legge il testo della risposta. output[].content[].text

La posizione di questo contenuto dipende dal modo in cui è stata raccolta la telemetria. L'attributo identificativo (gen_ai.operation.nameoopeninference.span.kind) è indicato sullo span in entrambi i casi. Per ulteriori informazioni, vedere Configurazione e consegna della telemetria.

Dai registri degli eventi

Con la telemetria divisa, AgentCore Evaluations legge il contenuto della conversazione dal record dell'evento correlato a ciascun intervallo. La posizione degli input e degli output degli strumenti varia tra le due librerie:

  • OpenTelemetry:

    • Richiesta dell'utente e risposta dell'agente: dal record degli eventi di invoke agent span, in e. body.input body.output

    • Chiamata allo strumento: il nome dello strumento dagen_ai.tool.name, gli argomenti e il risultato da gen_ai.tool.call.arguments e gen_ai.tool.call.result sull'intervallo dello strumento di esecuzione. Con la OpenTelemetry libreria, gli argomenti e i risultati dello strumento rimangono negli attributi span anche con telemetria divisa.

  • OpenInference:

    • Richiesta dell'utente e risposta dell'agente: ricostruita a partire dal record degli eventi dell'intervallo di inferenza. AgentCore Evaluations legge i messaggi da body.input e body.output quindi riempie l'intervallo vuoto dell'invoke agent con il prompt dell'utente e la risposta dell'agente.

    • Chiamata allo strumento: il nome dello strumento in tool.name base all'intervallo dello strumento di esecuzione. Gli argomenti e i risultati dello strumento provengono dal record degli eventi di quell'intervallo, in body.input e. body.output

Per ulteriori informazioni, consulta Esempi di intervalli di telemetria divisa.

Dagli attributi span

Con la telemetria unificata, lo stesso contenuto rimane nello span come gli attributi. Gli attributi dipendono dalla libreria di strumentazione:

  • OpenTelemetry:

    • Richiesta dell'utente e risposta dell'agente: da gen_ai.input.messages e verso l'gen_ai.output.messagesintervallo dell'agente invoke.

    • Chiamata allo strumento: il nome dello strumento dagen_ai.tool.name, gli argomenti e il risultato da gen_ai.tool.call.arguments e nell'gen_ai.tool.call.resultintervallo di esecuzione dello strumento.

  • OpenInference:

    • Richiesta dell'utente e risposta dell'agente: dagli attributi del messaggio indicizzati sullo span di inferenza (llm.input_messages.*andllm.output_messages.*), quindi inseriti nuovamente nello span vuoto dell'invoke agent.

    • Chiamata allo strumento: il nome dello strumento datool.name, gli argomenti e il risultato da input.value e output.value nell'intervallo dello strumento di esecuzione.

Per ulteriori informazioni, consulta Esempi di intervalli nella telemetria unificata.

Esempi di intervalli nella telemetria divisa

Con la telemetria divisa, l'intervallo riporta gli attributi identificativi e il contenuto risiede in un record di eventi correlato. I seguenti esempi sono tratti da un agente di pianificazione dei viaggi Python OpenAI Agents distribuito su Amazon Bedrock Runtime. AgentCore Lo stesso agente è mostrato in ogni libreria di strumentazione.

Nota

Questi esempi non sono intervalli completi. Mostrano dati rappresentativi di un'interazione con un agente reale, con alcuni campi omessi e valori lunghi troncati per motivi di leggibilità.

OpenTelemetry

Esempio
Invoke agent span

L'gen_ai.operation.nameattributo (invoke_agent) lo identifica come un invoke agent span.

{ "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" } }

Il record dell'evento correlato contiene la conversazione. Ogni messaggio content è l'array OpenAI parts-format; il prompt dell'utente è il testo del messaggio utente e la risposta dell'agente è il testo del messaggio dell'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

L'gen_ai.operation.nameattributo (execute_tool) lo identifica come un intervallo di esecuzione dello strumento; gen_ai.tool.name contiene il nome dello strumento. Con la OpenTelemetry libreria, gli argomenti e i risultati dello strumento rimangono negli attributi span anche con telemetria divisa.

{ "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

L'gen_ai.operation.nameattributo (chat) lo identifica come intervallo di inferenza. Questo intervallo contiene i metadati del modello e, ingen_ai.tool.definitions, l'elenco degli strumenti disponibili per l'agente. I messaggi di conversazione per la chiamata del modello sono pubblicati nel record dell'evento correlato, in e. body.input 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

Con la OpenInference libreria, invoke agent (AGENT) span è un contenitore vuoto. AgentCore Le valutazioni ricostruiscono il prompt dell'utente e la risposta dell'agente partendo dall'intervallo inference (LLM), il cui contenuto risiede in un record di eventi correlato.

Esempio
Invoke agent span

L'openinference.span.kindattributo (AGENT) lo identifica come un invoke agent span. L'intervallo non contiene contenuti di conversazione.

{ "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

L'openinference.span.kindattributo (TOOL) lo identifica come un intervallo dello strumento di esecuzione; tool.name contiene il nome dello strumento. Gli argomenti e i risultati dello strumento sono presenti nel record dell'evento correlato.

{ "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

L'openinference.span.kindattributo (LLM) lo identifica come intervallo di inferenza. I ruoli dei messaggi e le definizioni degli strumenti si trovano negli attributi span; il contenuto del messaggio risiede nel record dell'evento correlato. ADOT riduce i ruoli di input auser, pertanto AgentCore Evaluations utilizza l'ultimo messaggio di input in testo normale come prompt dell'utente. Il messaggio di output è l'oggetto OpenAI Response, da cui Evaluations legge il testo della risposta. AgentCore

{ "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 ...\"}]}]}" } ] } } }

Esempi di intervalli di telemetria unificata

Con la telemetria unificata, lo stesso contenuto rimane negli attributi span e non viene prodotto alcun record di evento separato. I seguenti esempi sono tratti da un agente di pianificazione dei viaggi di Python OpenAI Agents. Lo stesso agente è mostrato in ogni libreria di strumentazione.

Nota

Questi esempi non sono intervalli completi. Mostrano dati rappresentativi di un'interazione con un agente reale, con alcuni campi omessi e valori lunghi troncati per motivi di leggibilità.

OpenTelemetry

Esempio
Invoke agent span

L'gen_ai.input.messagesattributo contiene il prompt dell'utente e l'gen_ai.output.messagesattributo contiene la risposta dell'agente. Entrambi sono matrici in formato parts 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

L'gen_ai.tool.call.argumentsattributo contiene gli argomenti dello strumento e l'gen_ai.tool.call.resultattributo contiene il risultato dello strumento.

{ "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

L'gen_ai.operation.nameattributo (chat) lo identifica come intervallo di inferenza. I metadati del modello e l'gen_ai.tool.definitionsattributo (l'elenco degli strumenti disponibili per l'agente) rimangono in linea nell'intervallo.

{ "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

Esempio
Execute tool span

L'input.valueattributo contiene gli argomenti dello strumento e l'output.valueattributo contiene il risultato dello strumento.

{ "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

Il contenuto del messaggio è in linea negli attributi indicizzati. Gli llm.input_messages.* attributi contengono il prompt del sistema e il prompt dell'utente e gli llm.output_messages.* attributi contengono la risposta dell'agente. AgentCore Le valutazioni ricostruiscono il prompt dell'utente e la risposta dell'agente a partire da questo intervallo e riempie l'intervallo vuoto di 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 supporto da parte degli agenti

Un agente TypeScript OpenAI Agents emette gli stessi tipi di span, identificando gli attributi e lo stesso layout dei contenuti di un agente Python, quindi il servizio di valutazione lo legge allo stesso modo. Esistono due librerie di TypeScript strumentazione, ciascuna con il proprio nome di ambito.

Strumenta il tuo agente

Aggiungete la libreria di strumentazione per la convention desiderata alle vostre TypeScript dipendenze. Usa l'ultima versione disponibile a meno che tu non abbia un motivo per bloccarla.

Esempio
ADOT (OpenTelemetry)

Per TypeScript gli agenti su ADOT, aggiungete il pacchetto di autostrumentazione AWS Distro Node () @aws/aws-distro-opentelemetry-node-autoinstrumentation alle vostre dipendenze. Include la strumentazione OpenAI Agents integrata, che si attiva all'avvio ed emette il nome dell'ambito. @aws/aws-distro-opentelemetry-instrumentation-openai-agents

package.json:

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

Aggiungilo alle tue dipendenze. @arizeai/openinference-instrumentation-openai-agents Il nome dell'ambito emesso è. @arizeai/openinference-instrumentation-openai-agents

package.json:

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

La strumentazione è un passo verso l'impostazione dell'osservabilità. Per esportare la telemetria per la valutazione, completa la configurazione completa in Imposta l'osservabilità. Imposta l'osservabilità

Come vengono identificati gli intervalli

L'identificazione degli intervalli è la stessa di un agente Python. La ADOT-native OpenTelemetry libreria (dal pacchetto di autostrumentazione AWS Distro Node@aws/aws-distro-opentelemetry-node-autoinstrumentation, che emette il nome dell'ambito) si imposta e la libreria JS @aws/aws-distro-opentelemetry-instrumentation-openai-agents () gen_ai.operation.name si imposta. OpenInference @arizeai/openinference-instrumentation-openai-agents openinference.span.kind Per i valori, vedi Come vengono identificati gli intervalli nel supporto dell'agente Python. Supporto per agenti Python

Come vengono estratti i campi di valutazione

L'estrazione dei campi legge gli stessi attributi di un agente Python. Nota che con la ADOT-native TypeScript libreria, lo span dell'agente invoke è un contenitore strutturale: il prompt dell'utente e la risposta dell'agente vengono ricostruiti a partire dall'inference (chat) span anziché dall'invoke agent span, a differenza della OpenTelemetry libreria Python, che li mantiene nello span dell'agente invoke. Per sapere da dove viene letto ogni campo, vedi Come vengono estratti i campi di valutazione in Python agent support. Supporto per agenti Python

Un esempio tratto da un agente TypeScript

I seguenti esempi sono tratti da un agente di pianificazione dei viaggi di TypeScript OpenAI Agents distribuito su Amazon AgentCore Bedrock Runtime con telemetria unificata. Lo stesso agente è mostrato in ogni libreria di strumentazione.

Nota

Questi esempi non sono intervalli completi. Mostrano dati rappresentativi di un'interazione con un agente reale, con alcuni campi omessi e valori lunghi troncati per motivi di leggibilità.

OpenTelemetry

Con la ADOT-native libreria (dal pacchetto di autostrumentazione AWS Distro Node, che fornisce il nome dell'ambito@aws/aws-distro-opentelemetry-instrumentation-openai-agents)@aws/aws-distro-opentelemetry-node-autoinstrumentation, l'invoke agent span è un contenitore strutturale e il contenuto della conversazione vive nell'intervallo inference (), nel formato delle parti e negli attributi. chat gen_ai.input.messages gen_ai.output.messages AgentCore Le valutazioni ricostruiscono il prompt dell'utente e la risposta dell'agente a partire dall'intervallo di inferenza.

Esempio
Invoke agent span

L'gen_ai.operation.nameattributo (invoke_agent) lo identifica come un invoke agent span. L'intervallo riporta il nome dell'agente e l'elenco degli strumenti ma non il contenuto della conversazione.

{ "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

L'gen_ai.operation.nameattributo (execute_tool) lo identifica come un intervallo dello strumento di esecuzione; gen_ai.tool.name contiene il nome dello strumento. Gli gen_ai.tool.call.result attributi gen_ai.tool.call.arguments and contengono gli argomenti e i risultati dello strumento.

{ "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

L'gen_ai.operation.nameattributo (chat) lo identifica come intervallo di inferenza. gen_ai.output.messagesGli attributi gen_ai.input.messages and contengono la conversazione nel formato parts, gen_ai.system_instructions contengono il prompt di sistema ed gen_ai.tool.definitions elencano gli strumenti disponibili per l'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

Con la libreria OpenInference JS, gli span invoke agent (AGENT) e turn (CHAIN) sono contenitori vuoti. AgentCore Evaluations ricostruisce il prompt dell'utente e la risposta dell'agente partendo dallo span inference (LLM), i cui messaggi si trovano nell'indice e negli attributi. llm.input_messages.* llm.output_messages.*

Esempio
Invoke agent span

L'openinference.span.kindattributo (AGENT) lo identifica come un invoke agent span. L'intervallo non contiene contenuti di conversazione.

{ "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

L'openinference.span.kindattributo (TOOL) lo identifica come un intervallo dello strumento di esecuzione; tool.name contiene il nome dello strumento. Gli output.value attributi input.value and contengono gli argomenti e i risultati dello strumento.

{ "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

L'openinference.span.kindattributo (LLM) lo identifica come intervallo di inferenza. Gli llm.input_messages.* attributi contengono il prompt del sistema e il prompt dell'utente, gli llm.output_messages.* attributi contengono la risposta dell'agente e gli llm.tools.*.tool.json_schema attributi contengono le definizioni degli strumenti. AgentCore Le valutazioni ricostruiscono il prompt dell'utente e la risposta dell'agente a partire da questo intervallo e riempie l'intervallo vuoto di 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" } }