Alat pencarian alat memungkinkan Claude bekerja dengan ratusan atau ribuan alat dengan menemukan dan memuatnya sesuai permintaan. Alih-alih memuat semua definisi alat ke dalam "context window" (jendela konteks) di awal, Claude mencari katalog alat Anda (termasuk nama alat, deskripsi, nama argumen, dan deskripsi argumen) dan memuat hanya alat yang dibutuhkannya.
Memuat setiap definisi alat di awal menyebabkan dua masalah seiring bertambahnya pustaka alat:
Pencarian alat tersedia secara umum di Claude API. Untuk model yang didukung, lihat Kompatibilitas model.
Untuk latar belakang tentang tantangan penskalaan yang diselesaikan oleh pencarian alat, lihat Advanced tool use. Pemuatan sesuai permintaan pada pencarian alat juga merupakan contoh dari prinsip pengambilan just-in-time yang lebih luas yang dijelaskan dalam Effective context engineering.
Pencarian alat berjalan sebagai alat sisi server, tetapi Anda juga dapat mengimplementasikan pencarian alat sisi klien Anda sendiri. Lihat Implementasi pencarian alat kustom untuk detailnya.
Bagikan umpan balik tentang fitur ini melalui formulir umpan balik.
Fitur ini memenuhi syarat untuk Zero Data Retention (ZDR). Ketika organisasi Anda memiliki pengaturan ZDR, data yang dikirim melalui fitur ini tidak disimpan setelah respons API dikembalikan.
Di Amazon Bedrock, pencarian alat sisi server hanya tersedia melalui InvokeModel API, bukan Converse API.
Di Claude Platform on AWS, pencarian alat sisi server bekerja secara identik dengan Claude API. Claude Platform on AWS menggunakan Anthropic Messages API secara langsung, sehingga tidak ada perbedaan antara InvokeModel atau Converse.
Kedua varian pencarian alat tersedia pada model berikut:
| Model | Versi alat |
|---|---|
| Claude Fable 5 (claude-fable-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Mythos 5 (claude-mythos-5) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.8 (claude-opus-4-8) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.7 (claude-opus-4-7) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.6 (claude-opus-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.6 (claude-sonnet-4-6) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Opus 4.5 (claude-opus-4-5-20251101) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
| Claude Haiku 4.5 (claude-haiku-4-5-20251001) | tool_search_tool_regex_20251119, tool_search_tool_bm25_20251119 |
Claude Opus 4.1 dan model sebelumnya tidak mendukung alat pencarian alat.
Ada dua varian pencarian alat:
tool_search_tool_regex_20251119): Claude menyusun pola regex untuk mencari alat.tool_search_tool_bm25_20251119): Claude menggunakan kueri bahasa alami untuk mencari alat.Ketika Anda mengaktifkan alat pencarian alat:
tool_search_tool_regex_20251119 atau tool_search_tool_bm25_20251119) dalam daftar tools Anda.tools dan mengatur defer_loading: true pada alat yang tidak boleh dimuat di awal. Setidaknya satu alat, biasanya alat pencarian alat itu sendiri, harus tetap non-deferred.tool_reference (hingga 5 secara default).Contoh berikut menyertakan alat pencarian alat dan dua alat deferred:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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)Claude mencari katalog, menemukan get_weather, dan memanggilnya. Respons berakhir dengan stop_reason: "tool_use". Jalankan alat yang ditemukan dan kembalikan tool_result seperti dalam Menangani panggilan alat. Format respons menunjukkan blok yang Anda dapatkan kembali dan apa yang harus dikirim selanjutnya.
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
Dengan tool_search_tool_regex_20251119, Claude menulis pola re.search() Python, bukan kueri bahasa alami. Pencocokan tidak peka huruf besar-kecil. Pola umum mencakup hal berikut:
"weather": mencocokkan nama dan deskripsi alat yang mengandung "weather""get_.*_data": mencocokkan alat seperti get_user_data dan get_weather_data"database.*query|query.*database": mencocokkan kedua urutan kataPanjang pola maksimum: 200 karakter
Format kueri varian BM25: bahasa alami
Dengan tool_search_tool_bm25_20251119, Claude mencari dengan kueri bahasa alami. Panjang kueri maksimum: 500 karakter.
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
}defer_loading mengontrol apa yang masuk ke jendela konteks, bukan apa yang Anda kirim dalam permintaan:
tools pada setiap permintaan, termasuk yang deferred. API membutuhkannya di sisi server untuk menjalankan pencarian dan memperluas blok tool_reference.defer_loading dimuat ke konteks segera.defer_loading: true dimuat hanya ketika Claude menemukannya melalui pencarian.defer_loading: true pada alat pencarian alat itu sendiri.Kedua varian pencarian alat (regex dan bm25) mencari nama alat, deskripsi, nama argumen, dan deskripsi argumen.
Secara internal, API mengecualikan alat deferred dari prefiks prompt sistem. Ketika Claude menemukan alat deferred melalui pencarian alat, API menambahkan blok tool_reference secara inline dalam percakapan, lalu memperluasnya menjadi definisi alat lengkap sebelum meneruskannya ke Claude. Prefiks tidak tersentuh, sehingga caching prompt tetap terjaga. Tata bahasa untuk mode ketat (aturan yang membatasi output panggilan alat agar sesuai dengan skema Anda) dibangun dari keseluruhan kumpulan alat, sehingga defer_loading dan mode ketat dapat digabungkan tanpa kompilasi ulang tata bahasa.
Ketika Claude menggunakan alat pencarian alat, respons menyertakan tipe blok berikut:
{
"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": {
"pattern": "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: panggilan Claude ke alat pencarian alat. Pencarian berjalan di server Anthropic. Jangan pernah mengembalikan tool_result untuk ID srvtoolu_...-nya.tool_search_tool_result: hasil pencarian, dalam objek tool_search_tool_search_result bersarang. Simpan dalam riwayat pesan apa adanya.tool_references: array objek tool_reference yang menunjuk ke alat yang ditemukan. API memperluas ini untuk Claude. Anda tidak pernah memperluasnya sendiri.tool_use: panggilan Claude ke alat yang ditemukan. Jalankan dan kembalikan tool_result persis seperti dalam penggunaan alat standar.API secara otomatis memperluas blok tool_reference menjadi definisi alat lengkap sebelum menampilkannya ke Claude. Anda tidak perlu menangani perluasan ini sendiri, selama Anda menyediakan semua definisi alat yang cocok dalam parameter tools.
Pada permintaan berikutnya, kirimkan kembali konten asisten tanpa perubahan, termasuk blok server_tool_use dan tool_search_tool_result. Tambahkan tool_result Anda untuk alat yang ditemukan dalam pesan pengguna, dan kirim array tools yang sama: alat pencarian ditambah setiap definisi deferred. Jangan mengembalikan tool_result untuk ID srvtoolu_...: API akan menolak permintaan tersebut. API memperluas blok tool_reference di seluruh riwayat percakapan, sehingga Claude dapat menggunakan kembali alat yang ditemukan di giliran berikutnya tanpa mencari ulang. Pencarian yang tidak menemukan apa pun mengembalikan tool_search_tool_search_result dengan array tool_references kosong, bukan error.
Jika alat Anda berasal dari server MCP melalui konektor MCP, Anda tidak mengatur defer_loading pada definisi alat individual. Sebagai gantinya, atur sekali pada default_config entri mcp_toolset untuk seluruh server, atau per alat dalam configs-nya. Lihat Konfigurasi toolset MCP.
Anda dapat mengimplementasikan logika pencarian alat Anda sendiri (misalnya, menggunakan embeddings atau pencarian semantik) dengan mengembalikan blok tool_reference dari alat kustom. Ketika Claude memanggil alat pencarian kustom 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, biasanya dengan defer_loading: true. Ini memungkinkan Anda menggunakan metode pencarian yang tidak disediakan oleh varian bawaan, seperti pengambilan berbasis embedding, dan API memperluas blok tool_reference yang dikembalikan dengan cara yang sama.
Format tool_search_tool_result yang ditunjukkan di bagian Format respons adalah format sisi server yang digunakan secara internal oleh pencarian alat bawaan Anthropic. Untuk implementasi sisi klien kustom, selalu gunakan format tool_result standar dengan blok konten tool_reference seperti yang ditunjukkan dalam contoh sebelumnya.
Untuk contoh lengkap menggunakan embeddings, lihat resep pencarian alat dengan embeddings.
Contoh penggunaan alat
bekerja dengan pencarian alat: ketika Claude menemukan alat deferred, API memperluas
input_examples-nya bersama dengan definisinya.
Error ini mencegah API memproses permintaan:
Semua alat deferred:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Definisi alat tidak ada:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Ketika operasi pencarian alat gagal selama eksekusi, API mengembalikan respons 200 dengan error di dalam body:
{
"type": "tool_search_tool_result",
"tool_use_id": "srvtoolu_01ABC123",
"content": {
"type": "tool_search_tool_result_error",
"error_code": "invalid_tool_input",
"error_message": "Invalid regular expression pattern: missing ) at position 1"
}
}Field error_code memiliki empat nilai yang mungkin:
invalid_tool_input: input pencarian tidak valid, misalnya pola regex yang salah format atau pola yang melebihi batas 200 karakterunavailable: pencarian tidak dapat dijalankan, misalnya karena waktu habis atau layanan tidak tersediatoo_many_requests: batas laju terlampaui untuk operasi pencarian alatexecution_time_exceeded: pencarian melebihi batas waktu eksekusinyaUntuk mengetahui bagaimana defer_loading menjaga caching prompt, lihat Penggunaan alat dengan caching prompt.
Alat dengan defer_loading: true tidak dapat juga membawa cache_control: API mengembalikan 400. Tempatkan breakpoint cache pada alat non-deferred.
Dengan streaming diaktifkan, Anda akan menerima event pencarian alat sebagai bagian dari stream:
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 pattern streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"pattern\":\"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.
defer_loading: true per permintaanGunakan pencarian alat ketika salah satu dari hal berikut berlaku:
Pemanggilan alat standar, tanpa pencarian alat, lebih cocok ketika Anda memiliki kurang dari 10 alat, setiap alat digunakan dalam setiap permintaan, atau definisi alat Anda kecil (kurang dari 100 token total).
github_, slack_) sehingga satu pencarian mencocokkan seluruh grup.Pencarian alat tidak diukur sebagai alat server terpisah. Objek usage.server_tool_use dalam respons tidak memiliki field pencarian alat, dan definisi alat yang dimuat pencarian ke dalam konteks dihitung sebagai token input seperti definisi alat lainnya.
Biarkan Claude menyimpan dan mengambil informasi di seluruh percakapan dengan mengimplementasikan operasi file alat memori dalam aplikasi Anda.
Direktori alat yang disediakan Anthropic dan referensi untuk properti definisi alat opsional.
Konfigurasikan toolset MCP dengan pemuatan yang ditangguhkan.
Cache definisi alat di seluruh giliran dan pahami apa yang membatalkan cache Anda.
Tentukan skema alat, tulis deskripsi yang efektif, dan kontrol kapan Claude memanggil alat Anda.
Was this page helpful?