Tool use / function calling — model yang bisa memanggil kodemu
Model bahasa tidak bisa mengecek cuaca hari ini atau saldo rekeningmu — pengetahuannya beku sejak training. Tool use adalah jembatan: model 'meminta' kodemu menjalankan fungsi, lalu memakai hasilnya.
Intisari
- Model tidak menjalankan kode apa pun. Ia hanya memutuskan tool mana yang harus dipanggil dan dengan argumen apa — aplikasimu yang benar-benar mengeksekusi fungsinya.
- Alurnya selalu bolak-balik: kamu kirim tool yang tersedia → model minta panggil salah satu → kamu jalankan → kamu kirim hasilnya balik ke model → model beri jawaban final.
- Deskripsi tool (nama, penjelasan, skema parameter) adalah bagian dari prompt — deskripsi yang buruk membuat model salah pilih tool atau salah isi argumen.
- Tool use adalah fondasi dari AI agent (Fase 3): agent pada dasarnya adalah loop tool use yang diulang sampai tugas selesai.
- Selalu validasi input dari tool call sebelum dieksekusi — model bisa salah mengisi argumen, dan input itu berasal dari teks yang (tidak langsung) dikontrol pengguna.
Kenapa dibutuhkan
LLM hanya tahu apa yang ada di data latihannya (beku sejak tanggal tertentu) dan apa yang ada di context window saat itu. Ia tidak bisa mengecek harga saham hari ini, mencari data di database internal perusahaanmu, atau mengirim email. Tool use (disebut juga function calling) adalah mekanisme yang menjembatani ini: kamu memberi tahu model "fungsi apa saja yang tersedia", dan model bisa meminta salah satunya dipanggil.
Yang paling sering disalahpahami: model tidak pernah mengeksekusi kode. Ia cuma menghasilkan output terstruktur berbentuk "panggil fungsi X dengan argumen Y" — persis seperti structured output di materi sebelumnya. Kode aplikasimu yang membaca permintaan itu, benar-benar menjalankan fungsinya, lalu mengirim hasilnya balik ke model.
Alur lengkap: empat langkah bolak-balik
tools = [{
"name": "cek_cuaca",
"description": "Ambil informasi cuaca terkini untuk sebuah kota",
"input_schema": {
"type": "object",
"properties": {"kota": {"type": "string", "description": "Nama kota, mis. Jakarta"}},
"required": ["kota"],
},
}]
def cek_cuaca(kota: str) -> dict:
# panggilan nyata ke API cuaca
return {"kota": kota, "suhu_c": 31, "kondisi": "cerah berawan"}
# 1) Kirim pertanyaan + daftar tool yang tersedia
messages = [{"role": "user", "content": "Cuaca di Bandung hari ini gimana?"}]
response = client.messages.create(
model="claude-sonnet-4-5", max_tokens=1024, tools=tools, messages=messages,
)
# 2) Model minta panggil tool (bukan menjawab langsung)
if response.stop_reason == "tool_use":
tool_call = next(b for b in response.content if b.type == "tool_use")
# 3) Aplikasi BENAR-BENAR menjalankan fungsinya
hasil = cek_cuaca(**tool_call.input)
# 4) Kirim hasilnya balik ke model supaya bisa menjawab dengan bahasa manusia
messages.append({"role": "assistant", "content": response.content})
messages.append({"role": "user", "content": [
{"type": "tool_result", "tool_use_id": tool_call.id, "content": str(hasil)}
]})
final = client.messages.create(
model="claude-sonnet-4-5", max_tokens=1024, tools=tools, messages=messages,
)
print(final.content[0].text)
# "Cuaca di Bandung hari ini cerah berawan dengan suhu sekitar 31°C."
| Langkah | Siapa yang bertindak |
|---|---|
| 1. Kirim pertanyaan + daftar tool | Aplikasimu |
| 2. Putuskan tool mana yang relevan & argumennya | Model |
| 3. Jalankan fungsi sungguhan | Aplikasimu |
| 4. Susun jawaban akhir berbahasa manusia dari hasil tool | Model |
Deskripsi tool adalah bagian dari prompt
Nama fungsi, deskripsi, dan skema parameter dibaca oleh model untuk memutuskan kapan dan bagaimana memanggilnya — sama pentingnya dengan menulis prompt yang baik. Deskripsi yang ambigu membuat model salah pilih tool atau salah mengisi argumen wajib.
| Deskripsi buruk | Deskripsi baik |
|---|---|
"Ambil data" | "Ambil status pesanan berdasarkan nomor invoice. Gunakan HANYA saat pengguna menyebutkan nomor invoice spesifik." |
| Parameter tanpa penjelasan tipe/format | {"tanggal": {"type": "string", "description": "Format YYYY-MM-DD"}} |
Tool use adalah fondasi agent
Contoh di atas cuma satu putaran: model minta satu tool, dapat hasilnya, jawab. Kalau kamu membiarkan model memanggil tool berkali-kali secara berturutan — memakai hasil satu panggilan untuk memutuskan panggilan berikutnya, sampai tugasnya selesai — itulah yang disebut AI agent, dibahas penuh di Fase 3.
Peringatan keamanan: argumen yang diisi model berasal dari teks yang — langsung atau tidak langsung — dipengaruhi input pengguna. Jangan pernah mengeksekusi argumen tool sebagai perintah shell mentah atau query SQL yang digabung string. Perlakukan input dari tool call sama waspadanya dengan input form dari pengguna. Dibahas lebih dalam di materi berikutnya.
Latihan: tulis tool cek_stok(produk: str) -> dict yang mengembalikan data stok
palsu dari dictionary Python, lalu buat percakapan lengkap (4 langkah di atas) sehingga model bisa
menjawab "apakah kaos ukuran L masih ada?" dengan memanggil tool itu.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.