अध्याय १ · खण्ड 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 गर्ने बीचको फरक हो।