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

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

ٹیسٹ سیٹ بنائیں: 20 پیغامات اور وہ جواب جو آپ توقع کرتے ہیں#
فرض کریں آپ گاہک کے پیغامات کو تین ڈھیروں میں تقسیم کرتے ہیں: مثبت، منفی یا مخلوط۔ cases.csv نام کی فائل کھولیں اور 20 پیغامات لکھیں جو آپ واقعی وصول کر سکتے ہیں، ہر ایک کے ساتھ وہ لیبل جو آپ دیں گے۔ لیبل کچھ چلانے سے پہلے لکھیں۔ اگر آپ ماڈل کے جوابات کو "درست" کے طور پر کاپی کریں، تو ٹیسٹ صرف ماڈل سے اتفاق کر سکتا ہے۔
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 ٹویٹس استعمال ہوئے ہیں)۔ بیس اتنا چھوٹا ہے کہ آدھے گھنٹے میں ہاتھ سے لکھا جا سکے اور اتنا بڑا کہ ایک خوش قسمتی کا جواب اسکور کا فیصلہ نہ کرے۔
اسکرپٹ: ہر کیس بھیجیں، موازنہ کریں، غلطیاں پرنٹ کریں#
منصوبے کے چار مراحل ہیں، اور کوڈ لائن بہ لائن ان کی پیروی کرتا ہے۔
ترتیب دیں
ایویل لوپ کو ترتیب دیں
آئٹمز کو گھسیٹیں یا تیروں کا استعمال کریں
- CSV سے 20 کیسز لوڈ کریں
- ہر پیغام اپنے پرامپٹ کے ساتھ ماڈل کو بھیجیں
- جواب کا آپ کے لیبل سے موازنہ کریں
- درستگی اور ناکام کیسز پرنٹ کریں
لوپ صرف اس وقت کام کرتا ہے جب لیبل پہلی ماڈل کال سے پہلے موجود ہوں، اور ناکامیاں آخر میں آتی ہیں کیونکہ وہی ہیں جنہیں آپ پڑھتے اور ان پر عمل کرتے ہیں۔
SDK کو pip install openai سے انسٹال کریں اور کلید کو CHEAPTOKENS_ نام کے ماحول متغیر میں رکھیں۔ کوئی بھی OpenAI-مطابق API اسی طرح کام کرتا ہے؛ یہاں اسکرپٹ CheapTokens اور GLM-5.3-Flash کی طرف اشارہ کرتا ہے (سیٹ اپ کی تفصیلات دستاویزات میں ہیں)۔
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" آپ کے لیے ایک ہی جواب ہیں۔
چلنے پر کیا نظر آتا ہے؟ ایک درستگی کی لائن، پھر ہر غلطی کے لیے ایک لائن۔ فرض کریں پہلا رن یہ پرنٹ کرتا ہے:
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
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: negativeدو مثالیں فرضی ہیں، اور یہ جان بوجھ کر ہے۔ cases.csv کا کوئی پیغام کبھی بطور مثال پرامپٹ میں نہ رکھیں: پھر ماڈل کو اس جواب پر گریڈ کیا جائے گا جو آپ نے اسے دیا، اور اسکور بڑھا ہوا ہوگا۔ یہ few-shot تکنیک ہے؛ ٹیسٹ سیٹ ہی بتاتا ہے کہ اس کا فائدہ ہوا یا نہیں۔ اگر آپ کا v1 پرامپٹ اب بھی مبہم ہے، تو اچھا پرامپٹ کیسے لکھیں وہ جگہ ہے جہاں سے پیمائش سے پہلے شروع کریں۔
v2 کو PROMPT میں پیسٹ کریں (ٹرپل کوٹس کئی لائنوں کے لیے کام کرتے ہیں) اور اسکرپٹ دوبارہ چلائیں۔ فرض کریں یہ Accuracy: 17/ پرنٹ کرتا ہے۔ تین مزید کیسز درست ہیں، تو v2 بہتر لگتا ہے۔ اس پر کتنا بھروسہ کریں؟ 20 کیسز کے سیٹ میں ہر کیس 5 پوائنٹس کا ہے، تو 70% → 85% تین پیغامات ہیں۔ یہ ایک اچھا اشارہ ہے، ثبوت نہیں۔ اگر اسکور گر جائے، تو آپ نے اتنا ہی قیمتی سبق سیکھا اور اپنے آپ کو بدتر پرامپٹ شپ کرنے سے بچا لیا۔
وہی سیٹ، دوسرا ماڈل: کیا یہ اسکور برقرار رکھتا ہے؟#
وہی فائل دوسرا سوال حل کرتی ہے: کیا آپ اس کام کی ضرورت سے زیادہ ماڈل کے پیسے دے رہے ہیں؟ ایک لائن بدلیں اور دوبارہ چلائیں:
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'اگر آپ کے 20 کیسز پر درستگی مطابقت رکھتی ہے، تو آپ کے پاس اس کام کے لیے جواب ہے، آپ کے اپنے ڈیٹا سے نہ کہ کسی لیڈر بورڈ سے۔ اگر یہ گر جائے، تو کچھ فیصلہ کرنے سے پہلے دیکھیں کون سے پیغامات ٹوٹے۔
اس سب کا خرچ کیا ہے؟ فرض کریں تقریباً 150 ان پٹ ٹوکن فی کیس (ہدایت جمع پیغام) اور ایک لفظ کے لیبل کے لیے تقریباً 5 آؤٹ پٹ ٹوکن۔ یہ 20 کیسز کے ایک رن میں 3,000 ان پٹ اور 100 آؤٹ پٹ ٹوکن ہیں، جو GLM-5.3-Flash پر $0.000064 بنتے ہیں۔ سیٹ کے دس دوبارہ رن 200 درخواستیں ہیں؛ نیچے جدول ہر ماڈل کے لیے یہ کام دکھاتا ہے، ساتھ OpenRouter بھی۔ اس کام پر، ان پٹ اور آؤٹ پٹ ملا کر، جدول کا ہر ماڈل OpenRouter کی حوالہ قیمت سے کم لاگت رکھتا ہے۔
| ماڈل | ان پٹ $/1M | آؤٹ پٹ $/1M | فی درخواست | 200 درخواستیں | OpenRouter، 200 درخواستیں |
|---|---|---|---|---|---|
| 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 ان پٹ اور 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 نے کبھی نہیں دیکھے، اگلا چیک ہیں۔



