Chain of thought prompting meminta model bahasa menuliskan langkah-langkah perantara sebuah soal sebelum memberikan jawaban akhirnya. Pada soal yang punya beberapa langkah, seperti soal cerita, teka-teki logika, dan jadwal, mengerjakan secara terbuka cenderung menghasilkan lebih banyak jawaban yang benar daripada langsung menjawab, dan kamu mendapat langkah-langkah yang bisa dicek. Versi terpendeknya hanya satu kalimat yang ditambahkan ke prompt: "Let's think step by step", atau dalam bahasa Indonesia, "Mari berpikir langkah demi langkah."
Kenapa menuliskan langkah-langkahnya membantu
Model menghasilkan balasannya satu token demi satu token, dan semua yang sudah ditulisnya menjadi input untuk token berikutnya. Kalau sebuah prompt menuntut jawaban seketika, model harus menghasilkannya sebelum ada hasil perantara apa pun yang tertulis. Kalau model lebih dulu menulis "Penjualan kopi hari Senin mencapai $168", angka itu sekarang ada di dalam konteks, dan langkah berikutnya bisa dibangun di atasnya alih-alih menyimpannya secara tersirat.
Itu intuisinya. Buktinya datang dari dua paper tahun 2022. Wei dkk., "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", menunjukkan bahwa contoh-contoh yang dikerjakan dengan penalaran tertulis meningkatkan kemampuan model besar dalam tugas aritmetika, penalaran akal sehat, dan penalaran simbolik. Mereka juga menemukan bahwa manfaatnya bergantung pada skala: model yang lebih kecil tidak mendapat manfaat, dan sering menulis penalaran yang lancar tapi berujung pada jawaban yang salah. Kojima dkk., "Large Language Models are Zero-Shot Reasoners", lalu menunjukkan bahwa satu kalimat tanpa contoh, "Let's think step by step", juga meningkatkan hasil secara signifikan, meskipun umumnya tidak sebesar contoh yang dikerjakan.
Jawaban langsung dan chain of thought
Kedua tab menanyakan soal yang sama. Yang pertama hanya meminta jumlahnya; yang kedua meminta cara pengerjaannya dan menaruh jawabannya di baris terakhir yang formatnya sudah ditentukan.
$258
Balasan langsung menunjukkan kekeliruan yang umum: 168 dari kopi hari Senin ditambah $90 dari muffin hari Selasa, jadi model lupa bahwa pada hari Selasa terjual 10 kopi lebih sedikit. Balasan langkah demi langkah memberi jumlah kopi hari Selasa satu baris tersendiri, jadi langkah itu tidak bisa terlewat diam-diam. Model saat ini mungkin juga bisa menjawab versi langsungnya dengan benar; selisihnya makin lebar saat soalnya makin panjang dan langkah-langkahnya makin saling bergantung.
Langkah-langkah yang tertulis punya manfaat kedua: ketika jawabannya salah, kamu bisa melihat langkah mana yang keliru, dan kamu bisa memperbaiki prompt atau input-nya di titik itu.
Chain of thought few-shot
Teknik asli dari Wei dkk. menaruh contoh-contoh yang dikerjakan di dalam prompt, dengan jawaban yang menunjukkan penalarannya, lalu model menjawab soal baru dengan cara yang sama. Contoh di bawah ini diadaptasi dari gambar pertama di paper mereka; soal sesudahnya adalah soal baru. Ganti soalnya untuk mencoba soalmu sendiri.
Awalnya perpustakaan punya 120 buku. Meminjamkan 45 buku menyisakan 75 buku di rak. Menerima 18 buku yang dikembalikan menjadikannya 93. Sumbangan 30 buku membuatnya menjadi 123. Jawabannya adalah 123.
CoT few-shot memberimu kendali atas bentuk penalarannya: seberapa panjang, apa saja yang dijabarkan, dan bagaimana jawabannya dinyatakan. "Jawabannya adalah 11" di contoh adalah penutup yang tetap, dan balasannya menirunya. CoT zero-shot lebih cepat ditulis tapi menyerahkan pilihan-pilihan itu kepada model. Untuk lebih lanjut tentang menyusun kumpulan contoh, lihat few-shot prompting; untuk versi yang hanya berisi instruksi, lihat zero-shot prompting.
Taruh jawabannya di baris tersendiri
Begitu balasannya berisi penalaran, jawabannya berada di suatu tempat di dalam paragraf, dan itu jadi masalah ketika program harus membacanya. Minta jawabannya dalam bentuk tetap di baris terakhir, seperti yang dilakukan prompt kafe dengan "Answer: $X" (label tetap ini sebaiknya dibiarkan apa adanya, karena itulah yang dicari kodenya), lalu baca baris itu di kode:
import re
matches = re.findall(r"^Answer:\s*(.+)$", reply, re.MULTILINE)
answer = matches[-1] if matches else None
Mengambil hasil yang terakhir itu penting, karena penalarannya sendiri bisa saja berisi baris yang diawali "Answer:" sebelum model mengoreksi dirinya. Kalau pengguna sebaiknya hanya melihat jawabannya, minta penalarannya di dalam satu pasang tag dan jawabannya di dalam pasangan tag lain, lalu tampilkan hanya yang kedua. Output terstruktur membahas cara meminta JSON ketika kamu butuh lebih dari satu field.
Model reasoning
Beberapa model saat ini dibuat untuk berpikir sebelum menjawab: model-model itu menghasilkan penalaran secara internal, sering kali disembunyikan atau diringkas, sebelum balasan yang terlihat. Untuk model seperti itu, "Mari berpikir langkah demi langkah" jauh kurang berpengaruh, karena langkah-langkahnya tetap terjadi entah kamu minta atau tidak. Menambahkannya biasanya hanya membuat balasan yang terlihat jadi lebih panjang.
Yang tetap membantu untuk model reasoning adalah semua hal di sekitar penalarannya: pernyataan soal yang lengkap, batasan yang harus dipenuhi jawaban yang benar, dan format jawaban akhirnya. Jelaskan seperti apa jawaban yang bagus alih-alih menuliskan setiap langkahnya; resep langkah yang kaku bisa menggiring model menjauh dari jalur lebih baik yang sebenarnya bisa ditemukannya sendiri.
Kapan tidak memakai chain of thought
Chain of thought memakan token dan waktu, dan hanya sepadan ketika sebuah tugas punya langkah-langkah yang saling bergantung. Untuk mencari informasi, menerjemahkan, menulis ulang, atau klasifikasi sederhana, teknik ini hanya membuat balasannya lebih panjang. Model juga bisa menulis penalaran yang terlihat masuk akal tapi tetap sampai pada jawaban yang salah, jadi cek hasil akhirnya secara terpisah, bukan hanya langkah-langkah yang mengarah ke sana.
Untuk soal sulit di mana satu rantai penalaran bisa salah, ada dua pengembangan yang dibangun di atasnya. Self-consistency prompting mengambil beberapa rantai penalaran lalu memilih jawaban yang dicapai sebagian besar rantai itu, dan tree of thought prompting menjelajahi dan membandingkan beberapa jalur penalaran yang belum selesai sebelum memilih salah satunya.
Pertanyaan yang sering diajukan
Apa itu chain of thought prompting?
Chain of thought (CoT) prompting meminta model bahasa menuliskan langkah-langkah perantara sebuah soal sebelum jawaban akhirnya, entah dengan menunjukkan contoh yang dikerjakan lengkap dengan penalarannya atau dengan menambahkan instruksi seperti "Mari berpikir langkah demi langkah." Pada soal yang punya banyak langkah, cara ini cenderung menghasilkan lebih banyak jawaban yang benar, dan kamu bisa memeriksa setiap langkahnya.
Apakah "let's think step by step" masih berhasil?
Dengan model chat standar, kalimat ini masih membantu untuk soal yang butuh beberapa langkah, terutama ketika prompt-nya mendorong jawaban instan. Model reasoning, yang berpikir dulu sebelum membalas, sudah melakukannya secara internal, jadi frasa ini tidak banyak menambah apa-apa selain balasan yang lebih panjang. Untuk model-model itu, nyatakan soalnya dan format jawabannya dengan jelas saja.
Kapan chain of thought membantu, dan kapan tidak?
Chain of thought membantu untuk tugas yang butuh beberapa langkah yang saling bergantung: soal cerita, aritmetika, teka-teki logika, penjadwalan dengan batasan, dan menelusuri apa yang dilakukan kode. Teknik ini tidak banyak menambah apa-apa untuk mencari informasi, menerjemahkan, menulis ulang, atau klasifikasi sederhana, karena hanya membuat balasannya lebih panjang dan lebih lambat.
Apa bedanya chain of thought zero-shot dan few-shot?
CoT few-shot, yang diperkenalkan Wei dkk. pada tahun 2022, menaruh contoh-contoh yang dikerjakan lengkap dengan penalarannya di dalam prompt, dan model meniru gaya penalaran itu. CoT zero-shot, dari Kojima dkk. 2022, tidak memakai contoh dan hanya menambahkan instruksi seperti "Mari berpikir langkah demi langkah." Zero-shot lebih cepat ditulis; few-shot memberi kendali lebih besar atas tampilan langkah-langkahnya.
Apakah penalaran yang ditulis itu adalah cara model sebenarnya mendapat jawaban?
Belum tentu. Langkah-langkah itu adalah teks yang dihasilkan model, dan bisa terbaca masuk akal sementara jawaban akhirnya salah, atau mengandung kesalahan sementara jawabannya kebetulan benar. Perlakukan penalarannya sebagai sesuatu yang perlu dicek, bukan sebagai bukti, dan verifikasi jawaban akhirnya secara terpisah.