Temperature adalah angka yang mengatur seberapa banyak keacakan yang dipakai model bahasa saat memilih kata berikutnya. Di temperature rendah, model hampir selalu mengambil kata yang paling mungkin, jadi jawabannya fokus dan bisa diulang. Di temperature tinggi, peluangnya lebih merata, jadi jawabannya lebih bervariasi dan kadang melantur. Temperature mengubah cara model memilih di antara kata-kata yang memang sudah dipertimbangkannya; temperature tidak mengubah apa yang diketahui model.
Cara model memilih kata berikutnya
Model menulis satu token dalam satu waktu, dan token adalah sebuah kata atau potongan kata (lihat token dan context window). Di setiap langkah, model memberi skor untuk setiap token di kosakatanya, yang disebut logit. Sebuah fungsi bernama softmax mengubah skor-skor itu menjadi peluang: setiap skor dieksponensialkan lalu dibagi dengan jumlah semuanya, jadi skor yang lebih tinggi mendapat bagian lebih besar dan semua bagian kalau dijumlahkan menjadi 1. Model lalu mengambil satu token secara acak sesuai bagian-bagian itu.
Temperature masuk tepat sebelum softmax. Setiap skor dibagi dengan temperature T:
probability(word) = exp(score / T) / sum of exp(score / T) over all candidates
Dengan T di bawah 1, selisih antar skor membesar, jadi yang terdepan makin jauh memimpin. Dengan T di atas 1, selisihnya mengecil, jadi yang tertinggal bisa mengejar. Di T = 1, kamu mendapat peluang asli dari model. Di T = 0, pembagiannya tidak terdefinisi, jadi API memperlakukannya sebagai "selalu ambil token teratas", yang disebut greedy decoding.
Coba sendiri: slider temperature
Demo di bawah ini melanjutkan frasa "Bahasa pemrograman favoritku adalah" dengan enam kata kandidat. Skor-skornya hanya ilustrasi yang dipilih untuk demo ini; model sungguhan memberi skor untuk kosakata berisi puluhan ribu token atau lebih, dan nama sebuah bahasa bisa terpecah menjadi beberapa token. Matematikanya sungguhan: batang-batangnya adalah hasil softmax dari skor-skor ini pada temperature yang kamu pilih, dan tombol sampel mengambil sepuluh kata dari sana.
Di 1,0, Python mendapat sekitar 46% dan COBOL di bawah 1%. Geser turun ke 0,5 dan Python naik menjadi sekitar 67% sementara COBOL nyaris hilang. Geser naik ke 2,0 dan Python turun menjadi sekitar 32% sementara COBOL naik menjadi sekitar 4%, jadi kira-kira satu dari tiga putaran sepuluh sampel akan memunculkannya setidaknya sekali. Perhatikan apa yang tidak pernah terjadi: urutan kata-katanya tetap sama di setiap pengaturan. Temperature tidak bisa membuat COBOL lebih mungkin daripada Python; temperature hanya melebarkan atau menyempitkan selisihnya.
Balasan sungguhan terdiri dari ratusan pilihan seperti ini secara berurutan, dan setiap pilihan menjadi bagian dari konteks untuk pilihan berikutnya. Satu kata yang tidak biasa di awal mengubah semua yang menyusul, dan itulah kenapa balasan dengan temperature tinggi melantur jauh lebih jauh daripada yang terlihat dari satu kata di demo ini.
Kapan memakai temperature rendah atau tinggi
| Tugas | Titik awal | Alasan |
|---|---|---|
| Kode, perbaikan bug, SQL | Rendah, 0 sampai 0,3 | Biasanya ada satu kelanjutan terbaik, dan kamu ingin hasil yang sama di setiap percobaan |
| Ekstraksi, klasifikasi, JSON | 0 | Variasi apa pun hanyalah gangguan, dan output-nya harus dibaca oleh program |
| Penjelasan, pertanyaan sehari-hari | Nilai bawaan penyedia | Nilai bawaan dipilih untuk penggunaan umum |
| Mencari ide, nama, ide cerita | Nilai bawaan atau sedikit lebih tinggi | Kamu ingin pilihan-pilihan yang berbeda satu sama lain |
Ada dua peringatan. Pertama, temperature rendah tidak membuat jawaban jadi benar. Kalau jawaban yang paling mungkin menurut model ternyata salah, temperature 0 memberimu jawaban salah itu setiap kali, hanya saja secara konsisten; lihat halusinasi AI. Kedua, nilai yang sangat tinggi (jauh di atas 1, di API yang skalanya sampai 2) sering menghasilkan teks yang kehilangan alur atau tidak masuk akal lagi, karena token-token yang kecil kemungkinannya makin sering terpilih.
Kadang keacakan justru yang dicari. Self-consistency prompting sengaja menjalankan pertanyaan penalaran yang sama beberapa kali dengan temperature di atas nol, lalu mengambil jawaban yang disepakati oleh sebagian besar percobaan.
Temperature, top_p, dan top_k
Ada dua pengaturan lain yang juga mengendalikan sampling, dan API sering menyediakannya di samping temperature.
top_p (nucleus sampling) hanya menyimpan token-token paling mungkin yang peluangnya kalau dijumlahkan mencapai p, lalu mengambil sampel di antara token-token itu. Dengan angka-angka dari demo di temperature 1: Python, JavaScript, dan Rust kalau dijumlahkan sekitar 88%, dan menambahkan C melewati 90%. Jadi dengan top_p = 0.9, model hanya mengambil sampel di antara keempat kata itu; Haskell dan COBOL tidak akan pernah muncul. Tidak seperti temperature, top_p menyesuaikan diri: saat model yakin, hanya sedikit token yang lolos, dan saat model ragu, banyak yang lolos.
top_k menyimpan sejumlah tetap token yang paling mungkin, misalnya 40 teratas. Sebagian API menyediakannya, sebagian lagi tidak.
Penyedia umumnya menyarankan untuk mengubah temperature atau top_p saja, bukan keduanya, karena efeknya saling bertumpuk dengan cara yang sulit diprediksi.
Mengatur temperature di API
Aplikasi chat menyembunyikan pengaturan ini, tapi API menerimanya sebagai parameter. Rentangnya bergantung pada penyedia: Chat Completions API milik OpenAI menerima 0 sampai 2, dan Messages API milik Anthropic menerima 0 sampai 1. Beberapa model reasoning hanya menerima nilai bawaannya.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
response = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
temperature=0.2,
messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)
Kenapa aplikasi chat menyembunyikannya, dan apa yang bisa dilakukan
Aplikasi ChatGPT, Claude, dan Gemini memilihkan pengaturan sampling untukmu dan tidak menampilkan slider. Itu membuat aplikasinya tetap sederhana, dan untuk sebagian besar permintaan, mengubah kata-kata prompt mengubah jawaban jauh lebih banyak daripada pengaturan sampling.
Jadi di aplikasi chat, prompt-lah alat kendalimu. Meminta satu jawaban memberimu sesuatu yang dekat dengan pilihan pertama model. Meminta banyak jawaban yang berbeda satu sama lain memberimu variasi di temperature berapa pun, karena sekarang model punya alasan untuk menghindari pilihan pertamanya. Pindah-pindah tab dan ganti produknya untuk melihat perbedaannya.
Streakly. Namanya pendek, mudah diingat, dan mengarah ke streak harian yang membuat orang terus kembali.
Tombol regenerate di aplikasi chat mengambil sampel balasan baru dari prompt yang sama, dan itu cara cepat untuk melihat seberapa bervariasi jawabannya. Kalau variasinya lebih besar dari yang kamu mau, solusinya biasanya prompt yang lebih spesifik: tugas yang tepat mempersempit kemungkinan jawaban yang bagus, dan itu membuat hasil tiap percobaan lebih mirip. Panduan menulis prompt membahas apa saja yang perlu ditambahkan.
Pertanyaan yang sering diajukan
Apa itu temperature di LLM?
Temperature adalah pengaturan sampling yang mengendalikan seberapa acak pemilihan setiap token berikutnya. Model memberi skor untuk setiap token yang mungkin muncul berikutnya, dan skor-skor itu dibagi dengan temperature sebelum diubah menjadi peluang. Nilai yang rendah membuat pilihan teratas mendominasi; nilai yang tinggi meratakan peluangnya sehingga token yang kurang mungkin lebih sering terpilih.
Temperature berapa yang sebaiknya dipakai untuk coding?
Nilai rendah, sekitar 0 sampai 0,3, adalah titik awal yang umum untuk kode, ekstraksi data, dan tugas apa pun yang punya satu jawaban benar, karena kamu ingin kelanjutan yang paling mungkin dan hasil yang bisa diulang. Naikkan kalau kamu ingin variasi, misalnya saat mencari ide nama atau alternatif desain. Beberapa model reasoning hanya menerima nilai bawaannya, jadi cek dokumentasi penyedianya.
Apa bedanya temperature dengan top_p?
Temperature mengubah bentuk seluruh distribusi peluang. top_p, yang juga disebut nucleus sampling, memotongnya: model hanya mengambil sampel dari kelompok token terkecil yang peluangnya kalau dijumlahkan mencapai p, jadi top_p = 0.9 membuang ekor panjang token-token yang kecil kemungkinannya. Penyedia umumnya menyarankan untuk mengubah salah satunya saja dan membiarkan yang lain di nilai bawaannya.
Apakah temperature 0 membuat output-nya deterministik?
Hampir, tapi tidak sepenuhnya. Di 0, model mengambil token yang paling mungkin di setiap langkah, jadi percobaan yang diulang biasanya identik atau sangat mirip. Perbedaan numerik kecil di server penyedia masih bisa sesekali mengubah satu token, dan begitu satu token berbeda, sisa balasannya bisa mengambil jalur yang berbeda.
Bisakah temperature diubah di ChatGPT atau Claude?
Tidak di aplikasi chat-nya: aplikasi itu memilihkan pengaturan sampling untukmu dan tidak menampilkan kontrol temperature. Kamu bisa mengaturnya lewat API dan di alat untuk developer seperti Playground dari OpenAI, Anthropic Console, dan Google AI Studio. Di aplikasi chat, mintalah variasi atau konsistensi lewat prompt-nya.