翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AgentCore 評価の Vercel AI SDK テレメトリを設定する
このページでは、Vercel AI SDK エージェントを計測する方法、スパンの特定方法、評価フィールドの抽出方法について説明します。Vercel AI SDK は TypeScript 専用のフレームワークであるため、このページのすべてのサポートは TypeScript エージェントに適用されます。
AgentCore Evaluations は、Vercel AI SDK for TypeScript エージェントのみをサポートしています。Python は現在サポートされていません。
トピック
TypeScript エージェントのサポート
Vercel AI SDK エージェントは、スコープ名 でスパンを生成します@aws/aws-distro-opentelemetry-instrumentation-vercel-ai。
エージェントを計測する
Distro for OpenTelemetry (ADOT) AWS を使用して Vercel AI SDK エージェントを計測します。 AWS Distro Node 自動計測パッケージ (@aws/aws-distro-opentelemetry-node-autoinstrumentation) を依存関係に追加します。これには、起動時にアクティブ化され、スコープ名 を出力する組み込み Vercel AI 計測が含まれています@aws/aws-distro-opentelemetry-instrumentation-vercel-ai。
package.json:
{
"dependencies": {
"@aws/aws-distro-opentelemetry-node-autoinstrumentation": "^0.12.0"
}
}
計測は OpenTelemetry 生成 AI セマンティック規則に従います。 を使用してスパンを分類gen_ai.operation.nameし、会話をgen_ai.*属性で伝達します。
計測は、オブザーバビリティを設定する 1 つのステップです。評価のためにテレメトリをエクスポートするには、「オブザーバビリティの設定」で完全なセットアップを完了します。
スパンの識別方法
Vercel AI 計測は、各スパンに gen_ai.operation.name 属性を設定します。評価サービスは、この属性を使用してスパンを分類します。
| スパンタイプ |
属性の識別 |
|
エージェントを呼び出す
|
gen_ai.operation.name = invoke_agent
|
|
実行ツール
|
gen_ai.operation.name = execute_tool
|
|
推測
|
gen_ai.operation.name = chat
|
Vercel AI SDK はメッセージを 2 つの形式でシリアル化し、AgentCore Evaluations は両方を読み取ります。
-
呼び出しエージェントと推論スパンの入力のオブジェクトディクトシェイプ。 gen_ai.input.messagesは、systemフィールド (システムプロンプト) とmessages配列 (例: ) を持つ JSON オブジェクトです{"system": "…", "messages": [{"role": "user", "content": "…"}]}。
-
出力上のパートリストシェイプ。各メッセージには型付きコンテンツブロックのparts配列が格納されます (例: [{"role": "assistant", "parts": [{"type": "text", "content": "…"}]}])。
AgentCore Evaluations は、入力の最後のユーザーメッセージからのユーザープロンプト、 systemフィールドからのシステムプロンプト、および出力のテキスト部分からのエージェントのレスポンスという両方の形状からテキストを引き出します。
Vercel AI 計測は統合テレメトリを使用するため、会話コンテンツは属性としてスパンに留まります。
-
ユーザープロンプトとエージェントのレスポンス: gen_ai.input.messages gen_ai.output.messages 呼び出しエージェントのスパンとの間で。
-
システムプロンプト: の object-dict の systemフィールドからgen_ai.input.messages。
-
ツール呼び出し: 実行ツールスパンgen_ai.tool.call.resultの からのツール名gen_ai.tool.name、および gen_ai.tool.call.argumentsと からの引数と結果。
詳細については、TypeScript エージェントからのスパンの例」を参照してください。
TypeScript エージェントからのスパンの例
統合テレメトリでは、会話コンテンツはスパン属性にとどまり、個別のイベントレコードは生成されません。次の例は、Amazon Bedrock モデルを使用して Amazon Bedrock AgentCore ランタイムにデプロイされた TypeScript Vercel AI SDK の旅行計画エージェントからのものです。
これらの例は完全なスパンではありません。実際のエージェントインタラクションからの代表的なデータが表示され、読みやすいように一部のフィールドは省略され、長い値は切り捨てられます。
例
- Invoke agent span
-
gen_ai.operation.name 属性 (invoke_agent) は、これを呼び出しエージェントのスパンとして識別します。gen_ai.input.messages 属性は、システムプロンプトと会話をオブジェクトディクト形式で保持し、エージェントのレスポンスをパートリスト形式でgen_ai.output.messages保持します。
{
"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
-
gen_ai.operation.name 属性 (execute_tool) は、これを実行ツールスパンとして識別します。 はツール名gen_ai.tool.nameを保持します。gen_ai.tool.call.arguments 属性はツール引数を保持し、 gen_ai.tool.call.result 属性はツールの結果を保持します。
{
"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
-
gen_ai.operation.name 属性 (chat) は、これを推論スパンとして識別します。モデルメタデータと、 でエージェントが使用できるツールgen_ai.tool.definitionsのリストが保持されます。モデル呼び出しの会話メッセージは、 gen_ai.input.messages (オブジェクトディクトシェイプ) と gen_ai.output.messages (パートリストシェイプ) です。
{
"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"
}
}