ailiteracynepal 🇳🇵
पाठ आकार

अध्याय २ · खण्ड I · 26 मिनेट

उत्पादनमा टिक्ने प्रम्प्ट लेख्ने

साथीलाई प्रभावित पार्ने च्याट प्रम्प्ट र दिनमा 10,000 पटक असफल नभई चल्ने प्रम्प्ट बीचको फरक। पाँच बानी, एउटा कार्य गरिएको उदाहरण, र prompting लाई कलाबाट engineering मा बदल्ने अनुशासन।

अनलाइनमा आफूलाई “prompt engineer” भन्ने मानिसहरूको एक लोकवृत्त श्रेणी छ र viral outputs उत्पादन गर्ने चलाख prompts का screenshots share गर्छन्। तिनले लेखेको लगभग कुनै पनि उत्पादनसँग सम्पर्कमा टिक्दैन। वास्तविक उत्पादन प्रम्प्ट दिनमा दस हजार पटक चल्छ, लेखकले अनुमान गरेको नभएका inputs मा, र या त चुपचाप आफ्नो काम गर्छ या त गोंगमगोंगका बजाउन बिग्रन्छ। Prompt लाई टिकाउने बानी चलाख होइनन् — तिनी बोरिङ, यान्त्रिक, र फैशनविहीन छन्। यो खण्ड ती बानी हो।

पाँच बानी, अगाडि

उत्पादनमा शिप हुने हरेक प्रम्प्टमा, लगभग:

  1. स्पष्ट भूमिका र काम — मोडेल को हो, यसले के गर्दैछ?
  2. स्पष्ट बाधाहरू — लम्बाइ, ढाँचा, भाषा, tone।
  3. मूर्त उदाहरणहरू — कुनै पनि गैर-स्पष्ट कुराका लागि एक-दुई।
  4. प्रम्प्ट आफैमा त्रुटि सम्हाल्ने — जब input अनौठो हुन्छ त्यो बेला के गर्ने।
  5. स्थिर संरचना — भिन्नताहरूमा उही आकार, ताकि downstream कोडले भर पर्न सक्छ।

यीमध्ये हरेक अनाकर्षक छन्। यीमध्ये हरेकले २ बजे राति तपाईंको मुखलाई ढाक्छ जब वास्तविक user ले मोडेलले कहिल्यै नदेखेको कुरा गर्छ।

बानी १ — भूमिका र काम

हरेक गम्भीर प्रम्प्ट system सन्देशबाट सुरु हुन्छ जसले मोडेल को हो र के गर्दैछ भन्छ। तुलना गर्नुहोस्:

Bad: "Summarise this loan application."

Good: "You are a loan-processing assistant for a Nepali microfinance
institution. Given a raw loan application in Nepali or English,
produce a two-sentence English summary highlighting: (1) the loan
amount and purpose, (2) any credit-history flags. Do not include
personal identifying details in the summary."

Bad संस्करण under-specified छ। मोडेलले “summarise” को अर्थ के हो अनुमान गर्नुपर्छ — लम्बाइ, शैली, श्रोता, के समावेश गर्ने, के छाड्ने। फरक कलले फरक उत्तर उत्पन्न गर्छ।

Good संस्करण job description हो। मोडेललाई ठ्याक्कै के उत्पन्न गर्ने थाहा छ किनकि तपाईंले ठ्याक्कै के उत्पन्न गर्ने भन्नुभयो। फरक inputs ले अझै फरक outputs उत्पन्न गर्छन्, तर आकार स्थिर छ।

बानी २ — स्पष्ट बाधाहरू

जब पनि तपाईंको output बारे प्राथमिकता हुन्छ, यसलाई स्पष्ट रूपमा भन्नुहोस्:

  • लम्बाइ: “दुई वाक्यमा”, “100 शब्दभन्दा कम”, “ठ्याक्कै तीन bullet points मा”।
  • ढाँचा: “मान्य JSON का रूपमा”, “क्रमाङ्कित सूचीका रूपमा”, “markdown बिनाको सादा पाठका रूपमा”।
  • भाषा: “देवनागरी लिपि प्रयोग गरेर नेपालीमा उत्तर दिनुहोस्”, “अंग्रेजीमा उत्तर दिनुहोस्”।
  • Tone: “बैंक टेलरको tone मा — भद्र र तटस्थ”, “मैत्रीपूर्ण नेपाली छिमेकीको tone मा”।
  • शैली: “प्राविधिक शब्दजाल टाल्नुहोस्”, “पाठक कक्षा 10 को विद्यार्थी हो भन्ने मान्नुहोस्”।

तपाईंले अन्तर्निहित छाडेको हरेक बाधा भिन्नताको स्रोत बन्छ। तपाईंले स्पष्ट बनाएको हरेक बाधा तपाईंले घुमाउन सक्ने लिभर हो।

बानी ३ — मूर्त उदाहरण (few-shot)

मोडेलले गलत गर्न सक्ने कुनै पनि कुराका लागि, यसलाई उदाहरण दिनुहोस्। यसलाई few-shot prompting भनिन्छ, र यो ठूलो मोडेल भन्दा छोटो सबैभन्दा ठूलो गुणस्तर लिभर हो।

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

Bad: "Classify this SMS as spam or ham."

Good: "Classify each SMS as SPAM or HAM. Examples:

  Input:  'Congratulations! You won Rs 50,000. Reply YES to claim.'
  Output: SPAM

  Input:  'Bhai, are we still meeting for chiya at 5?'
  Output: HAM

  Input:  'URGENT: Your account will be suspended. Click here to verify.'
  Output: SPAM

Now classify:
  Input:  '{message}'
  Output:"

उदाहरणले दुई कुरा गर्छ: तिनले मोडेललाई तपाईं चाहनुभएको ठ्याक्कै ढाँचा देखाउँछन् (एकल-शब्द लेबल, कुनै व्याख्या छैन), र तिनले तपाईंको सन्दर्भमा “spam” कस्तो देखिन्छ भन्ने मोडेलको भावना anchor गर्छन्। नेपाली अनुप्रयोगका लागि, नेपालीमा उदाहरणले धेरै मद्दत गर्छ।

धेरै गाह्रा कामका लागि, अझ धेरै उदाहरण प्रयोग गर्नुहोस् — पाँच वा दस। सरल कामका लागि, दुई प्रायः पर्याप्त छन्। पचास प्रयोग नगर्नुहोस्; प्रम्प्ट लामो हुँदै जाँदा मोडेल भड्कन्छ, र हरेक उदाहरणले टोकन खर्च गर्छ।

बानी ४ — प्रम्प्टमा त्रुटि सम्हाल्ने

वास्तविक user input अराजकता हो। वास्तविक prompts ले त्यसको अनुमान गर्छन्:

"Extract the vendor and amount from the following receipt text.

If the vendor cannot be determined, return "UNKNOWN" as the vendor.
If the amount is missing or unparseable, return null.
If the input is not a receipt at all (e.g. it's a random sentence),
return { "error": "not_a_receipt" }.

Receipt text:
{text}"

प्रम्प्ट आफै अनौठो input सम्हाल्ने नियम समावेश गर्छ। अब downstream कोडसँग सम्हाल्न तीन पूर्वानुमानयोग्य विफलता मोड छन् — वास्तविक vendor, "UNKNOWN", वा error — “यो कति गोंगमगोंग हो” को असीमित सेट होइन।

ढाँचा कुनै पनि scale मा उही छ। आफूलाई सोध्नुहोस्: “input को कुरूप संस्करण कस्तो देखिन्छ?” र मोडेललाई त्यसबारे के गर्ने भन्नुहोस्।

बानी ५ — स्थिर संरचना

Downstream कोडले parse गर्ने कुनै पनि कुराका लागि, ठ्याक्कै संरचना परिभाषित गर्नुहोस् र यसलाई लगातार दोहोर्‍याउनुहोस्:

"Return your answer as JSON with exactly these fields:

{
  "summary": string, 2-3 sentences
  "topics": array of strings, at most 5
  "language": string, one of ['en', 'ne', 'mixed']
}

Return nothing else. No markdown code fences, no explanations."

अब downstream कोडले json.loads प्रतिक्रिया विश्वासका साथ गर्न सक्छ, किनकि prompt ले आकार guarantee गर्छ। हामी अर्को खण्डमा structured output गहिरो रूपमा ओगट्छौँ।

कार्य गरिएको प्रम्प्ट — ऋण अधिकारी सारांश

पाँचै बानी सँगै राख्दा। Course 03 को ऋण अधिकारी परिदृश्यका लागि प्रम्प्ट:

SYSTEM_PROMPT = """You are an assistant to loan officers at a Nepali microfinance
institution. Given a loan application, produce a structured English
summary they can review in 30 seconds.

Guidelines:
- Two-sentence summary, focused on decision-relevant facts.
- Highlight red flags if present: irregular income, high loan-to-income,
  missing collateral information, or applicant is a first-time borrower.
- Never include the applicant's citizenship number, phone, or exact
  address in the summary.
- Respond in English regardless of the application's language.
"""


USER_PROMPT_TEMPLATE = """Loan application:

---
{application_text}
---

Return your response as JSON:

{{
  "summary": string, 2 sentences,
  "red_flags": array of strings (at most 3),
  "confidence": string, one of ["high", "medium", "low"]
}}

If the application text is incomplete, empty, or clearly not a
loan application, return:
  {{"error": "invalid_application", "reason": "brief explanation"}}
"""


def summarise_application(application_text: str) -> dict:
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=600,
        temperature=0.0,
        system=SYSTEM_PROMPT,
        messages=[{
            "role": "user",
            "content": USER_PROMPT_TEMPLATE.format(application_text=application_text),
        }],
    )
    return json.loads(response.content[0].text)

Prompt पढ्नुहोस्। यसमा छन्:

  • स्पष्ट भूमिका (ऋण अधिकारी सहायक) र काम (30 सेकेन्डमा structured सारांश)।
  • स्पष्ट बाधा (दुई वाक्य, अंग्रेजी, कुनै PII छैन)।
  • Field structure मार्फत अन्तर्निहित उदाहरण।
  • खाली/अवैध input का लागि त्रुटि सम्हाल्ने।
  • स्थिर JSON output schema।

0.0 मा Temperature। 600 मा max_tokens — उदार तर bounded। यो prompt सैयौँ आवेदनहरूमा अचम्मबिना भरपर्दो रूपमा चल्नेछ।

प्रम्प्टमा पुनरावृत्ति गर्ने

Prompts एक पटक लेखिँदैनन्। वास्तवमा काम गर्ने workflow:

  1. पाँच बानी पछ्याउँदै पहिलो संस्करण draft गर्नुहोस्।
  2. 5-10 वास्तविक input कोसिस गर्नुहोस्, कम्तीमा एउटा कुरूप सहित।
  3. मोडेलले के गलत गर्‍यो note गर्नुहोस् — गलत ढाँचा, गलत जोड, गलत लम्बाइ, hallucination।
  4. सबैभन्दा सामान्य विफलता सम्बोधन गर्न prompt edit गर्नुहोस्। सामान्यतया तपाईंले बाधा वा उदाहरण थप्नुहुन्छ।
  5. उही 5-10 inputs re-run गर्नुहोस्। केही पुराना विफलताहरू फेरि सतहमा आउन सक्छन् — यो तपाईंका बाधाहरू conflicting छन् भन्ने सङ्केत हो।
  6. Prompt ले पूरै test set भरपर्दो रूपमा सम्हाले सम्म दोहोर्‍याउनुहोस्

Prompt production-ready हुँदासम्म, यो सामान्यतया 5-15 पुनरावृत्तिबाट गएको हुन्छ। यो बोरिङ, इमानदार काम हो। यो पनि हो जसले काम गर्ने र नगर्ने prompts छुट्ट्याउँछ।

के नगर्ने

तीन विरोधी-ढाँचा नाम दिन लायक:

अत्यधिक-बाधा नराख्नुहोस्। तपाईंले थप्ने हरेक नियमले input token खर्च गर्छ र अन्य नियमहरूसँग conflict गर्न सक्छ। बाधाहरू कसिलो र थोरै राख्नुहोस्।

तपाईंका निर्देशनहरूसँग विरोधाभासी उदाहरणहरू मार्फत नियम smuggle नगर्नुहोस्। यदि निर्देशनले “सधैं अंग्रेजीमा उत्तर दिनुहोस्” भन्छ तर तपाईंका उदाहरणहरूले नेपाली प्रतिक्रिया देखाउँछन् भने, मोडेल अल्मल्याइनेछ। निर्देशन र उदाहरण बीचको consistency महत्त्वपूर्ण छ।

अनावश्यक role-play ले मोडेललाई अल्मल्याउनुहुन्न। “You are the greatest loan officer who ever lived, having decades of experience in Nepali microfinance…” ले टोकन थप्छ, गुणस्तर थप्दैन, र prompt लाई मर्मत गर्न अझ गाह्रो बनाउँछ। मूर्त भूमिका र काम > भव्य persona।

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

Quick check

एक सहकर्मीको prompt ले केवल 'Summarise this article' भन्छ। तिनको app ले खतरनाक रूपमा फरक लम्बाइका सारांश उत्पादन गर्छ — कुनै एक अनुच्छेद, कुनै दस। यो खण्डको भाषामा, पहिलो समाधान के हो?

Quick check

SMS वर्गीकरणका लागि उत्पादन prompt ले कहिलेकाहीँ 'This looks like SPAM because...' जस्ता व्याख्या फर्काउँछ केवल 'SPAM' को सट्टा। Downstream कोडले parse गर्न असफल हुन्छ। सबैभन्दा सफा समाधान के हो?

अब के आउँछ

तपाईंले prompts लेख्न सक्नुहुन्छ। अर्को खण्ड structured JSON output पाउनको विशिष्ट केस हो — LLM-in-a-pipeline अनुप्रयोगहरूको कार्यकर्ता ढाँचा। हरेक वास्तविक प्रणालीले JSON मा डाटा सार्छ; मोडेललाई भरपर्दो रूपमा यो उत्पादन गर्न लगाउने आफ्नै एउटा सानो कला हो।