View a markdown version of this page

Configurer la télémétrie du SDK Vercel AI pour les évaluations AgentCore - Base rocheuse de l'Amazonie AgentCore

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurer la télémétrie du SDK Vercel AI pour les évaluations AgentCore

Cette page explique comment instrumenter un agent du SDK Vercel AI, comment les intervalles sont identifiés et comment les champs d'évaluation sont extraits. Le SDK Vercel AI est un TypeScript-only framework. Par conséquent, toute l'assistance présentée sur cette page s'applique aux TypeScript agents.

Note

AgentCore Evaluations prend en charge le SDK Vercel AI pour les TypeScript agents uniquement. Python n'est pas pris en charge pour le moment.

Rubriques

TypeScript assistance aux agents

Un agent du SDK Vercel AI produit des spans sous le nom de scope. @aws/aws-distro-opentelemetry-instrumentation-vercel-ai

Instrumentez votre agent

Instrumentez un agent du SDK Vercel AI à l'aide de AWS Distro for OpenTelemetry (ADOT). Ajoutez le package d'autoinstrumentation AWS Distro Node (@aws/aws-distro-opentelemetry-node-autoinstrumentation) à vos dépendances. Il inclut l'instrumentation Vercel AI intégrée, qui s'active au démarrage et émet le nom du scope. @aws/aws-distro-opentelemetry-instrumentation-vercel-ai

package.json:

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

L'instrumentation suit les conventions sémantiques de l' OpenTelemetry IA générative : elle classe les intervalles avec des attributs gen_ai.operation.name et transmet la conversation en fonction des attributs. gen_ai.*

Note

L'instrumentation constitue une étape dans la mise en place de l'observabilité. Pour exporter la télémétrie à des fins d'évaluation, effectuez la configuration complète dans Configurer l'observabilité.

Comment les travées sont identifiées

L'instrumentation Vercel AI définit l'gen_ai.operation.nameattribut sur chaque travée. Le service d'évaluation utilise cet attribut pour classer les spans :

Type d'envergure Attribut d'identification

Invoquer un agent

gen_ai.operation.name = invoke_agent

Outil d'exécution

gen_ai.operation.name = execute_tool

Inférence

gen_ai.operation.name = chat

Comment sont extraits les champs d'évaluation

Le SDK Vercel AI sérialise les messages sous deux formes, et AgentCore Evaluations lit les deux :

  • Une forme orientée objet sur l'entrée de l'agent d'invocation et des étendues d'inférence, dans laquelle gen_ai.input.messages se trouve un objet JSON avec un system champ (l'invite du système) et un messages tableau (par exemple,). {"system": "…​", "messages": [{"role": "user", "content": "…​"}]}

  • Une forme de liste de parties sur la sortie, dans laquelle chaque message contient un parts tableau de blocs de contenu typés (par exemple,). [{"role": "assistant", "parts": [{"type": "text", "content": "…​"}]}]

AgentCore Les évaluations extraient le texte des deux formes : l'invite utilisateur figurant dans le dernier message utilisateur de la saisie, l'invite du système depuis le system champ et la réponse de l'agent depuis les parties textuelles de la sortie.

L'instrumentation Vercel AI utilise la télémétrie unifiée, de sorte que le contenu de la conversation reste stable sous forme d'attributs :

  • Invite utilisateur et réponse de l'agent  : depuis gen_ai.input.messages et vers gen_ai.output.messages le span d'invocation de l'agent.

  • Invite système  : depuis le system champ de l'object-dict dans. gen_ai.input.messages

  • Appel d'outil  : nom de l'outil provenant degen_ai.tool.name, arguments et résultats provenant de gen_ai.tool.call.arguments etgen_ai.tool.call.result, sur la plage d'outils d'exécution.

Pour plus d'informations, consultez la section Exemples de spans provenant d'un TypeScript agent.

Exemples de spans provenant d'un agent TypeScript

Grâce à la télémétrie unifiée, le contenu de la conversation reste sur les attributs span et aucun enregistrement d'événement distinct n'est produit. Les exemples suivants proviennent d'un agent de planification de voyages du SDK TypeScript Vercel AI déployé sur Amazon Bedrock AgentCore Runtime, à l'aide d'un modèle Amazon Bedrock.

Note

Ces exemples ne constituent pas des séries complètes. Ils présentent des données représentatives provenant d'une interaction réelle entre agents, certains champs étant omis et les valeurs longues tronquées pour des raisons de lisibilité.

Exemple
Invoke agent span

L'gen_ai.operation.nameattribut (invoke_agent) l'identifie comme une étendue d'agent d'invocation. L'gen_ai.input.messagesattribut contient l'invite du système et la conversation sous la forme Object-dict, et gen_ai.output.messages contient la réponse de l'agent sous la forme d'une liste d'articles.

{ "traceId": "6a6bd3b14c8d91ed1e70a3906b551618", "spanId": "fa0dce44446e3d24", "name": "invoke_agent", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-vercel-ai", "version": "0.12.0" }, "attributes": { "gen_ai.operation.name": "invoke_agent", "gen_ai.provider.name": "aws.bedrock", "gen_ai.request.model": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", "gen_ai.input.messages": "{\"system\": \"You are a travel planning assistant ...\", \"messages\": [{\"role\": \"user\", \"content\": \"Hey, how can you help me\"}]}", "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"Hello! I'm your travel planning assistant ...\"}]}]", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }
Execute tool span

L'gen_ai.operation.nameattribut (execute_tool) l'identifie comme une étendue d'outil d'exécution ; gen_ai.tool.name contient le nom de l'outil. L'gen_ai.tool.call.argumentsattribut contient les arguments de l'outil et l'gen_ai.tool.call.resultattribut contient le résultat de l'outil.

{ "traceId": "6a6bd3b14c8d91ed1e70a3906b551618", "spanId": "b64c37adefae74f0", "name": "execute_tool search_flights", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-vercel-ai", "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.id": "toolu_bdrk_01LzXXJCfpfuS7Bpf7e1qLMg", "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.nameattribut (chat) l'identifie comme une étendue d'inférence. Il contient les métadonnées du modèle et, dansgen_ai.tool.definitions, la liste des outils disponibles pour l'agent. Les messages de conversation pour l'appel de modèle sont en gen_ai.input.messages (forme object-dict) et gen_ai.output.messages (forme de liste de pièces).

{ "traceId": "6a6bd3b14c8d91ed1e70a3906b551618", "spanId": "1865614ca1b88dfb", "name": "chat us.anthropic.claude-sonnet-4-5-20250929-v1:0", "kind": "INTERNAL", "scope": { "name": "@aws/aws-distro-opentelemetry-instrumentation-vercel-ai", "version": "0.12.0" }, "attributes": { "gen_ai.operation.name": "chat", "gen_ai.provider.name": "aws.bedrock", "gen_ai.request.model": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", "gen_ai.response.model": "us.anthropic.claude-sonnet-4-5-20250929-v1:0", "gen_ai.usage.input_tokens": 1258, "gen_ai.usage.output_tokens": 241, "gen_ai.input.messages": "{\"system\": \"You are a travel planning assistant ...\", \"messages\": [{\"role\": \"user\", \"content\": \"Hey, how can you help me\"}]}", "gen_ai.output.messages": "[{\"role\": \"assistant\", \"parts\": [{\"type\": \"text\", \"content\": \"Hello! I'm your travel planning assistant ...\"}]}]", "gen_ai.tool.definitions": "[{\"type\": \"function\", \"name\": \"search_flights\", \"description\": \"Search for available flights between cities.\", ...}]", "session.id": "sea-nyc-trip-2-turns" }, "status": { "code": "OK" } }