View a markdown version of this page

Imposta la telemetria degli agenti di Strands per le valutazioni AgentCore - 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à.

Imposta la telemetria degli agenti di Strands per le valutazioni AgentCore

Questa pagina spiega come strumentare un agente Strands Agents, come vengono identificati gli intervalli e come vengono estratti i campi di valutazione.

Argomenti

AgentCore Evaluations supporta gli agenti Strands creati con Python SDK e SDK. TypeScript I due generano gli stessi tipi di intervallo, attributi identificativi e layout dei contenuti, con nomi di ambito diversi, quindi il servizio di valutazione li legge allo stesso modo. Questa pagina tratta ogni linguaggio separatamente: per Python, vedi Python agent support; per TypeScript, vedi TypeScript agent support.

Supporto per agenti Python

Un agente Python Strands produce intervalli con il nome dell'ambito. strands.telemetry.tracer

Strumenta il tuo agente

L'SDK Strands Agents include la telemetria integrata e non richiede una libreria di strumentazione aggiuntiva. Produce intervalli e record di eventi con il nome dell'ambito. strands.telemetry.tracer Quando viene distribuito su Amazon Bedrock AgentCore Runtime con AWS Distro for OpenTelemetry (ADOT), il Runtime inserisce l'session.idattributo ed esporta automaticamente gli intervalli e i record di eventi.

Nota

La strumentazione è un passaggio nella configurazione 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

Strands imposta l'gen_ai.operation.nameattributo su ogni intervallo. Il servizio di valutazione utilizza questo attributo per classificare gli intervalli:

Tipo di intervallo Attributo identificativo Esempio di nome di span

Invoca l'agente

gen_ai.operation.name = invoke_agent

invoke_agent TravelAgent

Strumento di esecuzione

gen_ai.operation.name = execute_tool

execute_tool search_flights

Inferenza

gen_ai.operation.name = chat

chat

Come vengono estratti i campi di valutazione

La posizione del contenuto della conversazione dipende dalla modalità di trasmissione della telemetria. Con la telemetria divisa, il contenuto si trova in un record di eventi separato. Con la telemetria unificata, il contenuto rimane nell'intervallo, così come gli eventi ad esso collegati. Per ulteriori informazioni, consulta Configurazione e distribuzione della telemetria. L'attributo identificativo (gen_ai.operation.name) è sull'intervallo in entrambe le modalità.

Dai record degli eventi

Con la telemetria divisa, il servizio legge il contenuto del record dell'evento correlato a ciascun intervallo:

  • Prompt utente: dai messaggi di input dell'agente (input.messages), il contenuto del messaggio con un ruolo utente.

  • Risposta dell'agente: dai messaggi di output dell'agente (output.messages), il contenuto del messaggio con un ruolo di assistente.

  • Chiamata allo strumento: il nome dello strumento derivato dall'gen_ai.tool.nameattributo nell'intervallo di esecuzione dello strumento. Gli argomenti e i risultati dello strumento provengono dal record degli eventi (inputeoutput) di quell'intervallo.

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

Dagli eventi inline span

Con la telemetria unificata, lo stesso contenuto viene trasportato in eventi span in linea anziché in un record di eventi separato:

  • Richiesta utente: dall'evento, l'attributo. gen_ai.user.message content

  • Risposta dell'agente: dall'gen_ai.choiceevento, l'messageattributo.

  • Chiamata allo strumento: il nome dello strumento derivante dall'gen_ai.tool.nameattributo sullo span. Gli argomenti dello strumento provengono dall'gen_ai.tool.messageevento e il risultato viene dall'gen_ai.choiceevento.

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. Gli esempi seguenti sono tratti da un agente di pianificazione dei viaggi di Python Strands distribuito su Amazon Bedrock Runtime. AgentCore

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à.

Esempio
Invoke agent span

L'gen_ai.operation.nameattributo (invoke_agent) lo identifica come un invoke agent span. L'gen_ai.agent.toolsattributo elenca gli strumenti disponibili per l'agente.

{ "traceId": "69e9cc4771d7cabe0d8e8cea33b6b338", "spanId": "d24936b8989b6d42", "parentSpanId": "0ff3498548044e4b", "name": "invoke_agent TravelAgent", "kind": "INTERNAL", "scope": { "name": "strands.telemetry.tracer", "version": "" }, "startTimeUnixNano": 1776929864011990383, "endTimeUnixNano": 1776929869634304466, "durationNano": 5622314083, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.system": "strands-agents", "gen_ai.agent.name": "TravelAgent", "gen_ai.request.model": "us.anthropic.claude-sonnet-4-20250514-v1:0", "gen_ai.usage.input_tokens": 983, "gen_ai.usage.output_tokens": 232, "gen_ai.usage.total_tokens": 1215, "gen_ai.agent.tools": "[\"search_flights\", \"book_flight\", \"search_hotels\", \"book_hotel\", \"search_activities\", \"book_activity\"]", "session.id": "sea-nyc-trip-2-turns-adot_v17-20260423003743" }, "status": { "code": "OK" } }

Il record dell'evento correlato contiene il contenuto della conversazione. Il prompt dell'utente è il messaggio relativo al ruolo dell'utente e la risposta dell'agente è il messaggio relativo al ruolo dell'assistente in. input.messages output.messages

{ "spanId": "d24936b8989b6d42", "traceId": "69e9cc4771d7cabe0d8e8cea33b6b338", "scope": { "name": "strands.telemetry.tracer" }, "body": { "input": { "messages": [ { "role": "user", "content": "Hey, how can you help me" } ] }, "output": { "messages": [ { "role": "assistant", "content": { "message": "Hi there! I'm your travel planning assistant ...", "finish_reason": "end_turn" } } ] } } }
Execute tool span

L'gen_ai.operation.nameattributo (execute_tool) lo identifica come un intervallo dello strumento di esecuzione. L'gen_ai.tool.nameattributo contiene il nome dello strumento.

{ "traceId": "69e9cc4d132b180909ba49f613f273dd", "spanId": "fff785ce12d6fda8", "parentSpanId": "96915bf5ecc78743", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "strands.telemetry.tracer", "version": "" }, "startTimeUnixNano": 1776929872258292842, "endTimeUnixNano": 1776929872259611427, "durationNano": 1318585, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.call.id": "tooluse_hiWwdtThuD67G5cK8cp5mj", "gen_ai.tool.status": "success", "gen_ai.tool.description": "Search for available flights between cities.", "session.id": "sea-nyc-trip-2-turns-adot_v17-20260423003743" }, "status": { "code": "OK" } }

Il record dell'evento correlato contiene l'input (argomenti) e l'output (risultato) dello strumento.

{ "spanId": "fff785ce12d6fda8", "traceId": "69e9cc4d132b180909ba49f613f273dd", "scope": { "name": "strands.telemetry.tracer" }, "body": { "input": { "messages": [ { "role": "tool", "content": { "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "role": "tool", "id": "tooluse_hiWwdtThuD67G5cK8cp5mj" } } ] }, "output": { "messages": [ { "role": "assistant", "content": { "message": "[{\"text\": \"{\\\"origin\\\": \\\"SEA\\\", \\\"destination\\\": \\\"NYC\\\", \\\"flights\\\": [ ... ]}\"}]", "id": "tooluse_hiWwdtThuD67G5cK8cp5mj" } } ] } } }

Esempi di intervalli di telemetria unificata

Con la telemetria unificata, lo stesso contenuto viene trasportato in eventi di estensione in linea sullo span, senza alcun record di evento separato. I seguenti esempi sono tratti da un agente di pianificazione dei viaggi di Python Strands.

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à.

Esempio
Invoke agent span

L'gen_ai.user.messageevento contiene il prompt dell'utente e l'gen_ai.choiceevento contiene la risposta dell'agente.

{ "traceId": "69e9cc4771d7cabe0d8e8cea33b6b338", "spanId": "d2ee0e4765cc773e", "name": "invoke_agent TravelAgent", "kind": "INTERNAL", "scope": { "name": "strands.telemetry.tracer" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": "TravelAgent", "session.id": "sea-nyc-trip-2-turns-unified" }, "events": [ { "name": "gen_ai.user.message", "attributes": { "content": "[{\"text\": \"Hey, how can you help me\"}]" } }, { "name": "gen_ai.choice", "attributes": { "message": "Hi there! I'm your travel planning assistant ...", "finish_reason": "end_turn" } } ] }
Execute tool span

L'gen_ai.tool.messageevento contiene gli argomenti dello strumento e l'gen_ai.choiceevento contiene il risultato dello strumento.

{ "traceId": "69e9cc4d132b180909ba49f613f273dd", "spanId": "0a988e27758ebb53", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "strands.telemetry.tracer" }, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.call.id": "tooluse_JuGterOaZfQV2c55Rp3S7C", "gen_ai.tool.status": "success", "session.id": "sea-nyc-trip-2-turns-unified" }, "events": [ { "name": "gen_ai.tool.message", "attributes": { "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "role": "tool", "id": "tooluse_JuGterOaZfQV2c55Rp3S7C" } }, { "name": "gen_ai.choice", "attributes": { "message": "[{\"text\": \"{\\\"origin\\\": \\\"SEA\\\", \\\"destination\\\": \\\"NYC\\\", \\\"flights\\\": [ ... ]}\"}]", "id": "tooluse_JuGterOaZfQV2c55Rp3S7C" } } ] }

TypeScript supporto agli agenti

Un agente TypeScript Strands produce intervalli con il nome strands-agents dell'ambito. Emette gli stessi tipi di span e lo stesso layout di contenuto di un agente Python, quindi il servizio di valutazione lo legge allo stesso modo.

Strumenta il tuo agente

TypeScript Strands Agents SDK (@strands-agents/sdk>= 1.5.0) include la telemetria integrata e non richiede alcuna libreria di strumentazione aggiuntiva. Quando viene distribuito su Amazon Bedrock AgentCore Runtime con AWS Distro for OpenTelemetry (ADOT), Runtime inserisce l'attributo ed esporta automaticamente gli intervalli e i record di eventi. session.id L' TypeScript SDK produce intervalli con il nome dell'ambito. strands-agents

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. L'gen_ai.operation.nameattributo classifica ogni intervallo. Per i valori e i nomi degli intervalli di esempio, vedi Come vengono identificati gli intervalli nel supporto Python. Supporto per agenti Python

Come vengono estratti i campi di valutazione

L'estrazione dei campi è la stessa di un agente Python. Il contenuto della conversazione viene trasmesso in eventi di estensione in linea (gen_ai.user.message,gen_ai.choice, e). gen_ai.tool.message Per sapere da dove viene letto ogni campo, vedi From inline span events sotto il supporto Python. Supporto per agenti Python

Un esempio tratto da un agente TypeScript

Gli esempi seguenti sono tratti da un agente di pianificazione TypeScript dei viaggi di Strands distribuito su Amazon Bedrock Runtime. AgentCore

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à.

Esempio
Invoke agent span

L'gen_ai.operation.nameattributo (invoke_agent) lo identifica come invoke agent span ed gen_ai.agent.tools elenca gli strumenti a disposizione dell'agente. L'gen_ai.user.messageevento contiene il prompt dell'utente e l'gen_ai.choiceevento contiene la risposta dell'agente.

{ "traceId": "6a6bc695459e41aa14a172bb41d3246d", "spanId": "c2c44e69bdab6ef1", "parentSpanId": "f18d96d107e793ba", "name": "invoke_agent Strands Agent", "kind": "INTERNAL", "scope": { "name": "strands-agents", "version": "" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.agent.name": "Strands Agent", "gen_ai.system": "strands-agents", "gen_ai.request.model": "global.anthropic.claude-sonnet-4-5-20250929-v1:0", "gen_ai.agent.tools": "[\"search_flights\", \"book_flight\", \"search_hotels\", \"book_hotel\", \"search_activities\", \"book_activity\"]", "session.id": "sea-nyc-trip-2-turns" }, "events": [ { "name": "gen_ai.user.message", "attributes": { "content": "[{\"text\": \"Hey, how can you help me\"}]" } }, { "name": "gen_ai.choice", "attributes": { "message": "Hello! I'm your travel planning assistant, and I can help you with the following: ..." } } ] }
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. L'gen_ai.tool.messageevento contiene gli argomenti dello strumento e l'gen_ai.choiceevento contiene il risultato dello strumento.

{ "traceId": "6a6bc69e6eaa1e994481bef349f4c72e", "spanId": "4227ac5525f22dd2", "parentSpanId": "8a989e0dbb9dc22f", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "strands-agents", "version": "" }, "attributes": { "gen_ai.operation.name": "execute_tool", "gen_ai.tool.name": "search_flights", "gen_ai.tool.call.id": "tooluse_AoP0OTnq2YcOZDvY7ldSUQ", "gen_ai.tool.status": "success", "session.id": "sea-nyc-trip-2-turns" }, "events": [ { "name": "gen_ai.tool.message", "attributes": { "content": "{\"origin\": \"SEA\", \"destination\": \"NYC\", \"date\": \"2025-03-15\"}", "role": "tool", "id": "tooluse_AoP0OTnq2YcOZDvY7ldSUQ" } }, { "name": "gen_ai.choice", "attributes": { "message": "[{\"text\": \"{\\\"origin\\\": \\\"SEA\\\", \\\"destination\\\": \\\"NYC\\\", \\\"flights\\\": [ ... ]}\"}]", "id": "tooluse_AoP0OTnq2YcOZDvY7ldSUQ" } } ] }