Contoh penggunaan alat
Berikut adalah beberapa contoh kode yang menunjukkan berbagai pola dan teknik penggunaan alat. Demi singkatnya, alat-alat tersebut adalah alat sederhana, dan deskripsi alat lebih singkat daripada yang ideal untuk memastikan kinerja terbaik. Lihat menentukan alat untuk informasi lebih lanjut.
Alat tunggal
Contoh ini menunjukkan situasi alat tunggal dasar, menggunakan alat get_weather
.
Claude akan mengembalikan respons serupa dengan:
{
"id": "msg_01Aq9w938a90dw8q",
"model": "claude-3-opus-20240229",
"stop_reason": "tool_use",
"role": "assistant",
"content": [
{
"type": "text",
"text": "<thinking>Saya perlu memanggil fungsi get_weather, dan pengguna menginginkan SF, yang mungkin San Francisco, CA.</thinking>"
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "San Francisco, CA", "unit": "celsius"}
}
]
}
Anda kemudian perlu menjalankan fungsi get_weather
dengan input yang diberikan, dan mengembalikan hasilnya dalam pesan user
baru:
Ini akan mencetak respons akhir Claude, menggabungkan data cuaca:
{
"id": "msg_01Aq9w938a90dw8q",
"model": "claude-3-opus-20240229",
"stop_reason": "stop_sequence",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Cuaca saat ini di San Francisco adalah 15 derajat Celsius (59 derajat Fahrenheit). Hari yang sejuk di kota dekat teluk!"
}
]
}
Informasi yang hilang
Jika prompt pengguna tidak menyertakan cukup informasi untuk mengisi semua parameter yang diperlukan untuk alat, Claude 3 Opus lebih mungkin mengenali bahwa parameter hilang dan memintanya. Claude 3 Sonnet mungkin bertanya, terutama ketika diminta untuk berpikir sebelum mengeluarkan permintaan alat. Tetapi ia juga mungkin melakukan yang terbaik untuk menyimpulkan nilai yang masuk akal.
Misalnya, menggunakan alat get_weather
di atas, jika Anda bertanya kepada Claude “Bagaimana cuacanya?” tanpa menentukan lokasi, Claude, khususnya Claude 3 Sonnet, mungkin menebak input alat:
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "New York, NY", "unit": "fahrenheit"}
}
Perilaku ini tidak dijamin, terutama untuk prompt yang lebih ambigu dan untuk model yang kurang cerdas daripada Claude 3 Opus. Jika Claude 3 Opus tidak memiliki konteks yang cukup untuk mengisi parameter yang diperlukan, ia jauh lebih mungkin merespons dengan pertanyaan klarifikasi daripada membuat panggilan alat.
Beberapa alat
Anda dapat memberikan Claude beberapa alat untuk dipilih dalam satu permintaan. Berikut adalah contoh dengan alat get_weather
dan get_time
, bersama dengan kueri pengguna yang meminta keduanya.
Dalam hal ini, Claude kemungkinan besar akan mencoba menggunakan dua alat terpisah, satu per satu — get_weather
dan kemudian get_time
— untuk sepenuhnya menjawab pertanyaan pengguna. Namun, ia juga terkadang akan mengeluarkan dua blok tool_use
sekaligus, terutama jika keduanya tidak saling bergantung. Anda perlu menjalankan setiap alat dan mengembalikan hasilnya dalam blok tool_result
terpisah dalam satu pesan user
.
Alat berurutan
Beberapa tugas mungkin memerlukan pemanggilan beberapa alat secara berurutan, menggunakan output dari satu alat sebagai input untuk alat lain. Dalam kasus seperti itu, Claude akan memanggil satu alat pada satu waktu. Jika diminta untuk memanggil semua alat sekaligus, Claude cenderung menebak parameter untuk alat yang lebih jauh ke hilir jika mereka bergantung pada hasil alat untuk alat yang lebih jauh ke hulu.
Berikut adalah contoh menggunakan alat get_location
untuk mendapatkan lokasi pengguna, kemudian meneruskan lokasi itu ke alat get_weather
:
Dalam hal ini, Claude pertama-tama akan memanggil alat get_location
untuk mendapatkan lokasi pengguna. Setelah Anda mengembalikan lokasi dalam tool_result
, Claude kemudian akan memanggil get_weather
dengan lokasi itu untuk mendapatkan jawaban akhir.
Percakapan lengkapnya mungkin terlihat seperti:
Peran | Konten |
---|---|
Pengguna | Bagaimana cuaca di tempat saya? |
Asisten | <thinking>Untuk menjawab ini, saya pertama-tama perlu menentukan lokasi pengguna menggunakan alat get_location. Kemudian saya dapat meneruskan lokasi itu ke alat get_weather untuk menemukan cuaca saat ini di sana.</thinking>[Penggunaan alat untuk get_location] |
Pengguna | [Hasil alat untuk get_location dengan id yang cocok dan hasil San Francisco, CA] |
Asisten | [Penggunaan alat untuk get_weather dengan input berikut]{ “location”: “San Francisco, CA”, “unit”: “fahrenheit” } |
Pengguna | [Hasil alat untuk get_weather dengan id yang cocok dan hasil “59°F (15°C), sebagian besar berawan”] |
Asisten | Berdasarkan lokasi Anda saat ini di San Francisco, CA, cuaca saat ini adalah 59°F (15°C) dan sebagian besar berawan. Hari yang cukup sejuk dan mendung di kota. Anda mungkin ingin membawa jaket ringan jika Anda akan keluar. |
Contoh ini menunjukkan bagaimana Claude dapat menggabungkan beberapa panggilan alat untuk menjawab pertanyaan yang memerlukan pengumpulan data dari sumber yang berbeda. Langkah-langkah utamanya adalah:
- Claude pertama-tama menyadari bahwa ia membutuhkan lokasi pengguna untuk menjawab pertanyaan cuaca, jadi ia memanggil alat
get_location
. - Pengguna (yaitu kode klien) menjalankan fungsi
get_location
yang sebenarnya dan mengembalikan hasil “San Francisco, CA” dalam bloktool_result
. - Dengan lokasi yang sekarang diketahui, Claude melanjutkan untuk memanggil alat
get_weather
, meneruskan “San Francisco, CA” sebagai parameterlocation
(serta parameterunit
yang ditebak, karenaunit
bukan parameter yang diperlukan). - Pengguna sekali lagi menjalankan fungsi
get_weather
yang sebenarnya dengan argumen yang diberikan dan mengembalikan data cuaca dalam bloktool_result
lain. - Akhirnya, Claude memasukkan data cuaca ke dalam respons bahasa alami untuk pertanyaan asli.
Penggunaan alat rantai pemikiran
Secara default, Claude 3 Opus diminta untuk berpikir sebelum menjawab kueri penggunaan alat untuk menentukan dengan baik apakah alat diperlukan, alat mana yang akan digunakan, dan parameter yang sesuai. Claude 3 Sonnet dan Claude 3 Haiku diminta untuk mencoba menggunakan alat sebanyak mungkin dan lebih mungkin memanggil alat yang tidak perlu atau menyimpulkan parameter yang hilang. Untuk meminta Sonnet atau Haiku untuk menilai kueri pengguna dengan lebih baik sebelum melakukan panggilan alat, prompt berikut dapat digunakan:
Prompt rantai pemikiran
Jawab permintaan pengguna menggunakan alat yang relevan (jika tersedia). Sebelum memanggil alat, lakukan beberapa analisis dalam tag \<thinking>\</thinking>. Pertama, pikirkan alat mana dari alat yang disediakan yang relevan untuk menjawab permintaan pengguna. Kedua, periksa setiap parameter yang diperlukan dari alat yang relevan dan tentukan apakah pengguna telah secara langsung memberikan atau memberikan cukup informasi untuk menyimpulkan nilai. Saat memutuskan apakah parameter dapat disimpulkan, pertimbangkan dengan cermat semua konteks untuk melihat apakah itu mendukung nilai tertentu. Jika semua parameter yang diperlukan ada atau dapat disimpulkan dengan wajar, tutup tag pemikiran dan lanjutkan dengan panggilan alat. TETAPI, jika salah satu nilai untuk parameter yang diperlukan hilang, JANGAN memanggil fungsi (bahkan tidak dengan pengisi untuk param yang hilang) dan sebaliknya, minta pengguna untuk memberikan parameter yang hilang. JANGAN meminta informasi lebih lanjut tentang parameter opsional jika tidak disediakan.
Mode JSON
Anda dapat menggunakan alat untuk membuat Claude menghasilkan output JSON yang mengikuti skema, bahkan jika Anda tidak bermaksud menjalankan output itu melalui alat atau fungsi.
Saat menggunakan alat dengan cara ini:
- Anda biasanya ingin menyediakan satu alat
- Anda harus mengatur
tool_choice
(lihat Memaksa penggunaan alat) untuk menginstruksikan model agar secara eksplisit menggunakan alat itu - Ingat bahwa model akan meneruskan
input
ke alat, jadi nama alat dan deskripsi harus dari perspektif model.
Berikut ini menggunakan alat record_summary
untuk mendeskripsikan gambar mengikuti format tertentu.