Bloga dön

Yeni başlayanlar için AIKılavuz

İsteminizi 20 vakada test edin: Python'da tam eşleşme notlandırması

20 vakalık bir test seti oluşturun, kısa bir Python betiğiyle bir istemi tam eşleşme ile notlandırın ve bir istem değişikliğinin gerçekten yardımcı olup olmadığını görün.

Yazan: CheapTokens TeamYayınlanma tarihi: 6 dk okuma

Kapak: bir model cevabını beklenen etiketle karşılaştıran bir kod parçacığı, başlığı İsteminizi 20 vakada test edin
Bu sayfada
  1. Test setini oluşturun: 20 mesaj ve beklediğiniz cevap
  2. Betik: her vakayı gönder, karşılaştır, kaçırılanları yazdır
  3. Bir şeyi değiştirin, tekrar çalıştırın
  4. Aynı set, başka bir model: puanı koruyor mu?
  5. Tam eşleşmenin işe yaramadığı yer

İsteminiz denediğiniz iki mesajda işe yaradı. Bu, işe yaradığı anlamına mı gelir? Henüz değil. Bilinen cevaplarla 20 gerçek mesaj üzerinde çalıştırın, kaç tanesini doğru bulduğunu sayın ve kaçırdıklarını okuyun. Kısa bir Python betiği sayımı yapar ve istemi değiştirdiğinizde aynı betik, değişikliğin işe yarayıp yaramadığını içgüdülerinize bırakmak yerine size söyler.

Anthropic'in başarı kriterlerini tanımlama ve değerlendirme oluşturma hakkındaki belgeleri (7 Kasım 2026'da kontrol edildi) bunu kendi sözcükleriyle ifade eder: testleri görevinize özgü yapın, zor durumları dahil edin ve elle notlandırılan birkaç soru yerine otomatik olarak notlandırılan çok sayıda soruyu tercih edin. Aşağıda bunun bugün çalıştırabileceğiniz en küçük sürümü var.

Dört adım: 20 vaka modele gider, cevaplar tam eşleşme ile karşılaştırılır ve bir doğruluk puanı ile kaçırılanlar elde edilir
Tüm yöntem: vakalar girer, bir sayı ve kaçırılanların listesi çıkar

Test setini oluşturun: 20 mesaj ve beklediğiniz cevap#

Müşteri mesajlarını üç yığına ayırdığınızı varsayalım: olumlu, olumsuz veya karışık. cases.csv adlı bir dosya açın ve gerçekten alabileceğiniz 20 mesajı, her birine sizin vereceğiniz etiketle birlikte yazın. Etiketleri herhangi bir şey çalıştırmadan önce yazın. Modelin cevaplarını "doğru" olarak kopyalarsanız, test yalnızca modelle aynı fikirde olabilir.

csv
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.",mixed

Karışıma bakın: 6 olumlu, 7 olumsuz, 7 karışık. Alaycı satırlar ("Oh harika, bir güncelleme daha…", "Hiçbir şey için teşekkürler.") ve sınırda olan ("Fena değil. Muhteşem değil, berbat da değil.") kasıtlı olarak orada. Yalnızca bariz mesajlardan oluşan bir set %100 puan alır ve size hiçbir şey öğretmez. Gerçek olanları kendi gelen kutunuzdan, destek taleplerinizden veya sohbet dışa aktarımınızdan alın; uç durumlar, sinir bozucu olduğunu zaten bildiğiniz durumlardır.

Neden 20? Bu bir başlangıç boyutudur, belgelerden gelen bir sayı değildir (onların örneği 1.000 tweet kullanır). Yirmi, yarım saatte elle yazılabilecek kadar küçük ve tek bir şanslı cevabın puanı belirlemeyeceği kadar büyüktür.

Betik: her vakayı gönder, karşılaştır, kaçırılanları yazdır#

Planın dört adımı vardır ve kod bunu satır satır takip eder.

Sıraya koy

Değerlendirme döngüsünü sıraya koyun

  1. 20 vakayı CSV'den yükleyin
  2. Her mesajı isteminizle modele gönderin
  3. Cevabı etiketinizle karşılaştırın
  4. Doğruluğu ve başarısız olan vakaları yazdırın

Döngü yalnızca etiketler ilk model çağrısından önce mevcut olduğunda çalışır ve başarısızlıklar en sonda gelir çünkü okuyup üzerinde işlem yaptığınız şey onlardır.

SDK'yı pip install openai ile kurun ve anahtarı CHEAPTOKENS_API_KEY adlı bir ortam değişkeninde tutun. OpenAI uyumlu herhangi bir API aynı şekilde çalışır; burada betik CheapTokens ve GLM-5.3-Flash'e işaret eder (kurulum ayrıntıları belgelerde).

python
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}')

Üç ayrıntı ikinci bir bakışı hak ediyor.

  • temperature=0 cevapları olabildiğince sabit tutar, böylece puandaki bir değişiklik zar yerine isteminizden kaynaklanır.
  • max_tokens=100 tek kelimelik bir etiketin ihtiyaç duyduğundan çok daha fazladır. Bir cevap hiç boş veya kesik gelirse, finish_reason kontrol edin; finish_reason "length" kılavuzu neyin artırılacağını gösterir.
  • Notlandırma satırı belgelerin tarifidir, strip().lower() doğru cevapla karşılaştırılır, artı bir ekleme: aynı zamanda sondaki noktayı da kaldırır, çünkü "Negative." ve "negative" sizin için aynı cevaptır.

Çalıştığında ne görürsünüz? Bir doğruluk satırı, ardından her kaçırma için bir satır. İlk çalıştırmanın şunu yazdırdığını varsayalım:

text
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'
…

(Buradaki sayılar çıktının şeklini göstermek için bir varsayımdır; sizinkiler farklı olacaktır.) Alaycılık ve sınırda ifadeler, kısa bir istemin kaçırma eğiliminde olduğu mesaj türleridir. Önemli olan artık tahmin etmemeniz: bir listeniz var.

Bir şeyi değiştirin, tekrar çalıştırın#

Şimdi faydalı kısım. Kaçırılanları okuyun, bir neden seçin, istemi tek bir yerde değiştirin ve yeniden çalıştırın. Her seferinde tek değişiklik, aksi takdirde hangi düzenlemenin puanı hareket ettirdiğini bilemezsiniz.

Karşılaştır

İstem v1 → v2: bir kural ve iki örnek ekleyin

v1

text
Classify the customer message as positive, negative or mixed.
Answer with one word only.

v2

text
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: negative

İki örnek uydurmadır ve bu kasıtlıdır. cases.csv içinden bir mesajı asla isteme örnek olarak koymayın: model o zaman ona verdiğiniz bir cevapla notlandırılır ve puan şişirilir. Bu az örnekli tekniktir; test seti, işe yarayıp yaramadığını size söyleyen şeydir. v1 isteminiz hâlâ belirsizse, ölçüm yapmadan önce başlanacak yer iyi bir istem nasıl yazılırdır.

v2'yi PROMPT içine yapıştırın (üçlü tırnaklar birkaç satır için çalışır) ve betiği tekrar çalıştırın. Diyelim ki Accuracy: 17/20 = 85% yazdırdı. Üç vaka daha doğru, yani v2 daha iyi görünüyor. Buna ne kadar güvenmeli? 20 vakalık bir sette her vaka 5 puan değerindedir, yani %70 → %85 üç mesajdır. Bu iyi bir ipucu, kanıt değil. Puan düşerse, aynı derecede değerli bir şey öğrendiniz ve kendinizi daha kötü bir istem göndermekten kurtardınız.

Aynı set, başka bir model: puanı koruyor mu?#

Aynı dosya ikinci bir soruyu yanıtlar: bu görevin ihtiyaç duyduğundan daha fazla model için mi ödeme yapıyorsunuz? Bir satırı değiştirin ve tekrar çalıştırın:

python
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'

20 vakanızdaki doğruluk eşleşiyorsa, bu görev için cevabınız var, bir liderlik tablosundan değil kendi verilerinizden. Düşerse, herhangi bir karar vermeden önce hangi mesajların bozulduğuna bakın.

Tüm bunlar ne kadar tutar? Vaka başına yaklaşık 150 giriş tokenı (talimat artı mesaj) ve tek kelimelik bir etiket için yaklaşık 5 çıkış tokenı varsayalım. Bu, 20 vakalık bir çalıştırma başına 3.000 giriş ve 100 çıkış tokenıdır, bu da GLM-5.3-Flash'te $0.000064 tutarına denk gelir. Setin on kez yeniden çalıştırılması 200 istektir; aşağıdaki tablo bu iş yükünü her model için, yanında OpenRouter ile gösterir. Bu iş yükünde, giriş ve çıkış birlikte sayıldığında, tablodaki her model OpenRouter'ın referans fiyatından daha ucuza gelir.

Model İstek başına 200 istek OpenRouter, 200 istek
GLM-5.3-Flash $0.0000032 $0.00064 $0.0011
DeepSeek-V4-Flash $0.0000028 $0.00055 $0.0022
MiniMax-M2.7 $0.0000083 $0.0017 $0.0198

İstek başına 150 giriş ve 5 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.

Bunlardan ikisi bu makalede kullanılmıştır: GLM-5.3-Flash 390K bağlam ve cevap başına 8.192'ye kadar çıkış tokenına sahiptir; DeepSeek-V4-Flash 380K bağlam ve 32.768'e kadar çıkış tokenına, günün her saatinde tek fiyata ve diğer tüm modellerle aynı bakiyeye sahiptir. Güncel fiyatlar fiyatlandırma sayfasında, tam liste modellerde.

Tam eşleşmenin işe yaramadığı yer#

Tam eşleşme işe yarar çünkü doğru cevap sabit bir listeden tek bir kelimedir. Özetler, yeniden yazımlar veya açıklamalar gibi açık uçlu çıktılar için karşılaştırılacak tek bir dize yoktur. Belgeler başka bir yol tarif eder, bir modelle notlandırma, ve cevabı yazan modelden farklı bir modeli notlandırıcı olarak kullanmayı önerir. Yine de tam eşleşmeyle başlayın: kısa, sabit bir cevabı zorlayabildiğiniz her yerde, çalıştırabileceğiniz en ucuz ve en net testtir. Belgelerin pratik kuralı, otomatik olarak notlandırılan daha fazla sorunun elle notlandırılan daha az sorudan daha iyi olduğudur.

Bir alışkanlık daha: v2 iyileşmeyi durdurduğunda, aynı 20 mesaja karşı cilalamaya devam etmeyin. 5–10 yeni mesaj ekleyin, ideal olarak üretimden gerçek kaçırmalar, ve tekrar çalıştırın.

Hızlı kontrol

v2 aynı vakalarda 17/20 ve v1 15/20 puan aldı. En güvenli sonuç nedir?

Cevabı göster

Cevap: v2 daha iyi görünüyor, ancak 20 vakanın ikisi küçük bir fark: yeni vakalar ekleyin ve yeniden çalıştırın

Her vaka 5 puandır, yani iki vakalık bir fark daha yakından bakma işaretidir, bir hüküm değil. v2'nin hiç görmediği yeni vakalar bir sonraki kontroldür.