AI untuk pemulaPanduan
Uji prompt Anda pada 20 kasus: penilaian exact match dalam Python
Bangun set tes 20 kasus, nilai prompt dengan exact match menggunakan skrip Python singkat, dan lihat apakah perubahan prompt benar-benar membantu.

Di halaman ini
Prompt Anda berhasil pada dua pesan yang Anda coba. Apakah itu berarti prompt tersebut berfungsi? Belum. Jalankan pada 20 pesan nyata dengan jawaban yang diketahui, hitung berapa banyak yang benar, dan baca yang meleset. Skrip Python singkat melakukan penghitungan, dan ketika Anda mengubah prompt, skrip yang sama memberi tahu apakah perubahan itu membantu alih-alih mengandalkan firasat.
Dokumentasi Anthropic tentang mendefinisikan kriteria keberhasilan dan membangun evaluasi (diperiksa 7 November 2026) mengatakannya dengan kata-kata mereka sendiri: buat tes spesifik untuk tugas Anda, sertakan kasus-kasus yang canggung, dan utamakan banyak pertanyaan yang dinilai otomatis daripada sedikit yang dinilai manual. Berikut adalah versi terkecil dari itu yang dapat Anda jalankan hari ini.

Bangun set tes: 20 pesan dan jawaban yang Anda harapkan#
Katakanlah Anda menyortir pesan pelanggan ke dalam tiga tumpukan: positif, negatif, atau campuran. Buka file bernama cases.csv dan tuliskan 20 pesan yang benar-benar mungkin Anda terima, masing-masing dengan label yang Anda akan berikan. Tulis label sebelum Anda menjalankan apa pun. Jika Anda menyalin jawaban model sebagai "benar", tes hanya bisa setuju dengan model.
text,label
"Arrived a day early and works perfectly. Thank you!",positive
"The charger stopped working after two days.",negative
"Great screen, but the battery barely lasts until lunch.",mixed
"Support answered in five minutes and fixed it.",positive
"I waited three weeks and nobody replied.",negative
"Oh great, another update that deletes my settings.",negative
"Nice design. Pity about the price.",mixed
"Exactly what I ordered.",positive
"The box was crushed, but the headphones inside are fine and sound great.",mixed
"Refund took 10 days. Never again.",negative
"Love it!!",positive
"Cheaply made, but honestly it does the job for the price.",mixed
"Worst purchase of the year.",negative
"Five stars. Would buy again.",positive
"Fast delivery, wrong colour.",mixed
"It's fine. Not amazing, not terrible.",mixed
"Zero issues in six months of daily use.",positive
"The app crashes every time I open the camera.",negative
"Thanks for nothing.",negative
"Setup was a pain, but once it ran, it's been rock solid.",mixedLihat campurannya: 6 positif, 7 negatif, 7 campuran. Kalimat sarkastik ("Oh bagus, pembaruan lagi…", "Terima kasih untuk tidak apa-apa.") dan yang borderline ("Tidak apa-apa. Tidak luar biasa, tidak buruk.") sengaja ada di sana. Set yang hanya berisi pesan jelas akan mendapat skor 100% dan tidak mengajari Anda apa pun. Ambil yang nyata dari kotak masuk, tiket, atau ekspor obrolan Anda sendiri; kasus tepi adalah yang sudah Anda tahu menjengkelkan.
Mengapa 20? Itu ukuran awal, bukan angka dari dokumentasi (contoh mereka menggunakan 1.000 tweet). Dua puluh cukup kecil untuk ditulis tangan dalam setengah jam dan cukup besar sehingga satu jawaban yang beruntung tidak menentukan skor.
Skrip: kirim setiap kasus, bandingkan, cetak yang meleset#
Rencananya memiliki empat langkah, dan kode mengikutinya baris demi baris.
Urutkan
Urutkan loop eval
Seret item atau gunakan panah
- Muat 20 kasus dari CSV
- Kirim setiap pesan ke model dengan prompt Anda
- Bandingkan jawaban dengan label Anda
- Cetak akurasi dan kasus yang gagal
Loop hanya berfungsi ketika label ada sebelum panggilan model pertama, dan kegagalan muncul terakhir karena itulah yang Anda baca dan tindak lanjuti.
Instal SDK dengan pip install openai dan simpan kunci di variabel lingkungan bernama CHEAPTOKENS_. API apa pun yang kompatibel dengan OpenAI bekerja dengan cara yang sama; di sini skrip mengarah ke CheapTokens dan GLM-5.3-Flash (detail penyiapan ada di dokumentasi).
import csv
import os
from openai import OpenAI
client = OpenAI(
base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'],
)
MODEL = 'zai-org/GLM-5.3-Flash'
PROMPT = (
'Classify the customer message as positive, negative or mixed. '
'Answer with one word only.'
)
def ask(text):
r = client.chat.completions.create(
model=MODEL,
temperature=0,
max_tokens=100,
messages=[
{'role': 'system', 'content': PROMPT},
{'role': 'user', 'content': text},
],
)
return r.choices[0].message.content or ''
with open('cases.csv', newline='', encoding='utf-8') as f:
cases = list(csv.DictReader(f))
correct, failed = 0, []
for case in cases:
got = ask(case['text'])
ok = got.strip().strip('.').lower() == case['label']
correct += ok
if not ok:
failed.append((case['text'], case['label'], got.strip()))
print(f'Accuracy: {correct}/{len(cases)} = {correct / len(cases):.0%}')
for text, want, got in failed:
print(f'- {text!r}: expected {want}, got {got!r}')Tiga detail perlu diperhatikan lebih cermat.
temperature=0menjaga jawaban tetap stabil, sehingga perubahan skor berasal dari prompt Anda dan bukan dari keberuntungan.max_tokens=100jauh lebih besar dari yang dibutuhkan label satu kata. Jika jawaban pernah kembali kosong atau terpotong, periksafinish_reason; panduan finish_reason "length" menunjukkan apa yang harus dinaikkan.- Baris penilaian adalah resep dokumentasi,
strip().lower()dibandingkan dengan jawaban yang benar, ditambah satu tambahan: baris itu juga menghapus titik di akhir, karena "Negative." dan "negative" adalah jawaban yang sama bagi Anda.
Apa yang Anda lihat saat dijalankan? Satu baris akurasi, lalu satu baris per yang meleset. Katakanlah proses pertama mencetak ini:
Accuracy: 14/20 = 70%
- 'Oh great, another update that deletes my settings.': expected negative, got 'positive'
- "It's fine. Not amazing, not terrible.": expected mixed, got 'positive'
…(Angka di sini adalah asumsi untuk menunjukkan bentuk keluaran; milik Anda akan berbeda.) Sarkasme dan kata-kata borderline adalah jenis pesan yang cenderung dilewatkan oleh prompt pendek. Intinya adalah Anda tidak lagi menebak: Anda memiliki daftar.
Ubah satu hal, jalankan lagi#
Sekarang bagian yang berguna. Baca yang meleset, pilih penyebabnya, ubah prompt di satu tempat dan jalankan ulang. Satu perubahan pada satu waktu, jika tidak Anda tidak akan tahu edit mana yang menggerakkan skor.
Bandingkan
Prompt v1 → v2: tambahkan aturan dan dua contoh
v1
Classify the customer message as positive, negative or mixed.
Answer with one word only.v2
Classify the customer message as positive, negative or mixed.
Sarcasm counts as negative. Praise plus a complaint is mixed.
Answer with one word only.
Message: Lovely colour, but it arrived with a scratch.
Answer: mixed
Message: Sure, thanks a lot. Now my order is lost.
Answer: negativeDua contoh itu dibuat-buat, dan itu disengaja. Jangan pernah memasukkan pesan dari cases.csv ke dalam prompt sebagai contoh: model kemudian akan dinilai pada jawaban yang Anda berikan, dan skornya akan meningkat secara palsu. Ini adalah teknik few-shot; set tes adalah yang memberi tahu Anda apakah itu berhasil. Jika prompt v1 Anda masih kabur, cara menulis prompt yang baik adalah tempat untuk memulai sebelum Anda mengukur.
Tempel v2 ke PROMPT (tiga tanda kutip berfungsi untuk beberapa baris) dan jalankan skrip lagi. Katakanlah itu mencetak Accuracy: 17/. Tiga kasus lagi benar, jadi v2 terlihat lebih baik. Seberapa besar mempercayainya? Setiap kasus bernilai 5 poin dalam set 20 kasus, jadi 70% → 85% adalah tiga pesan. Itu petunjuk yang baik, bukan bukti. Jika skor turun, Anda telah mempelajari sesuatu yang sama berharganya dan menyelamatkan diri dari mengirim prompt yang lebih buruk.
Set yang sama, model lain: apakah skornya bertahan?#
File yang sama menjawab pertanyaan kedua: apakah Anda membayar untuk model yang lebih besar dari yang dibutuhkan tugas ini? Ubah satu baris dan jalankan lagi:
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'Jika akurasi pada 20 kasus Anda cocok, Anda memiliki jawaban untuk tugas ini, dari data Anda sendiri bukan dari papan peringkat. Jika turun, lihat pesan mana yang rusak sebelum Anda memutuskan apa pun.
Berapa biaya semua ini? Asumsikan sekitar 150 token input per kasus (instruksi plus pesan) dan sekitar 5 token output untuk label satu kata. Itu 3.000 input dan 100 output token per proses 20 kasus, yang berarti $0.000064 pada GLM-5.3-Flash. Sepuluh kali menjalankan ulang set adalah 200 permintaan; tabel di bawah menunjukkan beban kerja itu untuk setiap model, dengan OpenRouter di sebelahnya. Pada beban kerja ini, dengan input dan output dihitung bersama, setiap model dalam tabel berbiaya kurang dari harga referensi OpenRouter.
| Model | Input $/1Jt | Output $/1Jt | Per permintaan | 200 permintaan | OpenRouter, 200 permintaan |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0000032 | $0.00064 | $0.0011 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0000028 | $0.00055 | $0.0022 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0000083 | $0.0017 | $0.0198 |
150 token input dan 5 token output per permintaan. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.
Dua di antaranya digunakan dalam artikel ini: GLM-5.3-Flash memiliki konteks 390K dan hingga 8.192 token output per jawaban; DeepSeek-V4-Flash memiliki konteks 380K dan hingga 32.768 token output, satu harga pada jam berapa pun, dan saldo yang sama dengan model lainnya. Harga terkini ada di halaman harga, daftar lengkapnya ada di model.
Di mana exact match berhenti berfungsi#
Exact match berfungsi karena jawaban yang benar adalah satu kata dari daftar tetap. Untuk keluaran terbuka seperti ringkasan, penulisan ulang, atau penjelasan, tidak ada satu string pun untuk dibandingkan. Dokumentasi menjelaskan rute lain, penilaian oleh model, dan merekomendasikan menggunakan model yang berbeda sebagai penilai daripada yang menulis jawaban. Mulailah dengan exact match: di mana pun Anda dapat memaksakan jawaban pendek dan tetap, itu adalah tes termurah dan paling jelas yang dapat Anda jalankan. Aturan praktis dokumentasi adalah lebih banyak pertanyaan yang dinilai otomatis mengalahkan lebih sedikit yang dinilai manual.
Satu kebiasaan lagi: ketika v2 berhenti membaik, jangan terus memoles terhadap 20 pesan yang sama. Tambahkan 5–10 pesan baru, idealnya yang meleset nyata dari produksi, dan jalankan lagi.
Cek cepat
v2 mendapat skor 17/20 dan v1 mendapat skor 15/20 pada kasus yang sama. Apa kesimpulan paling aman?
Tampilkan jawaban
Jawaban: v2 terlihat lebih baik, tetapi dua kasus dari 20 adalah selisih kecil: tambahkan kasus baru dan jalankan ulang
Setiap kasus bernilai 5 poin, jadi selisih dua kasus adalah sinyal untuk melihat lebih dekat, bukan vonis. Kasus baru yang belum pernah dilihat v2 adalah pemeriksaan berikutnya.



