

# Agenti Strands
<a name="supported-frameworks-strands"></a>

Questa pagina spiega come strumentare un agente [Strands Agents](https://strandsagents.com/latest/), come vengono identificati gli intervalli e come vengono estratti i campi di valutazione.

 **Argomenti** 
+  [Strumenta il tuo agente](#strands-instrument) 
+  [Come vengono identificate le campate](#strands-span-identification) 
+  [Come vengono estratti i campi di valutazione](#strands-extraction) 
  +  [Dai registri degli eventi](#strands-extraction-event-records) 
  +  [Dagli eventi inline span](#strands-extraction-inline-events) 
+  [L'esempio include i record degli eventi](#strands-examples-with) 
+  [Esempio di intervalli senza record di eventi](#strands-examples-without) 

## Strumenta il tuo agente
<a name="strands-instrument"></a>

L'SDK Strands Agents include la telemetria integrata e non richiede alcuna 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 with the AWS Distro for OpenTelemetry (ADOT), il Runtime inserisce l'`session.id`attributo ed esporta automaticamente gli intervalli e i record degli eventi.

**Nota**  
La strumentazione è un passo nella configurazione dell'osservabilità. [Per esportare la telemetria per la valutazione, completa la configurazione completa in Imposta l'osservabilità.](supported-frameworks.md#supported-frameworks-setup)

## Come vengono identificati gli intervalli
<a name="strands-span-identification"></a>

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


| Tipo di intervallo | Attributo identificativo | Esempio di nome 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
<a name="strands-extraction"></a>

La posizione del contenuto della conversazione dipende da come è stata raccolta la telemetria. Quando ADOT divide la telemetria, il contenuto si trova in un record di eventi separato. Quando la telemetria non viene suddivisa, il contenuto rimane nell'intervallo come eventi in linea. Per ulteriori informazioni, consulta Intervalli, record di [eventi e segnali di telemetria](supported-frameworks-telemetry.md). L'attributo identificativo (`gen_ai.operation.name`) è sull'intervallo in entrambi i casi.

### Dai registri degli eventi
<a name="strands-extraction-event-records"></a>

Quando la telemetria viene suddivisa, il servizio legge il contenuto del record dell'evento correlato a ciascun intervallo:
+  **Richiesta utente**: dall'agente input messages (`input.messages`), il contenuto del messaggio con un ruolo utente.
+  **Risposta dell'agente**: dall'agente output messages (`output.messages`), il contenuto del messaggio con un ruolo di assistente.
+  **Chiamata** allo strumento: il nome dello strumento dall'`gen_ai.tool.name`attributo nell'intervallo dello strumento di esecuzione. Gli argomenti e i risultati dello strumento provengono dal record degli eventi (`input`and`output`) di quell'intervallo.

Per esempi, vedete [Example spans with event records](#strands-examples-with).

### Da inline span events
<a name="strands-extraction-inline-events"></a>

Quando la telemetria non viene suddivisa, lo stesso contenuto viene inserito negli eventi inline span anziché in un record di eventi separato:
+  **Richiesta utente**: dall'evento, l'attributo. `gen_ai.user.message` `content`
+  **Risposta dell'agente**: dall'`gen_ai.choice`evento, l'`message`attributo.
+  **Richiamata dello** strumento: il nome dello strumento dall'`gen_ai.tool.name`attributo sullo span. Gli argomenti dello strumento provengono dall'`gen_ai.tool.message`evento e il risultato proviene dall'`gen_ai.choice`evento.

Per esempi, vedete [Example spans without event records](#strands-examples-without).

## L'esempio si estende ai record degli eventi
<a name="strands-examples-with"></a>

Quando la telemetria viene suddivisa, l'intervallo contiene 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 di Strands distribuito su Amazon Bedrock Runtime. AgentCore 

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

**Example**  
L'`gen_ai.operation.name`attributo (`invoke_agent`) lo identifica come un invoke agent span. L'`gen_ai.agent.tools`attributo 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 utente è il messaggio inserito nel `input.messages` ruolo utente e la risposta dell'agente è il messaggio relativo al ruolo di assistente. `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"
          }
        }
      ]
    }
  }
}
```
L'`gen_ai.operation.name`attributo (`execute_tool`) lo identifica come un intervallo di strumenti di esecuzione. L'`gen_ai.tool.name`attributo 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"
          }
        }
      ]
    }
  }
}
```

## L'esempio si estende senza record di eventi
<a name="strands-examples-without"></a>

Quando la telemetria non viene suddivisa, lo stesso contenuto viene archiviato negli eventi di estensione in linea dello span, senza alcun record di eventi separato. Gli esempi seguenti sono tratti da un agente di pianificazione dei viaggi di Strands.

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

**Example**  
L'`gen_ai.user.message`evento contiene il prompt dell'utente e l'evento contiene la risposta dell'`gen_ai.choice`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"
      }
    }
  ]
}
```
L'`gen_ai.tool.message`evento contiene gli argomenti dello strumento e l'`gen_ai.choice`evento 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"
      }
    }
  ]
}
```