Was this page helpful?
Alat pencarian alat memungkinkan Claude untuk bekerja dengan ratusan atau ribuan alat dengan secara dinamis menemukan dan memuat mereka sesuai permintaan. Alih-alih memuat semua definisi alat ke jendela konteks di awal, Claude mencari katalog alat Anda (termasuk nama alat, deskripsi, nama argumen, dan deskripsi argumen) dan memuat hanya alat yang dibutuhkannya.
Pendekatan ini menyelesaikan dua masalah yang berkembang pesat seiring dengan skala perpustakaan alat:
Untuk latar belakang tantangan penskalaan yang diselesaikan oleh pencarian alat, lihat Penggunaan alat tingkat lanjut. Pemuatan sesuai permintaan pencarian alat juga merupakan contoh dari prinsip pengambilan just-in-time yang lebih luas yang dijelaskan dalam Rekayasa konteks yang efektif.
Meskipun ini disediakan sebagai alat sisi server, Anda juga dapat menerapkan fungsionalitas pencarian alat sisi klien Anda sendiri. Lihat Implementasi pencarian alat khusus untuk detail.
Bagikan umpan balik tentang fitur ini melalui formulir umpan balik.
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
Di Amazon Bedrock, pencarian alat sisi server hanya tersedia melalui API invoke, bukan API converse.
Anda juga dapat menerapkan pencarian alat sisi klien dengan mengembalikan blok tool_reference dari implementasi pencarian Anda sendiri.
Ada dua varian pencarian alat:
tool_search_tool_regex_20251119): Claude membuat pola regex untuk mencari alattool_search_tool_bm25_20251119): Claude menggunakan kueri bahasa alami untuk mencari alatKetika Anda mengaktifkan alat pencarian alat:
tool_search_tool_regex_20251119 atau tool_search_tool_bm25_20251119) dalam daftar alat Andadefer_loading: true untuk alat yang tidak boleh dimuat segeratool_reference paling relevanIni menjaga jendela konteks Anda tetap efisien sambil mempertahankan akurasi pemilihan alat yang tinggi.
Berikut adalah contoh sederhana dengan alat yang ditangguhkan:
Alat pencarian alat memiliki dua varian:
{
"type": "tool_search_tool_regex_20251119",
"name": "tool_search_tool_regex"
}{
"type": "tool_search_tool_bm25_20251119",
"name": "tool_search_tool_bm25"
}Format kueri varian Regex: Regex Python, BUKAN bahasa alami
Saat menggunakan tool_search_tool_regex_20251119, Claude membuat pola regex menggunakan sintaks re.search() Python, bukan kueri bahasa alami. Pola umum:
"weather" - cocok dengan nama alat/deskripsi yang berisi "weather""get_.*_data" - cocok dengan alat seperti get_user_data, get_weather_data"database.*query|query.*database" - pola OR untuk fleksibilitas"(?i)slack" - pencarian tidak peka huruf besar-kecilPanjang kueri maksimal: 200 karakter
Format kueri varian BM25: Bahasa alami
Saat menggunakan tool_search_tool_bm25_20251119, Claude menggunakan kueri bahasa alami untuk mencari alat.
Tandai alat untuk pemuatan sesuai permintaan dengan menambahkan defer_loading: true:
{
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {
"location": { "type": "string" },
"unit": { "type": "string", "enum": ["celsius", "fahrenheit"] }
},
"required": ["location"]
},
"defer_loading": true
}Poin kunci:
defer_loading dimuat ke konteks segeradefer_loading: true hanya dimuat ketika Claude menemukannya melalui pencariandefer_loading: trueKedua varian pencarian alat (regex dan bm25) mencari nama alat, deskripsi, nama argumen, dan deskripsi argumen.
Cara penundaan bekerja secara internal: Alat yang ditangguhkan tidak disertakan dalam awalan system-prompt. Ketika model menemukan alat yang ditangguhkan melalui pencarian alat, definisi alat ditambahkan secara inline sebagai blok tool_reference dalam percakapan. Awalan tidak tersentuh, sehingga caching prompt dipertahankan. Tata bahasa untuk mode ketat dibangun dari set alat lengkap, jadi defer_loading dan mode ketat bersusun tanpa kompilasi ulang tata bahasa.
Ketika Claude menggunakan alat pencarian alat, respons mencakup jenis blok baru:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll search for tools to help with the weather information."
},
{
"type": "server_tool_use",
"id": "srvtoolu_01ABC123",
"name": "tool_search_tool_regex",
"input": {
"query": "weather"
}
},
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_search_result",
"tool_references": [{ "type": "tool_reference", "tool_name": "get_weather" }]
}
},
{
"type": "text",
"text": "I found a weather tool. Let me get the weather for San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01XYZ789",
"name": "get_weather",
"input": { "location": "San Francisco", "unit": "fahrenheit" }
}
],
"stop_reason": "tool_use"
}server_tool_use: Menunjukkan Claude menginvokan alat pencarian alattool_search_tool_result: Berisi hasil pencarian dengan objek tool_search_tool_search_result bersarangtool_references: Array objek tool_reference yang menunjuk ke alat yang ditemukantool_use: Claude menginvokan alat yang ditemukanBlok tool_reference secara otomatis diperluas menjadi definisi alat lengkap sebelum ditampilkan kepada Claude. Anda tidak perlu menangani ekspansi ini sendiri. Ini terjadi secara otomatis di API selama Anda menyediakan semua definisi alat yang cocok dalam parameter tools.
Untuk mengonfigurasi mcp_toolset dengan defer_loading, lihat Konektor MCP.
Anda dapat menerapkan logika pencarian alat Anda sendiri (misalnya, menggunakan embeddings atau pencarian semantik) dengan mengembalikan blok tool_reference dari alat khusus. Ketika Claude memanggil alat pencarian khusus Anda, kembalikan tool_result standar dengan blok tool_reference dalam array konten:
{
"type": "tool_result",
"tool_use_id": "toolu_your_tool_id",
"content": [{ "type": "tool_reference", "tool_name": "discovered_tool_name" }]
}Setiap alat yang direferensikan harus memiliki definisi alat yang sesuai dalam parameter tools tingkat atas dengan defer_loading: true. Pendekatan ini memungkinkan Anda menggunakan algoritma pencarian yang lebih canggih sambil mempertahankan kompatibilitas dengan sistem pencarian alat.
Format tool_search_tool_result yang ditunjukkan dalam bagian Format respons adalah format sisi server yang digunakan secara internal oleh pencarian alat bawaan Anthropic. Untuk implementasi sisi klien khusus, selalu gunakan format tool_result standar dengan blok konten tool_reference seperti yang ditunjukkan di atas.
Untuk contoh lengkap menggunakan embeddings, lihat cookbook pencarian alat dengan embeddings.
Alat pencarian alat tidak kompatibel dengan contoh penggunaan alat. Jika Anda perlu memberikan contoh penggunaan alat, gunakan pemanggilan alat standar tanpa pencarian alat.
Kesalahan ini mencegah permintaan diproses:
Semua alat ditangguhkan:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "All tools have defer_loading set. At least one tool must be non-deferred."
}
}Definisi alat yang hilang:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' has no corresponding tool definition"
}
}Kesalahan selama eksekusi alat mengembalikan respons 200 dengan informasi kesalahan dalam badan:
{
"type": "tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_pattern"
}
}Kode kesalahan:
too_many_requests: Batas laju terlampaui untuk operasi pencarian alatinvalid_pattern: Pola regex yang salah formatpattern_too_long: Pola melebihi batas 200 karakterunavailable: Layanan pencarian alat sementara tidak tersediaUntuk cara defer_loading menjaga caching prompt, lihat Penggunaan alat dengan caching prompt.
Sistem secara otomatis memperluas blok tool_reference di seluruh riwayat percakapan lengkap, sehingga Claude dapat menggunakan kembali alat yang ditemukan dalam giliran berikutnya tanpa pencarian ulang.
Dengan streaming diaktifkan, Anda akan menerima acara pencarian alat sebagai bagian dari aliran:
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "tool_search_tool_regex"}}
// Search query streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"weather\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "tool_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": {"type": "tool_search_tool_search_result", "tool_references": [{"type": "tool_reference", "tool_name": "get_weather"}]}}}
// Claude continues with discovered toolsAnda dapat menyertakan alat pencarian alat dalam Messages Batches API. Operasi pencarian alat melalui Messages Batches API dihargai sama dengan operasi dalam permintaan Messages API reguler.
Pencarian alat sisi server (alat tool_search) mengindeks dan menyimpan data katalog alat (nama alat, deskripsi, dan metadata argumen) di luar respons API segera; data katalog ini disimpan sesuai dengan kebijakan retensi standar Anthropic. Implementasi pencarian alat sisi klien khusus yang menggunakan Messages API standar sepenuhnya memenuhi syarat ZDR.
Untuk kelayakan ZDR di semua fitur, lihat API dan retensi data.
Kasus penggunaan yang baik:
Kapan pemanggilan alat tradisional mungkin lebih baik:
github_, slack_) sehingga kueri pencarian secara alami menampilkan grup alat yang tepatPenggunaan alat pencarian alat dilacak dalam objek penggunaan respons:
{
"usage": {
"input_tokens": 1024,
"output_tokens": 256,
"server_tool_use": {
"tool_search_requests": 2
}
}
}client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=2048,
messages=[{"role": "user", "content": "What is the weather in San Francisco?"}],
tools=[
{"type": "tool_search_tool_regex_20251119", "name": "tool_search_tool_regex"},
{
"name": "get_weather",
"description": "Get the weather at a specific location",
"input_schema": {
"type": "object",
"properties": {
"location": {"type": "string"},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
},
"required": ["location"],
},
"defer_loading": True,
},
{
"name": "search_files",
"description": "Search through files in the workspace",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string"},
"file_types": {"type": "array", "items": {"type": "string"}},
},
"required": ["query"],
},
"defer_loading": True,
},
],
)
print(response)Panduan langkah demi langkah untuk mendefinisikan alat.