Tool search tool (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 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:
Tool search tersedia secara umum di Claude API. Untuk model yang didukung, lihat Kompatibilitas model.
Untuk latar belakang tentang tantangan penskalaan yang diselesaikan oleh tool search, lihat Advanced tool use. Pemuatan sesuai permintaan dari tool search juga merupakan contoh dari prinsip pengambilan just-in-time yang lebih luas yang dijelaskan dalam Effective context engineering.
Tool search berjalan sebagai alat sisi server, tetapi Anda juga dapat mengimplementasikan tool search sisi klien Anda sendiri. Lihat Implementasi tool search kustom untuk detailnya.
Bagikan umpan balik tentang fitur ini melalui formulir umpan balik.
Untuk mengetahui bagaimana zero data retention (ZDR) berlaku pada fitur ini, lihat API dan retensi data.
Di Amazon Bedrock, tool search sisi server hanya tersedia melalui InvokeModel API, bukan Converse API.
Di Claude Platform on AWS, tool search sisi server bekerja identik dengan Claude API. Claude Platform on AWS menggunakan Anthropic Messages API secara langsung, sehingga tidak ada perbedaan InvokeModel atau Converse.
Kedua varian tool search tersedia pada model-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 5 (claude-opus-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-model sebelumnya tidak mendukung tool search tool.
Ada dua varian tool search:
tool_search_tool_regex_20251119): Claude membangun pola regex untuk mencari alat.tool_search_tool_bm25_20251119): Claude menggunakan kueri bahasa alami untuk mencari alat.Ketika Anda mengaktifkan tool search tool:
tool_search_tool_regex_20251119 atau tool_search_tool_bm25_20251119) dalam daftar tools Anda.tools dan menyetel defer_loading: true pada alat yang tidak boleh dimuat di awal. Setidaknya satu alat, biasanya tool search tool itu sendiri, harus tetap non-deferred.tool_reference (hingga 5 secara default).Contoh berikut menyertakan tool search tool dan dua alat yang ditangguhkan (deferred):
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
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.
Tool search tool 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 meliputi yang berikut:
"weather": mencocokkan nama alat dan deskripsi 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 ditangguhkan. API membutuhkannya di sisi server untuk menjalankan pencarian dan memperluas blok tool_reference.defer_loading dimuat ke dalam konteks segera.defer_loading: true dimuat hanya ketika Claude menemukannya melalui pencarian.defer_loading: true pada tool search tool itu sendiri.Kedua varian tool search (regex dan bm25) mencari nama alat, deskripsi, nama argumen, dan deskripsi argumen.
Secara internal, API mengecualikan alat yang ditangguhkan dari prefiks prompt sistem. Ketika Claude menemukan alat yang ditangguhkan melalui tool search, 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. Grammar untuk strict mode (aturan yang membatasi output panggilan alat agar sesuai dengan skema Anda) dibangun dari toolset lengkap, sehingga defer_loading dan strict mode dapat digabungkan tanpa kompilasi ulang grammar.
Ketika Claude menggunakan tool search tool, 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 tool search tool. 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. Pertahankan 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, teruskan 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 yang ditangguhkan. Jangan mengembalikan tool_result untuk ID srvtoolu_...: API 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 MCP connector, Anda tidak menyetel defer_loading pada definisi alat individual. Sebagai gantinya, setel sekali pada default_config entri mcp_toolset untuk seluruh server, atau per alat dalam configs-nya. Lihat Konfigurasi toolset MCP.
Anda dapat mengimplementasikan logika tool search Anda sendiri (misalnya, menggunakan embedding 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 tool search bawaan Anthropic. Untuk implementasi sisi klien kustom, selalu gunakan format tool_result standar dengan blok konten tool_reference seperti yang ditunjukkan pada contoh sebelumnya.
Untuk contoh lengkap menggunakan embedding, lihat resep tool search dengan embedding.
Contoh penggunaan alat
bekerja dengan tool search: ketika Claude menemukan alat yang ditangguhkan, API memperluas
input_examples-nya bersama dengan definisinya.
Error ini mencegah API memproses permintaan:
Semua alat ditangguhkan:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "At least one tool must have defer_loading=false. All tools cannot be deferred."
}
}Definisi alat hilang:
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "Tool reference 'unknown_tool' not found in available tools"
}
}Ketika operasi tool search 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 bentuk atau pola yang melebihi batas 200 karakterunavailable: pencarian tidak dapat berjalan, misalnya karena waktu habis atau layanan tidak tersediatoo_many_requests: batas laju terlampaui untuk operasi tool searchexecution_time_exceeded: pencarian melebihi batas waktu eksekusinyaUntuk cara defer_loading mempertahankan caching prompt, lihat Penggunaan alat dengan caching prompt.
Alat dengan defer_loading: true tidak dapat juga membawa cache_control: API mengembalikan 400. Letakkan breakpoint cache pada alat non-deferred.
Dengan streaming diaktifkan, Anda akan menerima event tool search 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 tool search tool dalam Messages Batches API.
defer_loading: true per permintaanGunakan tool search ketika salah satu dari hal berikut berlaku:
Pemanggilan alat standar, tanpa tool search, 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.Tool search tidak diukur sebagai alat server terpisah. Objek usage.server_tool_use pada respons tidak memiliki field tool search, dan definisi alat yang dimuat oleh pencarian ke dalam konteks dihitung sebagai input_tokens seperti definisi alat lainnya.
Biarkan Claude menyimpan dan mengambil informasi di seluruh percakapan dengan mengimplementasikan operasi file memory tool di 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?