Menangani panggilan alat
Mengurai blok tool_use, memformat respons tool_result, dan menangani error dengan is_error.
Halaman ini membahas siklus hidup panggilan alat: membaca blok tool_use dari respons Claude, memformat blok tool_result dalam balasan Anda, dan memberi sinyal error. Untuk abstraksi SDK yang menangani hal ini secara otomatis, lihat Tool Runner.
Respons Claude berbeda tergantung pada apakah Claude menggunakan alat klien atau alat server.
Menangani hasil dari alat klien
Respons akan memiliki stop_reason berupa tool_use dan satu atau lebih blok konten tool_use yang mencakup:
id: Pengidentifikasi unik untuk blok penggunaan alat tertentu ini. Ini akan digunakan untuk mencocokkan hasil alat nantinya.name: Nama alat yang digunakan.input: Objek yang berisi input yang diteruskan ke alat, sesuai denganinput_schemaalat tersebut.
Blok tool_use untuk anggota dari toolset computer use atau browser use juga membawa field toolset_name ("computer" atau "browser"). name-nya adalah alat anggota yang dipanggil Claude, seperti screenshot atau navigate, jadi lakukan dispatch blok-blok tersebut berdasarkan kedua field.
{
"id": "msg_01Aq9w938a90dw8q",
"model": "claude-opus-5-5",
"stop_reason": "tool_use",
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll check the current weather in San Francisco for you."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": { "location": "San Francisco, CA", "unit": "celsius" }
}
]
}Ketika Anda menerima respons penggunaan alat untuk alat klien, Anda harus:
- Mengekstrak
name,id, daninputdari bloktool_use. - Menjalankan alat yang sebenarnya di codebase Anda yang sesuai dengan nama alat tersebut, dengan meneruskan
inputalat. - Melanjutkan percakapan dengan mengirim pesan baru dengan
roleberupauser, dan blokcontentyang berisi tipetool_resultserta informasi berikut:tool_use_id:iddari permintaan penggunaan alat yang menjadi tujuan hasil ini.content(opsional): Hasil dari alat, sebagai string (misalnya,"content": "15 degrees"), daftar blok konten bersarang (misalnya,"content": [{"type": "text", "text": "15 degrees"}]), atau daftar blok dokumen (misalnya,"content": [{"type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}}]). Blok konten ini dapat menggunakan tipetext,image,document, atausearch_result.is_error(opsional): Atur ketruejika eksekusi alat menghasilkan error.
tool_result yang menjawab blok anggota computer use atau browser use juga harus menggemakan nilai toolset_name yang sama dengan blok tool_use; hasil anggota yang menghilangkannya akan ditolak. content-nya juga lebih sempit: hasil anggota hanya boleh berisi blok text dan image, dan hasil browser use dapat menambahkan satu blok browser_state (anggota manajemen tab hanya mengembalikan blok tersebut).
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "15 degrees"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "15 degrees" },
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "/9j/4AAQSkZJRg..."
}
}
]
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9"
}
]
}{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": [
{ "type": "text", "text": "The weather is" },
{
"type": "document",
"source": {
"type": "text",
"media_type": "text/plain",
"data": "15 degrees"
}
}
]
}
]
}Setelah menerima hasil alat, Claude akan menggunakan informasi tersebut untuk melanjutkan menghasilkan respons terhadap prompt pengguna yang asli.
Menangani hasil dari alat server
Claude mengeksekusi alat secara internal dan menggabungkan hasilnya langsung ke dalam responsnya tanpa memerlukan interaksi pengguna tambahan.
Menangani error dengan is_error
Ada beberapa jenis error berbeda yang dapat terjadi saat menggunakan alat dengan Claude:
Jika alat itu sendiri melempar error selama eksekusi (misalnya, error jaringan saat mengambil data cuaca), Anda dapat mengembalikan pesan error dalam content bersama dengan "is_error": true:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "ConnectionError: the weather service API is not available (HTTP 500)",
"is_error": true
}
]
}Claude kemudian akan menggabungkan error ini ke dalam responsnya kepada pengguna. Misalnya: "Maaf, saya tidak dapat mengambil cuaca saat ini karena API layanan cuaca tidak tersedia. Silakan coba lagi nanti."
Jika upaya Claude menggunakan alat tidak valid (misalnya, parameter wajib tidak ada), biasanya itu berarti tidak ada cukup informasi bagi Claude untuk menggunakan alat dengan benar. Pilihan terbaik Anda selama pengembangan adalah mencoba permintaan lagi dengan nilai description yang lebih detail dalam definisi alat Anda.
Namun, Anda juga dapat melanjutkan percakapan dengan tool_result yang menunjukkan error tersebut, dan Claude akan mencoba menggunakan alat lagi dengan informasi yang hilang telah diisi:
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01A09q90qw90lq917835lq9",
"content": "Error: Missing required 'location' parameter",
"is_error": true
}
]
}Jika permintaan alat tidak valid atau parameternya tidak ada, Claude akan mencoba ulang 2-3 kali dengan koreksi sebelum meminta maaf kepada pengguna.
Ketika alat server mengalami error (misalnya, masalah jaringan dengan Web Search), Claude akan menangani error ini secara transparan dan berupaya memberikan respons alternatif atau penjelasan kepada pengguna. Tidak seperti alat klien, Anda tidak perlu menangani hasil is_error untuk alat server.
Khusus untuk pencarian web, kode error yang mungkin muncul meliputi:
too_many_requests: Batas laju terlampauiinvalid_input: Parameter kueri pencarian tidak validmax_uses_exceeded: Jumlah maksimum penggunaan alat pencarian web terlampauiquery_too_long: Kueri melebihi panjang maksimumunavailable: Terjadi error internal
Langkah selanjutnya
Tangani respons di mana Claude memanggil beberapa alat dalam satu giliran.
Biarkan SDK mengelola loop tool_use, pemformatan hasil, dan percobaan ulang untuk Anda.
Tulis skema dan deskripsi yang mengarahkan Claude ke alat yang tepat.
Was this page helpful?