ailiteracynepal 🇳🇵
पाठ आकार

अध्याय १ · खण्ड III · 22 मिनेट

Temperature, र आउटपुट नियन्त्रण गर्ने

LLM व्यवहार आकार दिनका लागि सबैभन्दा महत्त्वपूर्ण एकल नब। निकालन र वर्गीकरण जस्ता deterministic काममा कम temperature, creative काममा उच्च। आउटपुट पूर्वानुमानयोग्य राख्ने बानीहरूको छोटो सेट।

हरेक LLM कलमा एउटा सानो argument छ जुन अधिकांश सुरुआतीहरूले कहिल्यै छुँदैनन्: temperature। यसले मोडेलको output कति deterministic वा कति creative हुन्छ नियन्त्रण गर्छ। अहिलेको कामका लागि यसलाई सही सेट गर्नु भरपर्दो रूपमा हरेक पटक उही नतिजा फर्काउने extraction pipeline र तीन उही कलमा तीन फरक उत्तर फर्काउने बीचको फरक हो। यो खण्ड temperature ले के गर्छ, किन महत्त्व राख्छ, र तपाईंको outputs पूर्वानुमानयोग्य राख्ने बानीको सानो सेटको ध्यानले संस्करण हो।

Temperature वास्तवमै के हो

Hood मुनि, LLM एकै पटक एक टोकन उत्पन्न गर्छ। हरेक चरणमा, मोडेलले सम्भावित अर्को टोकनहरूमाथि सम्भावना वितरण गणना गर्छ — “अहिलेसम्मका शब्दहरू दिइयो, अर्को के आउने सम्भावना छ?” — र त्यसपछि वास्तविक टोकन छान्न त्यो वितरणबाट sample गर्छ।

Temperature ले त्यो sampling कसरी हुन्छ नियन्त्रण गर्छ:

  • Temperature 0.0 — सधैँ सबैभन्दा सम्भाव्य अर्को टोकन छान्नुहोस्। Output deterministic छ: उही प्रम्प्ट, हरेक पटक उही नतिजा (वा फरक नपर्ने त्यति नजिक)।
  • Temperature 1.0 — सम्भावना वितरणबाट सिधै sample गर्नुहोस्। बढी विविध, बढी creative outputs। उही प्रम्प्टले फरक नतिजा उत्पादन गर्न सक्छ।
  • उच्च (1.5+) — वितरणलाई थप सम्तल पार्नुहोस्, असम्भाव्य टोकनहरूलाई बढी सम्भाव्य बनाउँदै। विरलै उपयोगी; अनौठो वा असंगत पाठ उत्पादन गर्छ।

Dial अधिकांश API मा 0 देखि 2 सम्म जान्छ, तर तपाईं आधारभूत रूपमा 0 र 1 बीचका मान मात्र प्रयोग गर्नुहुनेछ।

कहिले के प्रयोग गर्ने

छोटो, इमानदार मार्गदर्शन:

Temperature 0.0 का लागि:

  • पाठबाट संरचित डाटा निकाल्ने (नाम, रकम, मिति)।
  • पाठलाई श्रेणीमा वर्गीकरण गर्ने।
  • एकल सही परिणाम भएका निर्देशन पालन गर्ने।
  • शुद्धता महत्त्वपूर्ण भएको कोड उत्पन्न गर्ने।
  • नतिजा log गरेर पछि पुनरुत्पादन गर्न सक्ने कुनै पनि काम।

Temperature 0.3-0.5 का लागि:

  • पाठ सारांश (सानो मात्रामा भिन्नता ठीक छ)।
  • तथ्यगत प्रश्नको उत्तर (धेरै deterministic, phrasing भिन्नताको सानो ठाउँ)।
  • फरक शैलीमा पाठ पुनःलेखन (विविधताले मद्दत गर्छ)।

Temperature 0.7-1.0 का लागि:

  • Creative लेखन (कविता, कथा, marketing कपी)।
  • धेरै विकल्प brainstorming।
  • चाटबट व्यक्तित्व जहाँ विविध प्रतिक्रिया बढी प्राकृतिक लाग्छ।
  • कुनै पनि काम जहाँ “मोडेलले मलाई अचम्म पार्नु” bug होइन, feature हो।

प्रदर्शन

फरक मूर्त रूपमा देख्न:

prompt = "Give me a one-sentence description of a good NEPSE trader."

for t in [0.0, 0.5, 1.0]:
    print(f"\n=== temperature={t} ===")
    for i in range(3):
        response = client.messages.create(
            model="claude-haiku-4-5-20251001",
            max_tokens=100,
            temperature=t,
            messages=[{"role": "user", "content": prompt}],
        )
        print(f"  {i+1}: {response.content[0].text.strip()}")

तपाईंले यस्तै देख्नुहुनेछ:

=== temperature=0.0 ===
  1: A good NEPSE trader is disciplined, patient, and understands
     Nepal's market fundamentals before acting on any tip.
  2: A good NEPSE trader is disciplined, patient, and understands
     Nepal's market fundamentals before acting on any tip.
  3: A good NEPSE trader is disciplined, patient, and understands
     Nepal's market fundamentals before acting on any tip.

=== temperature=0.5 ===
  1: A good NEPSE trader is patient, does their own research, and
     avoids acting on hype from social media.
  2: A good NEPSE trader is disciplined about position sizing and
     reads company filings, not just chart patterns.
  3: A good NEPSE trader balances short-term movements with a
     long-term view of Nepal's economy.

=== temperature=1.0 ===
  1: A good NEPSE trader combines local market knowledge with the
     humility to admit when a thesis has broken.
  2: A good NEPSE trader treats capital preservation as sacred and
     lets the compounding do its slow work.
  3: A good NEPSE trader reads the room — knowing when SEBON
     decisions matter more than technical charts.

उही प्रम्प्ट। तीन temperature। 0.0 मा उत्तर स्थिर छ। 0.5 मा framing मा अर्थपूर्ण विविधता छ तर उही समग्र चरित्र। 1.0 मा प्रतिक्रिया बढी भिन्न, बढी essayistic महसुस हुन्छ।

कुनै पनि वस्तुगत रूपमा राम्रो होइन। सही छनोट तपाईंको अनुप्रयोगमा निर्भर हुन्छ।

सूक्ष्म केस: निकालन

सुरुआतीले गर्ने सबैभन्दा सामान्य गल्ती extraction कामका लागि temperature लाई API default (प्रायः 1.0) मा छाड्नु हो। नतिजा “structured output” हो जुन कलहरू बीच फरक हुन्छ — कहिलेकाहीँ फरक field मानसँग, कहिलेकाहीँ पूर्ण रूपमा फरक JSON संरचनासँग।

तुलना गर्नुहोस्:

# Bad: extraction at temperature=1.0
extract_prompt = """
Extract the vendor, amount, and date from this receipt:

"KHALTI PAYMENT — Rs. 1,240 at Bhatbhateni on 2026-06-15"

Return JSON with fields "vendor", "amount", "date".
"""

# Call it three times at temperature=1.0
for _ in range(3):
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=200,
        temperature=1.0,
        messages=[{"role": "user", "content": extract_prompt}],
    )
    print(response.content[0].text)
    print("---")

तपाईंले तीन फरक JSON संरचना देख्न सक्नुहुन्छ — एउटामा "vendor": "Bhatbhateni", अर्कोमा "vendor": "Khalti", तेस्रोमा यो सबै nested object मा बेरिएको। कार्यको एउटा सही उत्तर छ, तर मोडेल sample गर्दैछ र तपाईंलाई असंगत output दिँदैछ।

समाधान: temperature=0.0।

response = client.messages.create(
    model="claude-haiku-4-5-20251001",
    max_tokens=200,
    temperature=0.0,   # deterministic
    messages=[{"role": "user", "content": extract_prompt}],
)

अब तपाईंले हरेक कलमा उही output पाउनुहुन्छ। यदि गलत छ भने, यो लगातार गलत छ — र तपाईं prompt debug र सुधार गर्न सक्नुहुन्छ। यदि यो कलहरू बीच फरक हुन्छ भने, तपाईं भन्न सक्नुहुन्न कुन prompt को दोष हो र कुन sampling को।

अन्य output-shaping नब

Temperature सबैभन्दा ठूलो हो, तर थाहा पाउन लायक थप दुई छन्:

top_p — nucleus sampling। Temperature जस्तै, तर सम्भावना आकार नियन्त्रण गर्नुको सट्टा, यसले वितरणलाई top_p सम्म जम्मा हुने सम्भाव्य टोकनहरूमा मात्र काट्छ। समझदार मान 0.9-1.0 हुन्। अधिकांश समय, temperature ट्युन गर्नुहोस् र top_p एक्लै छाड्नुहोस्।

stop_sequences — strings को सूची जुन उत्पन्न भए मोडेललाई तुरुन्तै रोक्छ। तपाईं विशिष्ट delimiter मा प्रतिक्रिया सकाउन चाहँदा उपयोगी (जस्तै एकल-अनुच्छेद प्रतिक्रियाका लागि \n\n मा रोक्ने)।

response = client.messages.create(
    model="claude-haiku-4-5-20251001",
    max_tokens=400,
    stop_sequences=["\n\nHuman:", "\n\nAssistant:"],
    messages=[...],
)

तपाईं delimiter ठ्याक्कै के हो थाहा पाएको संरचित सामग्री उत्पन्न गर्दा stop_sequences अधिकतम प्रयोग गर्नुहुनेछ। Temperature दैनिक-चालक नब हो।

सिफारिस गरिएको पूर्वनिर्धारित

Course 04 को अधिकांशका लागि, हामी विशेष रूपमा creative केही गरिरहेको छैनौँ भने, हामी प्रयोग गर्नेछौँ:

temperature=0.0
max_tokens=800

temperature=0.0 ले हामीलाई debug गर्न सकिने पुनरुत्पादनयोग्य outputs दिन्छ। max_tokens=800 अधिकांश प्रतिक्रियाका लागि उदार छ (~600 शब्दसम्म) तर अनावश्यक बकबक निम्तो दिँदैन। यिनलाई आफ्नो उपयोगिता function मा एक पटक सेट गर्नुहोस् र यसबारे बिर्सनुहोस्।

जब हामी creativity चाहन्छौँ (chatbot, विचार generator), हामी temperature जानीजानी बढाउनेछौँ — र म स्पष्ट रूपमा भन्नेछु। अरू सबै default determinism मा।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

एक साथीले रिपोर्ट गर्छिन् कि तिनको receipt-parsing pipeline ले कहिलेकाहीँ उही input receipts का लागि `'vendor': 'Khalti'` र कहिलेकाहीँ `'vendor': 'Bhatbhateni'` फर्काउँछ। तिनी GPT-4 सँग temperature=1.0 प्रयोग गर्दैछन्। कोसिस गर्ने पहिलो समाधान के हो?

Quick check

तपाईं नेपाली चाटबट बनाइरहनुभएको छ। मुख्य इन्जिनियरले consistency का लागि सबै कुरा temperature=0.0 मा चलाउन सुझाव दिन्छन्। इमानदार प्रतिक्रिया के हो?

अब के आउँछ

अध्याय 1 सकियो। LLM API के हो, कसरी बोलाउने, यसको लागत के हो, र यसको output कसरी नियन्त्रण गर्ने तपाईंलाई थाहा छ। अध्याय 2 प्रम्प्टिङमा गहिरो जान्छ — उत्पादनसँग सम्पर्कमा टिक्ने प्रम्प्ट लेख्ने, तपाईंले प्रमाणित गर्न सक्ने structured JSON output पाउने, र वास्तविक प्रणालीमा देखा पर्ने वास्तविक त्रुटि र edge cases सम्हाल्ने। यही ठाउँ हो जहाँ LLM engineering ले केवल च्याट होइन, software engineering जस्तो महसुस हुन थाल्छ।