ब्लॉग पर वापस जाएं

शुरुआती लोगों के लिए AIगाइड

20 मामलों पर अपने प्रॉम्प्ट का परीक्षण करें: Python में सटीक-मिलान ग्रेडिंग

20-मामले का परीक्षण सेट बनाएँ, एक छोटी Python स्क्रिप्ट के साथ सटीक मिलान द्वारा प्रॉम्प्ट को ग्रेड करें, और देखें कि प्रॉम्प्ट परिवर्तन ने वास्तव में मदद की या नहीं।

CheapTokens Team द्वाराप्रकाशित 12 मिनट का पाठ

कवर: एक कोड स्निपेट जो मॉडल उत्तर की तुलना अपेक्षित लेबल से करता है, शीर्षक '20 मामलों पर अपने प्रॉम्प्ट का परीक्षण करें'
इस पृष्ठ पर
  1. परीक्षण सेट बनाएँ: 20 संदेश और अपेक्षित उत्तर
  2. स्क्रिप्ट: प्रत्येक मामला भेजें, तुलना करें, चूक प्रिंट करें
  3. एक चीज़ बदलें, फिर चलाएँ
  4. वही सेट, दूसरा मॉडल: क्या यह स्कोर बनाए रखता है?
  5. जहाँ सटीक मिलान काम करना बंद कर देता है

आपका प्रॉम्प्ट उन दो संदेशों पर काम कर गया जिन्हें आपने आज़माया। इसका मतलब है कि यह काम करता है? अभी नहीं। इसे 20 वास्तविक संदेशों पर चलाएँ जिनके उत्तर ज्ञात हैं, गिनें कि यह कितने सही करता है, और जो चूकता है उन्हें पढ़ें। एक छोटी Python स्क्रिप्ट गिनती करती है, और जब आप प्रॉम्प्ट बदलते हैं, तो वही स्क्रिप्ट आपको बताती है कि बदलाव ने मदद की या नहीं, इसे अपने अनुमान पर नहीं छोड़ती।

Anthropic का दस्तावेज़ सफलता मानदंड परिभाषित करना और मूल्यांकन बनाना (7 नवंबर 2026 को जाँचा गया) इसे अपने शब्दों में कहता है: परीक्षणों को अपने कार्य के लिए विशिष्ट बनाएँ, अजीब मामलों को शामिल करें, और कुछ हाथ से ग्रेड किए गए प्रश्नों की तुलना में कई स्वचालित रूप से ग्रेड किए गए प्रश्नों को प्राथमिकता दें। नीचे इसका सबसे छोटा संस्करण है जिसे आप आज चला सकते हैं।

चार चरण: 20 मामले मॉडल को जाते हैं, उत्तरों की सटीक मिलान से तुलना की जाती है, और आपको एक सटीकता स्कोर और चूक की सूची मिलती है
पूरी विधि: मामले अंदर, एक संख्या और चूक की सूची बाहर

परीक्षण सेट बनाएँ: 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 मिश्रित। व्यंग्यात्मक पंक्तियाँ ("ओह बढ़िया, एक और अपडेट…", "बेकार के लिए धन्यवाद।") और सीमा रेखा वाला ("यह ठीक है। अद्भुत नहीं, भयानक नहीं।") जानबूझकर शामिल हैं। केवल स्पष्ट संदेशों से बना सेट 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 आउटपुट टोकन हैं, दिन के किसी भी समय एक ही मूल्य, और हर अन्य मॉडल के समान शेष। वर्तमान मूल्य मूल्य निर्धारण पृष्ठ पर हैं, पूरी सूची मॉडल में है।

जहाँ सटीक मिलान काम करना बंद कर देता है#

सटीक मिलान काम करता है क्योंकि सही उत्तर एक निश्चित सूची से एक शब्द है। खुले-अंत वाले आउटपुट जैसे सारांश, पुनर्लेखन या स्पष्टीकरण के लिए, तुलना करने के लिए कोई एकल स्ट्रिंग नहीं है। दस्तावेज़ एक और मार्ग का वर्णन करते हैं, मॉडल द्वारा ग्रेडिंग, और सलाह देते हैं कि ग्रेडर के रूप में उत्तर लिखने वाले मॉडल से भिन्न मॉडल का उपयोग करें। फिर भी सटीक मिलान से शुरू करें: जहाँ भी आप एक छोटा, निश्चित उत्तर बाध्य कर सकते हैं, यह सबसे सस्ता और स्पष्ट परीक्षण है जिसे आप चला सकते हैं। दस्तावेज़ों का अनुमान है कि अधिक स्वचालित रूप से ग्रेड किए गए प्रश्न कम हाथ से ग्रेड किए गए प्रश्नों से बेहतर हैं।

एक और आदत: जब v2 में सुधार रुक जाए, तो उन्हीं 20 संदेशों के विरुद्ध पॉलिश करना जारी न रखें। 5–10 नए जोड़ें, आदर्श रूप से उत्पादन से वास्तविक चूक, और फिर से चलाएँ।

त्वरित जाँच

v2 ने 17/20 स्कोर किया और v1 ने उन्हीं मामलों पर 15/20 स्कोर किया। सबसे सुरक्षित निष्कर्ष क्या है?

उत्तर दिखाएँ

उत्तर: v2 बेहतर लगता है, लेकिन 20 में से दो मामले एक छोटा अंतर है: नए मामले जोड़ें और फिर से चलाएँ

प्रत्येक मामला 5 अंक का है, इसलिए दो-मामले का अंतर करीब से देखने का संकेत है, फैसला नहीं। नए मामले जो v2 ने कभी नहीं देखे हैं, अगली जाँच हैं।