Pemanggilan tool
Tool calling memungkinkan model meminta kode Anda melakukan sesuatu, seperti mencari pesanan, menjalankan query, atau memanggil API, lalu menggunakan hasilnya dalam jawabannya. Anda mendeskripsikan tool-nya; model memutuskan kapan memanggil tool dan dengan argumen apa; kode Anda menjalankannya dan mengirimkan kembali hasilnya. Model tidak pernah menjalankan apa pun sendiri.
Gunakan model yang capabilities.tools adalah true dalam daftar model. Sebagian besar model teks saat ini memenuhi syarat.
Mendefinisikan tool
Setiap tool terdiri dari nama, deskripsi yang dibaca model untuk memutuskan kapan menggunakannya, dan JSON Schema untuk argumennya:
const tools = [
{
type: "function",
function: {
name: "get_weather",
description: "Current weather for a city.",
parameters: {
type: "object",
properties: {
city: { type: "string", description: "City name, e.g. Berlin" },
unit: { type: "string", enum: ["celsius", "fahrenheit"] },
},
required: ["city"],
additionalProperties: false,
},
},
},
];
Perulangan
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.inferray.com/v1", apiKey: process.env.INFERRAY_API_KEY });
const messages = [{ role: "user", content: "Do I need a jacket in Berlin today?" }];
while (true) {
const completion = await client.chat.completions.create({ model: "gpt-5.5", messages, tools });
const message = completion.choices[0].message;
messages.push(message);
if (!message.tool_calls?.length) {
console.log(message.content);
break;
}
for (const call of message.tool_calls) {
const args = JSON.parse(call.function.arguments);
const result = await getWeather(args.city, args.unit); // your code
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) });
}
}
- Kirim percakapan dan tool-nya.
- Jika balasan memuat
tool_calls(danfinish_reasonadalahtool_calls), jalankan masing-masing. - Tambahkan pesan asisten, lalu satu pesan
tooluntuk setiap panggilan dengantool_call_idyang sesuai. - Panggil lagi. Ulangi sampai model menjawab dalam bentuk teks.
Model dapat meminta beberapa panggilan dalam satu giliran. Jalankan panggilan tersebut, secara paralel jika Anda mau, lalu kirim semua hasilnya kembali sebelum permintaan berikutnya.
Memilih apakah sebuah tool digunakan
tool_choice | Efek |
|---|---|
"auto" (default) | Model yang memutuskan. |
"none" | Tidak ada tool pada giliran ini, meskipun didaftarkan. |
"required" | Model wajib memanggil setidaknya satu tool. |
{"type": "function", "function": {"name": "get_weather"}} | Model wajib memanggil tool tersebut. |
Pada endpoint Messages
Format Anthropic bekerja dengan cara yang sama, hanya dengan nama yang berbeda: tools menerima input_schema, balasan berisi blok tool_use dengan id dan input, dan Anda menjawab dengan pesan user yang berisi blok tool_result yang merujuk ke tool_use_id. Lihat Anthropic Messages.
Pada Responses API, tools adalah {"type": "function", "name": ..., "parameters": ...}, panggilan dikembalikan sebagai function_call output items, dan Anda mengembalikan function_call_output items dengan call_id.
Tips
- Validasi argumen sebelum menggunakannya. Model dapat menghasilkan argumen yang sesuai dengan skema tetapi tidak masuk akal; perlakukan argumen tersebut seperti input pengguna.
- Buat deskripsi yang spesifik. Deskripsi adalah satu-satunya panduan model untuk menentukan kapan sebuah tool berlaku.
- Definisi tool dihitung sebagai input token pada setiap request. Dengan daftar tool yang panjang, prompt caching membuat biayanya tetap rendah.
- Saat streaming, pemanggilan tool tiba dalam bentuk fragmen — lihat streaming.