بلاگ پر واپس جائیں

نئے سیکھنے والوں کے لیے AIگائیڈ

اپنے پرامپٹ کو 20 کیسز پر آزمائیں: Python میں exact-match گریڈنگ

20 کیسز کا ٹیسٹ سیٹ بنائیں، ایک مختصر Python اسکرپٹ سے exact match کے ذریعے پرامپٹ گریڈ کریں، اور دیکھیں کہ پرامپٹ کی تبدیلی نے واقعی مدد کی یا نہیں۔

از CheapTokens Teamشائع شدہ 8 منٹ کا مطالعہ

کور: ایک کوڈ اسنیپٹ ماڈل کے جواب کا متوقع لیبل سے موازنہ کرتا ہوا، عنوان Test your prompt on 20 cases
اس صفحہ پر
  1. ٹیسٹ سیٹ بنائیں: 20 پیغامات اور وہ جواب جو آپ توقع کرتے ہیں
  2. اسکرپٹ: ہر کیس بھیجیں، موازنہ کریں، غلطیاں پرنٹ کریں
  3. ایک چیز بدلیں، دوبارہ چلائیں
  4. وہی سیٹ، دوسرا ماڈل: کیا یہ اسکور برقرار رکھتا ہے؟
  5. جہاں exact match کام کرنا چھوڑ دیتا ہے

آپ کا پرامپٹ ان دو پیغامات پر کام کر گیا جو آپ نے آزمائے۔ کیا اس کا مطلب ہے کہ یہ کام کرتا ہے؟ ابھی نہیں۔ اسے 20 حقیقی پیغامات پر جن کے جوابات معلوم ہیں چلائیں، گنیں کہ کتنے درست ہیں، اور جو غلط ہوں انہیں پڑھیں۔ ایک مختصر Python اسکرپٹ گنتی کرتا ہے، اور جب آپ پرامپٹ تبدیل کریں تو وہی اسکرپٹ بتاتا ہے کہ تبدیلی نے مدد کی یا نہیں، بجائے اس کے کہ آپ کے اندازے پر چھوڑ دیا جائے۔

Anthropic کی دستاویزات کامیابی کے معیار کی تعریف اور ایویلیوایشن بنانے پر (7 نومبر 2026 کو چیک کیا گیا) اپنے الفاظ میں کہتی ہیں: ٹیسٹ کو اپنے کام کے لیے مخصوص بنائیں، مشکل کیسز شامل کریں، اور چند ہاتھ سے جانچے گئے سوالات کے بجائے بہت سے خودکار طور پر جانچے گئے سوالات کو ترجیح دیں۔ نیچے اس کا سب سے چھوٹا ورژن ہے جو آپ آج چلا سکتے ہیں۔

چار مراحل: 20 کیسز ماڈل کو جاتے ہیں، جوابات کا موازنہ exact match سے ہوتا ہے، اور آپ کو درستگی کا اسکور اور غلطیاں ملتی ہیں
پورا طریقہ: کیسز اندر، ایک نمبر اور غلطیوں کی فہرست باہر

ٹیسٹ سیٹ بنائیں: 20 پیغامات اور وہ جواب جو آپ توقع کرتے ہیں#

فرض کریں آپ گاہک کے پیغامات کو تین ڈھیروں میں تقسیم کرتے ہیں: مثبت، منفی یا مخلوط۔ cases.csv نام کی فائل کھولیں اور 20 پیغامات لکھیں جو آپ واقعی وصول کر سکتے ہیں، ہر ایک کے ساتھ وہ لیبل جو آپ دیں گے۔ لیبل کچھ چلانے سے پہلے لکھیں۔ اگر آپ ماڈل کے جوابات کو "درست" کے طور پر کاپی کریں، تو ٹیسٹ صرف ماڈل سے اتفاق کر سکتا ہے۔

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

مکس دیکھیں: 6 مثبت، 7 منفی، 7 مخلوط۔ طنزیہ جملے ("Oh great, another update…"، "Thanks for nothing.") اور بارڈر لائن والا ("It's fine. Not amazing, not terrible.") جان بوجھ کر شامل ہیں۔ صرف واضح پیغامات پر مشتمل سیٹ 100% اسکور کرتا ہے اور آپ کو کچھ نہیں سکھاتا۔ اصل پیغامات اپنے ان باکس، ٹکٹس یا چیٹ ایکسپورٹ سے لیں؛ ایج کیسز وہی ہیں جو آپ پہلے سے جانتے ہیں کہ پریشان کن ہیں۔

20 کیوں؟ یہ شروعاتی سائز ہے، دستاویزات کا نمبر نہیں (ان کی مثال میں 1,000 ٹویٹس استعمال ہوئے ہیں)۔ بیس اتنا چھوٹا ہے کہ آدھے گھنٹے میں ہاتھ سے لکھا جا سکے اور اتنا بڑا کہ ایک خوش قسمتی کا جواب اسکور کا فیصلہ نہ کرے۔

اسکرپٹ: ہر کیس بھیجیں، موازنہ کریں، غلطیاں پرنٹ کریں#

منصوبے کے چار مراحل ہیں، اور کوڈ لائن بہ لائن ان کی پیروی کرتا ہے۔

ترتیب دیں

ایویل لوپ کو ترتیب دیں

  1. CSV سے 20 کیسز لوڈ کریں
  2. ہر پیغام اپنے پرامپٹ کے ساتھ ماڈل کو بھیجیں
  3. جواب کا آپ کے لیبل سے موازنہ کریں
  4. درستگی اور ناکام کیسز پرنٹ کریں

لوپ صرف اس وقت کام کرتا ہے جب لیبل پہلی ماڈل کال سے پہلے موجود ہوں، اور ناکامیاں آخر میں آتی ہیں کیونکہ وہی ہیں جنہیں آپ پڑھتے اور ان پر عمل کرتے ہیں۔

SDK کو pip install openai سے انسٹال کریں اور کلید کو CHEAPTOKENS_API_KEY نام کے ماحول متغیر میں رکھیں۔ کوئی بھی OpenAI-مطابق API اسی طرح کام کرتا ہے؛ یہاں اسکرپٹ CheapTokens اور GLM-5.3-Flash کی طرف اشارہ کرتا ہے (سیٹ اپ کی تفصیلات دستاویزات میں ہیں)۔

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

تین تفصیلات دوبارہ دیکھنے کے قابل ہیں۔

  • temperature=0 جوابات کو زیادہ سے زیادہ مستحکم رکھتا ہے، تاکہ اسکور میں تبدیلی آپ کے پرامپٹ سے ہو نہ کہ قسمت سے۔
  • max_tokens=100 ایک لفظ کے لیبل کے لیے ضرورت سے کہیں زیادہ ہے۔ اگر کبھی جواب خالی یا کٹا ہوا آئے تو finish_reason چیک کریں؛ finish_reason "length" گائیڈ دکھاتی ہے کہ کیا بڑھانا ہے۔
  • گریڈنگ لائن دستاویزات کی ترکیب ہے، strip().lower() کا صحیح جواب سے موازنہ، اور ایک اضافہ: یہ آخر میں آنے والا فل اسٹاپ بھی ہٹا دیتی ہے، کیونکہ "Negative." اور "negative" آپ کے لیے ایک ہی جواب ہیں۔

چلنے پر کیا نظر آتا ہے؟ ایک درستگی کی لائن، پھر ہر غلطی کے لیے ایک لائن۔ فرض کریں پہلا رن یہ پرنٹ کرتا ہے:

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

(یہاں نمبر ایک مفروضہ ہیں جو آؤٹ پٹ کی شکل دکھاتے ہیں؛ آپ کے مختلف ہوں گے۔) طنز اور بارڈر لائن الفاظ وہ پیغامات ہیں جنہیں مختصر پرامپٹ عام طور پر غلط کرتا ہے۔ بات یہ ہے کہ آپ اب اندازہ نہیں لگاتے: آپ کے پاس ایک فہرست ہے۔

ایک چیز بدلیں، دوبارہ چلائیں#

اب مفید حصہ۔ غلطیاں پڑھیں، ایک وجہ منتخب کریں، پرامپٹ کو ایک جگہ تبدیل کریں اور دوبارہ چلائیں۔ ایک وقت میں ایک تبدیلی، ورنہ آپ کو معلوم نہیں ہوگا کہ کس ترمیم نے اسکور کو ہلایا۔

موازنہ کریں

پرامپٹ v1 → v2: ایک اصول اور دو مثالیں شامل کریں

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

دو مثالیں فرضی ہیں، اور یہ جان بوجھ کر ہے۔ cases.csv کا کوئی پیغام کبھی بطور مثال پرامپٹ میں نہ رکھیں: پھر ماڈل کو اس جواب پر گریڈ کیا جائے گا جو آپ نے اسے دیا، اور اسکور بڑھا ہوا ہوگا۔ یہ few-shot تکنیک ہے؛ ٹیسٹ سیٹ ہی بتاتا ہے کہ اس کا فائدہ ہوا یا نہیں۔ اگر آپ کا v1 پرامپٹ اب بھی مبہم ہے، تو اچھا پرامپٹ کیسے لکھیں وہ جگہ ہے جہاں سے پیمائش سے پہلے شروع کریں۔

v2 کو PROMPT میں پیسٹ کریں (ٹرپل کوٹس کئی لائنوں کے لیے کام کرتے ہیں) اور اسکرپٹ دوبارہ چلائیں۔ فرض کریں یہ Accuracy: 17/20 = 85% پرنٹ کرتا ہے۔ تین مزید کیسز درست ہیں، تو v2 بہتر لگتا ہے۔ اس پر کتنا بھروسہ کریں؟ 20 کیسز کے سیٹ میں ہر کیس 5 پوائنٹس کا ہے، تو 70% → 85% تین پیغامات ہیں۔ یہ ایک اچھا اشارہ ہے، ثبوت نہیں۔ اگر اسکور گر جائے، تو آپ نے اتنا ہی قیمتی سبق سیکھا اور اپنے آپ کو بدتر پرامپٹ شپ کرنے سے بچا لیا۔

وہی سیٹ، دوسرا ماڈل: کیا یہ اسکور برقرار رکھتا ہے؟#

وہی فائل دوسرا سوال حل کرتی ہے: کیا آپ اس کام کی ضرورت سے زیادہ ماڈل کے پیسے دے رہے ہیں؟ ایک لائن بدلیں اور دوبارہ چلائیں:

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

اگر آپ کے 20 کیسز پر درستگی مطابقت رکھتی ہے، تو آپ کے پاس اس کام کے لیے جواب ہے، آپ کے اپنے ڈیٹا سے نہ کہ کسی لیڈر بورڈ سے۔ اگر یہ گر جائے، تو کچھ فیصلہ کرنے سے پہلے دیکھیں کون سے پیغامات ٹوٹے۔

اس سب کا خرچ کیا ہے؟ فرض کریں تقریباً 150 ان پٹ ٹوکن فی کیس (ہدایت جمع پیغام) اور ایک لفظ کے لیبل کے لیے تقریباً 5 آؤٹ پٹ ٹوکن۔ یہ 20 کیسز کے ایک رن میں 3,000 ان پٹ اور 100 آؤٹ پٹ ٹوکن ہیں، جو GLM-5.3-Flash پر $0.000064 بنتے ہیں۔ سیٹ کے دس دوبارہ رن 200 درخواستیں ہیں؛ نیچے جدول ہر ماڈل کے لیے یہ کام دکھاتا ہے، ساتھ OpenRouter بھی۔ اس کام پر، ان پٹ اور آؤٹ پٹ ملا کر، جدول کا ہر ماڈل OpenRouter کی حوالہ قیمت سے کم لاگت رکھتا ہے۔

ماڈل فی درخواست 200 درخواستیں OpenRouter، 200 درخواستیں
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

فی درخواست 150 ان پٹ اور 5 آؤٹ پٹ ٹوکنز۔ فی 1M ٹوکنز کی قیمتیں موجودہ ہیں اور ہمارے ٹیرف کے ساتھ تبدیل ہوتی ہیں؛ OpenRouter کالم اسی ورک لوڈ کے لیے حوالہ جاتی قیمتیں دکھاتا ہے۔

ان میں سے دو اس مضمون میں استعمال ہوئے ہیں: GLM-5.3-Flash کا 390K سیاق و سباق اور فی جواب زیادہ سے زیادہ 8,192 آؤٹ پٹ ٹوکن؛ DeepSeek-V4-Flash کا 380K سیاق و سباق اور زیادہ سے زیادہ 32,768 آؤٹ پٹ ٹوکن، دن کے کسی بھی وقت ایک قیمت، اور ہر دوسرے ماڈل جیسا بیلنس۔ موجودہ قیمتیں قیمتوں کے صفحے پر ہیں، مکمل فہرست ماڈلز میں ہے۔

جہاں exact match کام کرنا چھوڑ دیتا ہے#

exact match اس لیے کام کرتا ہے کہ صحیح جواب ایک مقررہ فہرست سے ایک لفظ ہے۔ کھلے جوابات جیسے خلاصے، دوبارہ تحریر یا وضاحتیں، کے لیے موازنہ کرنے کے لیے کوئی واحد سٹرنگ نہیں ہوتی۔ دستاویزات ایک اور راستہ بتاتی ہیں، ماڈل سے گریڈنگ، اور تجویز کرتی ہیں کہ جواب لکھنے والے ماڈل سے مختلف ماڈل کو گریڈر کے طور پر استعمال کریں۔ بہرحال exact match سے شروع کریں: جہاں بھی آپ مختصر، مقررہ جواب پر مجبور کر سکیں، یہ سب سے سستا اور واضح ٹیسٹ ہے جو آپ چلا سکتے ہیں۔ دستاویزات کا اصول یہ ہے کہ زیادہ خودکار طور پر گریڈ کیے گئے سوالات کم ہاتھ سے گریڈ کیے گئے سوالات سے بہتر ہیں۔

ایک اور عادت: جب v2 بہتر ہونا بند ہو جائے، تو انہی 20 پیغامات کے خلاف پالش کرتے نہ رہیں۔ 5–10 نئے شامل کریں، ترجیحاً پروڈکشن سے اصل غلطیاں، اور دوبارہ چلائیں۔

فوری جانچ

v2 نے 17/20 اسکور کیا اور v1 نے انہی کیسز پر 15/20 اسکور کیا۔ محفوظ ترین نتیجہ کیا ہے؟

جواب دکھائیں

جواب: v2 بہتر لگتا ہے، لیکن 20 میں سے دو کیسز ایک چھوٹا فرق ہے: نئے کیسز شامل کریں اور دوبارہ چلائیں

ہر کیس 5 پوائنٹس ہے، تو دو کیسز کا فرق قریب سے دیکھنے کا اشارہ ہے، فیصلہ نہیں۔ نئے کیسز جو v2 نے کبھی نہیں دیکھے، اگلا چیک ہیں۔