Tree of thought prompting membuat model bahasa mengerjakan masalah seperti yang mungkin kamu lakukan di atas kertas: tuliskan beberapa kemungkinan langkah berikutnya, nilai mana yang terlihat menjanjikan, lanjutkan yang itu, dan tinggalkan sebuah cabang ketika cabang itu tidak mengarah ke mana-mana. Idenya berasal dari Yao dkk. 2023, "Tree of Thoughts: Deliberate Problem Solving with Large Language Models". Metode ini memperluas chain of thought prompting, yang mengikuti satu jalur penalaran, menjadi pencarian di antara banyak jalur.
Halaman ini menjelaskan cara kerja metode aslinya, memberimu versi satu prompt untuk dicoba di ChatGPT, Claude, atau Gemini, dan menunjukkan loop-nya di kode untuk saat satu prompt tidak cukup.
Cara kerja tree of thoughts
Paper itu membagi metodenya menjadi empat keputusan.
- Apa yang dihitung sebagai satu thought. Sebuah thought adalah satu langkah perantara, cukup kecil untuk dihasilkan model dengan baik dan cukup besar untuk dinilai. Dalam teka-teki matematika, satu thought adalah satu persamaan; dalam tugas menulis, satu thought adalah rencana singkat.
- Cara menghasilkan thought. Dari solusi parsial saat ini, model mengusulkan beberapa kandidat langkah berikutnya, entah dengan mengambil sampel secara independen atau dengan menyebutkannya dalam satu balasan.
- Cara mengevaluasinya. Model diminta menilai setiap solusi parsial. Paper itu memakai dua gaya: memberi skor untuk setiap keadaan secara terpisah (misalnya "pasti", "mungkin", atau "mustahil"), atau menunjukkan beberapa keadaan ke model dan membiarkannya memilih yang terbaik.
- Cara mencari. Sebuah program menyimpan beberapa keadaan terbaik di setiap tingkat (breadth-first search) atau mengikuti satu cabang sampai dalam lalu mundur ketika evaluasinya bilang cabang itu tidak ada harapan (depth-first search).
Ambil tugas Game of 24 dari paper itu: pakai angka 4, 9, 10, dan 13 masing-masing sekali, dengan empat operasi dasar, untuk menghasilkan 24. Chain of thought berkomitmen pada persamaan pertamanya dan harus menerima akibatnya. Tree of thoughts mungkin mencoba 13 - 9 = 4, 10 - 4 = 6, dan 4 + 9 = 13 sebagai langkah pertama, bertanya ke model angka sisa mana yang masih bisa mencapai 24, membuang jalan buntunya (10, 13, dan 13 tidak bisa menjadi 24), lalu sampai pada (10 - 4) * (13 - 9) = 24.
Apa yang ditunjukkan paper itu
Para penulisnya memilih tiga tugas yang sulit bagi GPT-4 bahkan dengan chain of thought, karena masing-masing butuh perencanaan atau pencarian: Game of 24, tugas menulis kreatif dengan kalimat penutup yang sudah ditentukan, dan teka-teki silang mini 5x5. Dengan GPT-4, pencarian berbentuk pohon itu menyelesaikan jauh lebih banyak teka-teki Game of 24 daripada chain of thought prompting atau pengambilan beberapa rantai lalu memilih jawaban mayoritas, dan juga lebih baik di dua tugas lainnya.
Harganya adalah jumlah pemanggilan. Setiap kandidat langkah dan setiap evaluasi adalah permintaan terpisah, jadi satu masalah yang terpecahkan bisa butuh puluhan pemanggilan model, sementara chain of thought hanya butuh satu. Pertukaran itu masuk akal untuk masalah yang sulit dan sama sekali tidak untuk masalah yang sederhana.
Tree of thought dalam satu prompt
Kamu bisa mendekati idenya dalam satu pesan: minta beberapa pendekatan yang berbeda, penilaian untuk masing-masing berdasarkan fakta yang kamu berikan, dan pengembangan hanya untuk yang bertahan. Tab-tab di bawah ini mengirim masalah yang sama dengan kedua cara.
Penyebab utamanya adalah jarak fisik antara Australia dan server-mu di Frankfurt. Setiap request harus menempuh perjalanan ke Eropa dan kembali, dan dengan 40 request di setiap pemuatan halaman, keterlambatan itu menumpuk.
Solusi standarnya adalah CDN (content delivery network). CDN menyimpan salinan situsmu di server-server di seluruh dunia, jadi pengguna di Australia mengunduh dari lokasi terdekat alih-alih dari Frankfurt. Kebanyakan penyedia memungkinkan kamu memasang CDN di depan situs yang sudah ada tanpa mengubah kodemu.
Kamu juga bisa mengompres gambar dan mengaktifkan caching browser untuk mempercepat waktu muat lebih jauh.
Balasan langsung itu tidak konyol; balasan itu bahkan menyebut 40 request-nya, tapi langsung mengambil penjelasan pertama yang cocok ("jarak") dan berjalan dengannya. Balasan yang bercabang mengecek setiap penjelasan terhadap detail di prompt, dan dari situlah balasan itu menyadari bahwa "satu demi satu" lebih penting daripada "Australia", dan bahwa CDN tidak akan menyentuh pemanggilan API-nya.
Template yang bisa dipakai ulang
Struktur yang sama bisa dipakai untuk pilihan desain dan rencana. Isi masalahnya dan kriteria yang penting bagimu; balasannya menunjukkan hasil untuk nilai bawaannya.
Platform as a service (host aplikasi terkelola) Biaya: sedang, naik seiring trafik. Penyiapan: kurang dari satu jam dari repo Git. Perawatan: rendah, host-nya yang menambal OS. Simpan.
Virtual server milik sendiri Biaya: paling rendah. Penyiapan: satu hari untuk server, TLS, dan process manager. Perawatan: tinggi, update dan restart jadi urusanmu. Buang untuk tim berisi tiga orang.
Serverless function Biaya: sangat rendah di skala kecil. Penyiapan: sedang, aplikasi server yang sudah ada mungkin perlu disusun ulang. Perawatan: rendah, tapi cold start menambah latensi. Simpan sebagai cadangan.
Terbaik: platform as a service. Langkah pertama:
- Tambahkan start script dan baca port dari environment variable.
- Pindahkan secret ke pengaturan environment milik host.
- Hubungkan repository-nya dan deploy branch utama.
- Tambahkan endpoint health check.
- Pasang peringatan pengeluaran.
Kekurangan versi satu prompt
Versi satu prompt tetap memakai istilah-istilah metodenya tapi kehilangan sebagian besar mekanismenya.
- Tidak ada backtracking yang sesungguhnya. Model menulis semua cabang dan putusannya dalam satu putaran. Kalau langkah 3 dari cabang yang dipilih gagal, tidak ada yang mengirimnya kembali ke langkah 1.
- Penilainya adalah penulisnya. Balasan yang sama yang mengusulkan sebuah ide juga menilainya, jadi balasan itu cenderung memihak cabang yang sudah ada di pikirannya. Di paper itu, evaluasinya adalah pemanggilan terpisah yang dilakukan setelah kandidat-kandidatnya ada.
- Cabang-cabangnya tidak independen. Ide-ide yang disebutkan dalam satu balasan saling memengaruhi dan sering berakhir sebagai variasi dari satu tema. Meminta pendekatan yang "benar-benar berbeda", seperti yang dilakukan template-nya, melawan kecenderungan ini tapi tidak menghilangkannya.
- Model reasoning sudah membuat cabang. Model yang berpikir sebelum menjawab mencoba dan membuang pendekatan secara internal. Untuk model seperti itu, prompt ini tidak banyak menambah akurasi; nilai yang tersisa adalah kamu bisa melihat pilihan-pilihan yang ditolak dan bisa tidak setuju dengan penalarannya.
Menjalankan tree search sungguhan di kode
Metode lengkapnya adalah sebuah loop di programmu: hasilkan kandidat langkah, beri skor setiap solusi parsial dalam pemanggilan terpisah, simpan beberapa yang terbaik, ulangi. Ini versi breadth-first yang minimal dengan SDK Python milik OpenAI; bentuk yang sama bisa dipakai dengan penyedia mana pun.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
def ask(prompt, temperature=0.7):
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
)
return response.choices[0].message.content.strip()
def propose(problem, path, k=3):
steps = "\n".join(path) or "(none yet)"
prompt = f"Problem: {problem}\nSteps so far:\n{steps}\nPropose the next step only."
return [ask(prompt) for _ in range(k)]
def score(problem, path):
steps = "\n".join(path)
prompt = (f"Problem: {problem}\nPartial solution:\n{steps}\n"
"How likely is this to lead to a correct solution? Reply with a number from 1 to 10 only.")
try:
return float(ask(prompt, temperature=0))
except ValueError:
return 0.0
def tree_of_thought(problem, depth=3, keep=2):
frontier = [[]]
for _ in range(depth):
candidates = [path + [step] for path in frontier for step in propose(problem, path)]
candidates.sort(key=lambda p: score(problem, p), reverse=True)
frontier = candidates[:keep]
return frontier[0]
Dengan depth=3, keep=2, dan tiga usulan per keadaan, satu kali jalan membuat sekitar tiga puluh pemanggilan. Untuk banyak tugas, self-consistency prompting (beberapa jawaban lengkap, suara terbanyak) atau rangkaian langkah tetap dengan prompt chaining sudah memberikan sebagian besar manfaatnya dengan lebih sedikit pemanggilan. Pakailah pohon ketika tugasnya butuh pencarian: banyak kemungkinan langkah pertama, dan ada cara untuk mengenali jalan buntu lebih awal.
Pertanyaan yang sering diajukan
Apa itu tree of thought prompting?
Tree of thought prompting adalah cara menyelesaikan masalah di mana model mengusulkan beberapa kemungkinan langkah berikutnya, menilai seberapa menjanjikan masing-masing, dan hanya melanjutkan cabang-cabang terbaik, lalu mundur ketika sebuah cabang gagal. Metode ini berasal dari paper tahun 2023 "Tree of Thoughts: Deliberate Problem Solving with Large Language Models" oleh Yao dkk. Di paper itu, pembuatan cabang dan penilaiannya dijalankan oleh program yang memanggil model berkali-kali.
Apa bedanya tree of thoughts dengan chain of thought?
Chain of thought mengikuti satu jalur penalaran dari awal sampai akhir, jadi kesalahan di awal terbawa sampai ke jawaban. Tree of thoughts menjaga beberapa solusi parsial tetap hidup sekaligus, mengevaluasinya, dan membuang yang lemah, jadi bisa pulih dari langkah pertama yang buruk. Harganya adalah jauh lebih banyak pemanggilan model.
Bisakah tree of thoughts dipakai di ChatGPT atau Claude?
Bisa dipakai versi pendekatannya: satu prompt yang meminta model menyebutkan beberapa pendekatan, menilai masing-masing berdasarkan kriteriamu, membuang yang lemah, dan mengembangkan yang terbaik. Cara ini bisa dipakai di aplikasi chat mana pun. Ini bukan metode lengkapnya, karena semuanya terjadi dalam satu balasan dan model menilai ide-idenya sendiri di putaran yang sama dengan saat menuliskannya.
Apakah tree of thought prompting masih berguna dengan model reasoning?
Kurang dari sebelumnya. Model yang berpikir sebelum menjawab sudah mencoba dan membuang pendekatan secara internal, jadi memintanya membuat cabang tidak banyak menambah apa-apa. Versi satu prompt masih berguna ketika kamu ingin melihat pilihan-pilihannya dan alasan pilihan itu ditolak, supaya kamu bisa mengecek penilaiannya sendiri.
Kapan sebaiknya memakai tree of thought prompting?
Pakai untuk masalah dengan beberapa pendekatan yang masuk akal di mana ide pertama sering salah: perencanaan, pilihan desain, mendiagnosis masalah dari gejala, dan teka-teki yang butuh pencarian. Untuk pertanyaan dengan satu jalur yang jelas, chain of thought biasa lebih murah dan sama bagusnya.