Structured output: kapan model menjawab vs memanggil tool
A1 — Loop & Tool Calling
Ambigu terbesar di loop: model "menjawab" padahal yang kamu butuhkan keputusan terstruktur. Selesaikan dengan kontrak output eksplisit.
Dua keputusan model
- Memanggil tool — sinyal
toolCalls[i]terisi; eksekusi lalu lanjut loop. - Menjawab final —
toolCallskosong; teks itulah jawaban ke user.
Jangan pernah menebak maksud dari teks jawaban untuk melanjutkan loop — itu bug paling umum di agen buatan sendiri. Kalau harus parsing, pakai response schema.
Response schema
SDK modern mendukung skema output (mis. Gemini responseSchema / OpenAI JSON mode / outline): model dipaksa menghasilkan objek yang lolos schema, bukan teks bebas.
const schema = {
type: "object",
properties: {
final_answer: { type: "string" },
tools_used: { type: "array", items: { type: "string" } },
needs_more_info: { type: "boolean" },
},
required: ["final_answer", "tools_used", "needs_more_info"],
};
const resp = await model.generate({ outputSchema: schema });
Skenario pemakaian: jawaban ke UI (render aman), ringkasan hasil tool ke konteks, dan keputusan routing antaragents.
Tugas: tambah needs_more_info ke agenmu — saat true, loop harus bertanya balik ke user (bukan menebak). Tulis kasus uji: user memberi pertanyaan tanpa info yang dibutuhkan tool, mis. "jadwalkan rapat" tanpa nama peserta.