ailiteracynepal 🇳🇵
पाठ आकार

अध्याय १ · खण्ड II · 26 मिनेट

तपाईंको पहिलो कल: प्रम्प्ट, टोकन, र लागत

सबैभन्दा सानो पूर्ण LLM कार्यक्रम, गहिरो रूपमा बुझिएको। हरेक argument ले के गर्छ, टोकन कसरी गनिन्छ, streaming कस्तो देखिन्छ, र खर्च गर्नुअघि लागत कसरी पूर्वानुमान गर्ने।

Course 01 अध्याय 5 ले तपाईंलाई hello-world Anthropic कल दियो: Python का केही लाइन जसले प्रम्प्ट पठाए र प्रतिक्रिया प्रिन्ट गरे। यो खण्ड उही आकारमा फर्किन्छ तर हरेक argument, प्रतिक्रियाको हरेक field, र खर्च भएको हरेक डलरमा गहिरो जान्छ। अन्त्यसम्म तपाईं बाहिर कुनै पनि LLM कल हेर्न र ठ्याक्कै के भइरहेको छ बुझ्न सक्नुहुनेछ — र चलाउनुअघि यसको लागत के हुनेछ पूर्वानुमान गर्न सक्नुहुनेछ।

सेटअप

Course 01 जस्तै। आफ्नो activated virtual environment मा:

pip install anthropic python-dotenv

.env फाइल (कहिल्यै कमिट नगर्ने):

ANTHROPIC_API_KEY=sk-ant-api03-...your-key...

Python सेटअप:

import os
from dotenv import load_dotenv
import anthropic

load_dotenv()
client = anthropic.Anthropic()

यदि त्यसको कुनै पनि अपरिचित छ भने, Course 01 अध्याय 5 पुन: हेर्नुहोस्। यहाँबाट हामी तपाईंसँग काम गर्ने की छ भन्ने मान्दछौं।

कल, टिप्पणीसहित

हरेक argument व्याख्या गरिएको सबैभन्दा सानो उपयोगी कल:

response = client.messages.create(
    model="claude-haiku-4-5-20251001",
    max_tokens=400,
    messages=[
        {"role": "user", "content": "Summarise today's Kathmandu weather in two Nepali sentences."},
    ],
)

print(response.content[0].text)
print()
print(f"Input tokens:  {response.usage.input_tokens}")
print(f"Output tokens: {response.usage.output_tokens}")
print(f"Stop reason:   {response.stop_reason}")

एक-एक गरी बुझ्न लायक छ arguments र fields।

model

कुन विशिष्ट मोडेल बोलाउने। 2026 को बीचमा Anthropic को line-up:

  • claude-haiku-4-5-20251001 — सानो, छिटो, सस्तो। अधिकांश कामका लागि उत्कृष्ट पूर्वनिर्धारित।
  • claude-sonnet-4-6 — मध्य-tier, राम्रो तर्क, अझै किफायती।
  • claude-opus-4-7 — शीर्ष tier, सर्वोत्तम तर्क, महँगो।

सिक्नका लागि र अधिकांश वास्तविक अनुप्रयोगका लागि, Haiku सही पूर्वनिर्धारित हो। राम्रो तर्क वा बहुभाषी गुणस्तर चाहिँदा Sonnet मा पुग्नुहोस्; सबैभन्दा गाह्रा कामका लागि वा गुणस्तर लागतभन्दा स्पष्ट रूपमा बढी महत्त्वपूर्ण हुँदा Opus मा पुग्नुहोस्।

max_tokens

output टोकनमा प्रतिक्रिया कति लामो हुन सक्छ भन्ने माथिल्लो सीमा। max_tokens=400 ले तपाईंलाई बढीमा ~300 शब्दको प्रतिक्रिया दिन्छ। यो जानीजानी सेट गर्नुहोस् — ठूलो छाड्दा मोडेललाई बकबक गर्न निम्तो दिन्छ, जसले पैसा खर्च गर्छ।

messages

अहिलेसम्मको कुराकानी, {role, content} शब्दकोशहरूको सूचीका रूपमा। भूमिका user (तपाईं) वा assistant (बहु-टर्न कुराकानीमा मोडेलका विगत प्रतिक्रिया) हुन्छ। एकल-टर्न कलका लागि तपाईंले एउटा user सन्देश पठाउनुहुन्छ, जस्तै यहाँ।

response.content[0].text

उत्पन्न गरिएको पाठ। .content सामग्री ब्लकहरूको सूची हो; पाठ-मात्र प्रतिक्रियाका लागि ठ्याक्कै एउटा ब्लक हुन्छ, र यसमा .text ले तपाईंलाई string दिन्छ। यो असामान्य संरचना भविष्यमा multi-modal प्रतिक्रिया (पाठ + छवि) समर्थन गर्न अस्तित्वमा छ।

response.usage

Billing का लागि टोकन गन्ती। input_tokens तपाईंले पठाएको हो (system prompt भए त्यो सहित); output_tokens फर्किएको हो। मोडेलको प्रति-टोकन मूल्यले यिनलाई गुणन गर्नुहोस् कलको ठ्याक्कै लागत जान्न।

response.stop_reason

मोडेलले किन उत्पादन रोक्यो:

  • "end_turn" — मोडेल स्वाभाविक रूपमा सकियो।
  • "max_tokens" — तपाईंले max_tokens सीमा हान्नुभयो; प्रतिक्रिया कटौती गरियो।
  • "stop_sequence" — तपाईंले custom stop sequence प्रदान गर्नुभयो र यो देखा पर्‍यो।
  • "tool_use" — मोडेल औजार बोलाउन चाहन्छ (अध्याय 6 क्षेत्र)।

उत्पादन कोडमा यो सधैँ जाँच्नुहोस्। max_tokens stop को अर्थ तपाईंले आंशिक उत्तर पाउनुभयो।

System prompts

हरेक गम्भीर LLM कलमा system prompt समावेश हुन्छ — मोडेललाई यसको भूमिका र व्यवहारबारे निर्देशन जुन पूरा कुराकानीमा प्रभावमा रहन्छ:

response = client.messages.create(
    model="claude-haiku-4-5-20251001",
    max_tokens=400,
    system=(
        "You are a Nepali-speaking assistant helping small shopkeepers "
        "in Nepal. Answer in plain Nepali (Devanagari). Keep responses "
        "under three sentences unless asked otherwise. Do not use jargon."
    ),
    messages=[
        {"role": "user", "content": "How can I accept mobile payments?"},
    ],
)

System prompt त्यो ठाउँ हो जहाँ तपाईं मोडेललाई भन्नुहुन्छ यो को होयसले कसरी व्यवहार गर्नुपर्छ। यसपछिको सबै त्यो पहिले नै-कन्फिगर गरिएको सहायकलाई प्रयोगकर्ताले प्रश्न सोध्नु हो।

राम्रा system prompt का लागि दुई नियम:

  • विशिष्ट बन्नुहोस्। “You are a helpful assistant” बेकार छ। “You are a Nepali-speaking assistant for small shopkeepers, respond in three sentences of plain Nepali” उपयोगी छ।
  • छोटो बनाउनुहोस्। लामो system prompts ले हरेक कलमा input टोकन खान्छन्। यसलाई कसिलो राख्नुहोस्।

टोकन के हो, मूर्त रूपमा

टोकन मोडेलले पढ्ने र उत्पन्न गर्ने एकाइहरू हुन्। तिनी शब्द होइनन् — टोकन सामान्यतया शब्दको टुक्रा, सामान्य शब्द, वा विराम चिन्ह हो। Claude को tokeniser सँग केही उदाहरण (अनुमानित):

  • "Hello" → 1 टोकन
  • "Kathmandu" → 1 टोकन
  • "unfortunately" → 2 टोकन ("un" + "fortunately")
  • "नमस्कार" (देवनागरी) → 3-4 टोकन
  • "तपाईं कस्तो हुनुहुन्छ?" → 12-15 टोकन

अङ्गुष्ठ नियम:

  • अंग्रेजी पाठ: ~1.3 टोकन प्रति शब्द।
  • नेपाली (देवनागरी): ~2-3 टोकन प्रति शब्द — अंग्रेजीको लगभग 2x।
  • कोड: चर, तर सामान्यतया अंग्रेजी भन्दा घनो।
  • JSON: विराममा घनो, त्यसैले prose भन्दा प्रति अक्षर बढी टोकन।

नेपाली-केन्द्रित अनुप्रयोगका लागि, अक्षर होइन, टोकनमा सधैँ बजेट बनाउनुहोस्। 500-शब्दको नेपाली प्रतिक्रिया लगभग 1000-1500 टोकन हो।

लागत पूर्वानुमान

500 input टोकन र 200 output टोकनसहितको Claude Haiku कलका लागि, 2025 को अन्त्यको मूल्यमा (~$0.25/M input, $1.25/M output):

cost = (500 / 1_000_000) * $0.25 + (200 / 1_000_000) * $1.25
     = $0.000125 + $0.00025
     = $0.000375

डलरको तीन दस-हजारांश। महिनामा दस लाख यस्तो कलका लागि:

monthly = 1_000_000 * $0.000375 = $375

सम्हाल्न मिल्ने। Opus मा उही कल करिब $0.024 हुन्थ्यो — साठी गुणा बढी, र उही मात्रामा $24,000/महिना। Model छनोट scale मा वास्तविक पैसा हो।

Streaming प्रतिक्रिया

अन्तरक्रियात्मक UI का लागि, तपाईं विरलै केही देखाउनुअघि पूर्ण प्रतिक्रियाको लागि पर्खन चाहनुहुन्छ। Streaming सक्षम गर्नुहोस् र पाठ टोकन-टोकनमा आउँछ:

with client.messages.stream(
    model="claude-haiku-4-5-20251001",
    max_tokens=400,
    messages=[
        {"role": "user", "content": "Explain NEPSE to a shopkeeper in Nepali."},
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    print()

पहिलेजस्तै उही कल, तर तपाईंले शब्दहरू उत्पन्न हुँदै देख्नुहुन्छ। कथित latency नाटकीय रूपमा घट्छ। कुनै पनि chat-शैली UI का लागि, streaming पूर्वनिर्धारित हो; batch प्रतिक्रिया background job र script का लागि हो।

न्यूनतम, इमानदार सुरुवात स्क्रिप्ट

हरेक गम्भीर परियोजना API कल बेर्ने, बोरिङ भाग सम्हाल्ने, र सफा output फर्काउने सानो उपयोगिताबाट सुरु हुन्छ:

import os
from dataclasses import dataclass
from dotenv import load_dotenv
import anthropic

load_dotenv()
_client = anthropic.Anthropic()


@dataclass
class LLMResponse:
    text: str
    input_tokens: int
    output_tokens: int
    stop_reason: str
    cost_usd: float


HAIKU_INPUT_PER_M  = 0.25
HAIKU_OUTPUT_PER_M = 1.25


def ask(user_message: str, system: str = "", max_tokens: int = 400) -> LLMResponse:
    response = _client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=max_tokens,
        system=system if system else anthropic.NOT_GIVEN,
        messages=[{"role": "user", "content": user_message}],
    )
    text = response.content[0].text
    in_tok, out_tok = response.usage.input_tokens, response.usage.output_tokens
    cost = (in_tok / 1_000_000) * HAIKU_INPUT_PER_M + (out_tok / 1_000_000) * HAIKU_OUTPUT_PER_M
    return LLMResponse(text, in_tok, out_tok, response.stop_reason, cost)


if __name__ == "__main__":
    r = ask(
        "Summarise today's Kathmandu weather in two Nepali sentences.",
        system="You are a friendly Nepali weather assistant.",
    )
    print(r.text)
    print(f"\n[cost: ${r.cost_usd:.5f}{r.input_tokens} in / {r.output_tokens} out]")

तीस लाइन। सफा इन्टरफेस। हरेक कलमा लागत देखिन्छ। यो आकार तपाईंले Course 04 को बाँकीका लागि निर्माण गर्ने हो।

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

Quick check

तपाईंको LLM कलले पाठ फर्काउँछ तर `stop_reason` `'max_tokens'` छ। त्यसले तपाईंलाई के भन्छ, र तपाईंले के गर्नुपर्छ?

Quick check

एक अनुप्रयोगले हरेक user सन्देशका लागि Claude Haiku बोलाउँछ। औसत कल 300 input टोकन र 400 output टोकन छ। मूल्य: $0.25 प्रति million input, $1.25 प्रति million output। प्रति 10,000 user सन्देशको अनुमानित लागत के हो?

अब के आउँछ

तपाईंसँग कल छ, यसको लागत के हो थाहा छ, किन रोकियो थाहा छ। अध्याय 1 को अन्तिम टुक्रा temperature हो — output कति deterministic (वा creative) हुन्छ नियन्त्रण गर्न सबैभन्दा महत्त्वपूर्ण एकल नब। तपाईंको कामका लागि यसलाई सही सेट गर्नु उपयोगी सहायक र त्यो या त बोर गर्ने वा hallucinate गर्ने बीचको फरक हो।