View a markdown version of this page

Siapkan telemetri Vercel AI SDK untuk Evaluasi AgentCore - Batu Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan telemetri Vercel AI SDK untuk Evaluasi AgentCore

Halaman ini menjelaskan cara instrumen agen Vercel AI SDK, bagaimana rentang diidentifikasi, dan bagaimana bidang evaluasi diekstraksi. Vercel AI SDK adalah TypeScript-only kerangka kerja, jadi semua dukungan di halaman ini berlaku untuk TypeScript agen.

catatan

AgentCore Evaluasi mendukung Vercel AI SDK hanya untuk TypeScript agen. Python tidak didukung saat ini.

Topik

TypeScript dukungan agen

Agen Vercel AI SDK menghasilkan rentang di bawah nama cakupan. @aws/aws-distro-opentelemetry-instrumentation-vercel-ai

Instrumentasikan agen Anda

Instrumentasikan agen Vercel AI SDK dengan AWS Distro for OpenTelemetry (ADOT). Tambahkan paket autoinstrumentasi AWS Distro Node (@aws/aws-distro-opentelemetry-node-autoinstrumentation) ke dependensi Anda. Ini termasuk instrumentasi AI Vercel bawaan, yang aktif saat startup dan memancarkan nama cakupan. @aws/aws-distro-opentelemetry-instrumentation-vercel-ai

package.json:

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

Instrumentasi mengikuti konvensi semantik OpenTelemetry AI Generatif-: ia mengklasifikasikan rentang dengan gen_ai.operation.name dan membawa percakapan dalam atribut. gen_ai.*

catatan

Instrumentasi adalah salah satu langkah dalam mengatur observabilitas. Untuk mengekspor telemetri untuk evaluasi, selesaikan penyiapan lengkap di Menyi apkan observ abilitas.

Bagaimana rentang diidentifikasi

Instrumentasi AI Vercel menetapkan gen_ai.operation.name atribut pada setiap rentang. Layanan evaluasi menggunakan atribut ini untuk mengklasifikasikan rentang:

Jenis rentang Mengidentifikasi atribut

Memanggil agen

gen_ai.operation.name = invoke_agent

Jalankan alat

gen_ai.operation.name = execute_tool

Inferensi

gen_ai.operation.name = chat

Bagaimana bidang evaluasi diekstraksi

Vercel AI SDK membuat serial pesan dalam dua bentuk, dan AgentCore Evaluasi membaca keduanya:

  • Bentuk object-dict pada input agen invoke dan rentang inferensi, di mana gen_ai.input.messages adalah objek JSON dengan system bidang (prompt sistem) dan messages array (misalnya,). {"system": "…​", "messages": [{"role": "user", "content": "…​"}]}

  • Bentuk daftar bagian pada output, di mana setiap pesan membawa parts array blok konten yang diketik (misalnya,[{"role": "assistant", "parts": [{"type": "text", "content": "…​"}]}]).

AgentCore Evaluasi menarik teks dari kedua bentuk: prompt pengguna dari pesan pengguna terakhir dalam input, prompt sistem dari system lapangan, dan respons agen dari bagian teks keluaran.

Instrumentasi AI Vercel menggunakan telemetri terpadu, sehingga konten percakapan tetap pada rentang sebagai atribut:

  • Prompt pengguna dan respons agen: dari gen_ai.input.messages dan gen_ai.output.messages pada rentang agen pemanggilan.

  • Prompt sistem: dari system bidang object-dict di. gen_ai.input.messages

  • Panggilan alat: nama alat darigen_ai.tool.name, dan argumen serta hasil dari gen_ai.tool.call.arguments dangen_ai.tool.call.result, pada rentang alat eksekusi.

Untuk informasi selengkapnya, lihat Contoh rentang dari TypeScript agen.

Contoh rentang dari agen TypeScript

Dengan telemetri terpadu, konten percakapan tetap pada atribut rentang dan tidak ada catatan peristiwa terpisah yang dihasilkan. Contoh berikut berasal dari agen perencanaan perjalanan TypeScript Vercel AI SDK yang digunakan di Amazon Bedrock AgentCore Runtime, menggunakan model Amazon Bedrock.

catatan

Contoh-contoh ini bukan rentang lengkap. Mereka menunjukkan data representatif dari interaksi agen nyata, dengan beberapa bidang dihilangkan dan nilai panjang dipotong untuk keterbacaan.

contoh
Invoke agent span

A gen_ai.operation.name tribut (invoke_agent) mengidentifikasi ini sebagai rentang agen invoke. A gen_ai.input.messages tribut menyimpan prompt sistem dan percakapan dalam bentuk object-dict, dan gen_ai.output.messages menahan respons agen dalam bentuk daftar bagian.

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

A gen_ai.operation.name tribut (execute_tool) mengidentifikasi ini sebagai rentang alat eksekusi; gen_ai.tool.name memegang nama alat. A gen_ai.tool.call.arguments tribut menyimpan argumen alat, dan gen_ai.tool.call.result atribut menyimpan hasil alat.

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

A gen_ai.operation.name tribut (chat) mengidentifikasi ini sebagai rentang inferensi. Ini membawa metadata model dan, dalamgen_ai.tool.definitions, daftar alat yang tersedia untuk agen. Pesan percakapan untuk panggilan model berada dalam gen_ai.input.messages (bentuk object-dict) dan gen_ai.output.messages (bentuk daftar bagian).

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