SSD Nodes Learn
تعلیمی Matt Connorتحریر: Matt Connor · اپ ڈیٹ شدہ 2026-07-25

Claude API VPS پر پہلی Python ایپ کیسے بنائیں

Ubuntu 24.04 پر Claude API کلید محفوظ کریں اور Python لاگ وضاحت کنندہ بنائیں۔ اسٹریمنگ، ٹائپڈ ایکسسیپشن ہینڈلنگ اور لاگت کنٹرول شامل۔ systemd یونٹ سے آٹو چلائیں۔

آپ کیا بنا رہے ہیں

ایک کمانڈ لائن ٹول جو ایک بالکل نئے Ubuntu 24.04 VPS پر چلتا ہے۔ آپ اس میں کوئی ایرر میسج یا لاگ کا ٹکڑا پائپ کرتے ہیں اور بدلے میں سادہ اردو میں تشخیص حاصل کرتے ہیں: journalctl -u nginx -n 50 | explain۔ یہ تقریباً ساٹھ سطروں کا Python کوڈ ہے۔ یہ وہ سب کچھ استعمال کرتا ہے جو ایک حقیقی Claude API ایپلیکیشن کو درکار ہوتا ہے — کلید کی درست ذخیرہ کاری، ایک virtualenv، SDK کے ریسپانس کے ڈھانچے، اسٹریمنگ، ٹائپڈ ایکسسیپشن چین، اور ایک systemd یونٹ تاکہ یہ آپ کے بغیر چل سکے۔

میں نے اس پروجیکٹ کو جان بوجھ کر چنا ہے۔ زیادہ تر "پہلی API ایپ" ٹیوٹوریلز میں آپ سے ایک چیٹ بوٹ بنوایا جاتا ہے جسے آپ دوبارہ کبھی نہیں کھولتے۔ ایک لاگ وضاحت کنندہ پہلے دن سے ہی سرور پر اپنی اہمیت ثابت کرتا ہے۔ یہ آپ کو ان دو چیزوں سے گزارتا ہے جنہیں مبتدی اصل میں غلط کرتے ہیں: ریسپانس آبجیکٹ کو درست طریقے سے پڑھنا اور خرچے کو کنٹرول کرنا۔ API ہر ٹوکن کے حساب سے بل بھیجتا ہے۔ اس کی کوئی حد نہیں ہے سوائے ان حدود کے جو آپ خود مقرر کرتے ہیں۔ لہذا یہاں لاگت کا کنٹرول ایک ڈیزائن کا حصہ ہے، بعد میں سوچی جانے والی بات نہیں — یہ وہی نظم و ضبط ہے جو اہمیت رکھتا ہے جب آپ اسی VPS پر tmux میں Claude Code چلانے کی طرف بڑھتے ہیں۔

کنسول سے API کلید حاصل کریں

API تک رسائی Anthropic Console میں platform.claude.com پر منظم ہوتی ہے — سائن اپ کریں، پھر Settings → API Keys کے تحت کلید بنائیں (دستاویزات براہ راست platform.claude.com/settings/keys سے جڑتی ہیں)۔ کلید ایک بار دکھائی دیتی ہے، sk-ant- سے شروع ہوتی ہے، اور دوبارہ حاصل نہیں کی جا سکتی — فوراً اسے کاپی کریں یا حذف کر کے نئی جاری کریں۔

رقم کے بارے میں: جولائی 2026 تک API کے لیے کوئی مستقل مفت ٹیئر نہیں ہے۔ Anthropic کی قیمتوں کی دستاویزات کہتی ہیں کہ نئے صارفین کو آزمائش کے لیے تھوڑی مقدار میں مفت کریڈٹ ملتے ہیں؛ عین مقدار وہی ہے جو کنسول سائن اپ کے وقت آپ کو دکھاتا ہے، اور ایک بار ختم ہونے کے بعد آپ کو درخواستیں کامیاب ہونے سے پہلے اکاؤنٹ میں رقم جمع کرانی ہوتی ہے۔ یہ claude.ai سبسکرپشن سے الگ ہے — Pro یا Max پلان میں API کریڈٹ شامل نہیں، اور API کلید آپ کو چیٹ ایپ نہیں دیتی۔ اگر آپ سبسکرپشن اور API کے درمیان فیصلہ کر رہے ہیں، تو وہ تقابل ایک الگ موضوع ہے: آپ کو اصل میں کون سا Claude پلان درکار ہے۔

کلید کو ایک پروجیکٹ یا سرور تک محدود بنا کر بنائیں۔ جب کلید لیک ہوتی ہے — اور کافی طویل عرصے میں ایک نہ ایک لیک ہوگی — تو آپ اسے باقی سب کچھ توڑے بغیر منسوخ کرنا چاہیں گے۔

کلید کو .bashrc سے باہر رکھیں

عام رجحان ~/.bashrc میں export ANTHROPIC_API_KEY=sk-ant-... ہے۔ ایسا نہ کریں۔ تین الگ مسائل ہیں:

  • ہر پروسیس اسے وراثت میں پاتی ہے۔ آپ کے لاگن شیل میں ایکسپورٹ کی گئی ماحول متغیر ہر اس چیز میں پھیل جاتی ہے جو آپ چلاتے ہیں — ویب ایپ، کریش رپورٹر جو مددگار طریقے سے اپنے ماحول کو بگ رپورٹ میں ڈمپ کر دیتا ہے، اور phpinfo() پیج جسے کسی نے فعال چھوڑا ہوا تھا۔ کلید کی نمائش کی سطح "وہ سب کچھ" بن جاتی ہے جو یہ صارف کبھی چلاتا ہے۔
  • اسے ٹائپ کرنا ~/.bash_history میں لے جاتا ہے۔ ایک بار ایکسپورٹ کو ہاتھ سے چلائیں اور آپ کی کلید ایک plaintext فائل میں ہمیشہ کے لیے رہ جاتی ہے، اور آپ کی home ڈائریکٹری کے ہر بیک اپ میں sync ہو جاتی ہے۔
  • جب systemd کو اس کی ضرورت ہوتی ہے تو وہ وہاں موجود نہیں ہوتی۔ سروسز آپ کا .bashrc نہیں پڑھتیں، اس لیے یہ پیٹرن بالکل اس وقت ناکام ہو جاتا ہے جب آپ اسکرپٹ کو یونٹ میں اپ گریڈ کرتے ہیں — عام طور پر صبح 6 بجے ایک پراسرار 401 کی صورت میں۔

سرور پر درست پیٹرن 600 اجازتوں کے ساتھ ایک مخصوص ماحول فائل ہے، جسے صرف وہ پروسیس لوڈ کرے جسے اس کی ضرورت ہو:

sudo mkdir -p /opt/explain
sudo install -m 600 -o root -g root /dev/null /etc/claude-explain.env
printf 'ANTHROPIC_API_KEY=sk-ant-YOUR-KEY-HERE\n' | sudo tee /etc/claude-explain.env >/dev/null

اگر آپ کلید کو ایڈیٹر swap فائلوں سے باہر رکھنا چاہتے ہیں تو ایڈیٹر کے بجائے printf سے tee استعمال کریں؛ کسی بھی صورت میں، ls -l /etc/claude-explain.env کے ساتھ تصدیق کریں کہ یہ -rw------- پڑھتا ہے اور root کی ملکیت ہے۔ انٹرایکٹو شیلز کلید کو ہر بار کال پر ایک ریپر کے ذریعے حاصل کرتی ہیں (نیچے)، اور systemd اسے EnvironmentFile= کے ذریعے حاصل کرتا ہے — root فائل کو پڑھتا ہے اس سے پہلے کہ وہ اپنے حقوق کم کرے، اس لیے سروس صارف کو اسے پڑھنے کی اجازت کی ضرورت ہی نہیں پڑتی۔ کلید کبھی کوڈ میں، git میں، ps آؤٹ پٹ میں، یا شیل ہسٹری میں ظاہر نہیں ہوتی۔

venv میں SDK انسٹال کریں

Ubuntu 24.04 میں Python 3.12 اور PEP 668 کی پابندی شامل ہے، اس لیے سسٹم انٹرپریٹر کے خلاف براہ راست pip install anthropic ناکام ہو جاتا ہے اور error: externally-managed-environment کی خرابی دیتا ہے۔ یہ خرابی آپریٹنگ سسٹم کی متوقع رویے ہے — ایک virtualenv استعمال کریں:

sudo apt update && sudo apt install -y python3-venv
sudo python3 -m venv /opt/explain/venv
sudo /opt/explain/venv/bin/pip install anthropic

سرور پر اسے فعال کرنے کی کوئی رسم درکار نہیں: /opt/explain/venv/bin/python کو براہ راست کال کرنا ہمیشہ venv کے پیکیجز استعمال کرتا ہے۔

پہلا کال، اور جواب کی درست قرات

import anthropic

client = anthropic.Anthropic()  # reads ANTHROPIC_API_KEY from the environment

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1000,
    messages=[{"role": "user", "content": "Explain what a systemd unit file is in three sentences."}],
)

for block in response.content:
    if block.type == "text":
        print(block.text)

ان بارہ سطروں میں دو چیزیں API کے ذہنی ماڈل کا زیادہ تر حصہ رکھتی ہیں۔ پہلا، anthropic.Anthropic() بغیر کسی argument کے کلید کو ماحول سے پڑھتا ہے — اسے کبھی بھی string literal کے طور پر نہ پاس کریں۔ دوسرا، response.content content blocks کی ایک فہرست ہے، string نہیں۔ اسے براہ راست پرنٹ کریں تو کلاسک ابتدائی آؤٹ پٹ ملے گا:

[TextBlock(citations=None, text='A systemd unit file is...', type='text')]

یہ کوئی bug نہیں ہے؛ یہ object کا repr ہے۔ جوابات میں متعدد block types ہو سکتے ہیں (text، tool calls، thinking)، اس لیے آپ block.type == "text" کو چیک کرنے سے پہلے .text کو iterate کرتے ہیں۔ یہ loop پہلے دن ہی لگا دیں تو "it prints garbage" کی الجھن کا پورا زمرہ پیدا ہی نہیں ہوتا۔

عین ماڈل ID claude-opus-4-8 استعمال کریں۔ current-generation IDs میں تاریخ نہیں ہوتی — اس عضلاتی یادداشت (یا پرانی blog post) کے خلاف مزاحمت کریں جو آپ کو date suffix لگانے کے لیے کہتی ہے؛ اس سے 404 پیدا ہوتا ہے، جس کا ذکر نیچے کیا گیا ہے۔

اصل ٹول: explain

یہ مکمل پروگرام ہے — stdin سے ان پٹ، اسٹریمڈ تشخیص آؤٹ پٹ، اور خرابیوں کا مناسب ہینڈلنگ:

#!/usr/bin/env python3
"""explain: pipe an error or log excerpt in, get a diagnosis out."""
import sys
import anthropic

MODEL = "claude-opus-4-8"

def main() -> int:
    text = sys.stdin.read().strip()
    if not text:
        print("usage: journalctl -u nginx -n 50 | explain", file=sys.stderr)
        return 1

    client = anthropic.Anthropic()
    try:
        with client.messages.stream(
            model=MODEL,
            max_tokens=1500,
            system=(
                "You are a senior Linux sysadmin. The user pipes you server "
                "logs or error output. Name the most likely cause outright, "
                "then give the commands to confirm and fix it. Be terse."
            ),
            messages=[{"role": "user", "content": text}],
        ) as stream:
            for chunk in stream.text_stream:
                print(chunk, end="", flush=True)
        print()
    except anthropic.RateLimitError as e:
        retry_after = e.response.headers.get("retry-after", "60")
        print(f"rate limited; retry in {retry_after}s", file=sys.stderr)
        return 2
    except anthropic.APIStatusError as e:
        print(f"API error {e.status_code}: {e.message}", file=sys.stderr)
        return 2
    except anthropic.APIConnectionError:
        print("network error reaching the API", file=sys.stderr)
        return 2
    return 0

if __name__ == "__main__":
    sys.exit(main())

اسے /opt/explain/explain.py کے نام سے محفوظ کریں، پھر ایک ریپر شامل کریں جو انٹرایکٹو استعمال کے لیے کلید لوڈ کرے:

sudo tee /usr/local/bin/explain >/dev/null <<'EOF'
#!/bin/sh
set -a; . /etc/claude-explain.env; set +a
exec /opt/explain/venv/bin/python /opt/explain/explain.py "$@"
EOF
sudo chmod 755 /usr/local/bin/explain

(ریپر کو sudo کے ذریعے چلنا چاہیے، یا env فائل میں ایسا گروپ ہونا چاہیے جس کا آپ کا ایڈمن یوزر رکن ہو — فائل کو 644 تک ڈھیلا کرنے کے بجائے ان میں سے ایک کو دانستہ طور پر منتخب کریں۔)

اسٹریمنگ کیوں۔ client.messages.stream ٹوکنز کو اسی وقت پرنٹ کرتا ہے جیسے ہی وہ پہنچتے ہیں، بجائے اس کے کہ پوری جنریشن کے دوران خاموش رہے، اور یہ طویل آؤٹ پٹس پر HTTP ٹائم آؤٹس سے بچتا ہے — SDK دراصل غیر اسٹریمنگ کالز پر بہت بڑی max_tokens ویلیوز کو اسی وجہ سے مسترد کرتا ہے۔ اگر آپ کو بعد میں اسمبلڈ آبجیکٹ درکار ہو، تو with بلاک کے اندر stream.get_final_message() کو کال کریں۔

وہ ایکسپشن ترتیب کیوں۔ SDK ٹائپڈ ایکسپشنز اٹھاتا ہے، سب سے پہلے سب سے مخصوص: RateLimitError ایک 429 ہے اور اس میں retry-after ہیڈر موجود ہوتا ہے جو بتاتا ہے کہ کتنی دیر انتظار کریں؛ APIStatusError دیگر non-2xx ریپنسز کا احاطہ کرتا ہے (سرور سائیڈ پریشانی کے لیے e.status_code >= 500 چیک کریں)؛ APIConnectionError کا مطلب ہے کہ درخواست کو کوئی ریپنس ہی نہیں ملی۔ اور ریٹری لوپ بنانے سے پہلے: SDK پہلے ہی خود 429s اور 5xx ایررز کو ریٹری کرتا ہے، ڈیفالٹ طور پر دو بار ایکسپونینشل بیک آف کے ساتھ (کلائنٹ پر max_retries)۔ جب آپ کا except چلتا ہے، تو ریٹریز ختم ہو چکی ہوتی ہیں — لہذا ایک CLI میں درست اقدام رپورٹ کرنا اور باہر نکلنا ہے، نہ کہ سلیپ کرنا اور بار بار کوشش کرنا۔

لاگت کا کنٹرول

اس کا اپنا الگ سیکشن مستحق ہے کیونکہ آپ کی تشکیل کردہ حد کے علاوہ API میں کوئی بلٹ ان ماہانہ حد نہیں ہے، اور یہاں کی ہر غلطی خاموشی سے بڑھتی چلی جاتی ہے۔

max_tokens آپ کی ہر کال کے لیے خرچ کی حد ہے۔ آؤٹ پٹ ٹوکنز مہنگے ہوتے ہیں — Opus 4.8 پر ان کی قیمت ان پٹ سے پانچ گنا زیادہ ہے — اور max_tokens اس بات کی سخت حد ہے کہ ماڈل کتنے ٹوکنز پیدا کر سکتا ہے۔ بھٹکا ہوا پرامپٹ آپ کی اجازت سے زیادہ آؤٹ پٹ کی لاگت نہیں کا سکتا۔ اسے کام کے مطابق طے کریں: 1,500 ٹوکنز لاگ تشخیص کے لیے کافی ہیں؛ ایک درجہ بندی کے کام کو 100 چاہیے۔ اگر جوابات stop_reason: "max_tokens" کے ساتھ جملے کے درمیان رک جاتے ہیں، تو آپ نے حد بہت تنگ رکھی ہے — اسے بڑی ڈیفالٹ پر لے جانے کے بجائے شعوری طور پر بڑھائیں۔

بھیجنے سے پہلے شمار کریں۔ ان پٹ کی بھی قیمت ادا کرنی پڑتی ہے، اور لاگز بھاری ہوتے ہیں۔ API میں ایک شمار کرنے والا اینڈ پوائنٹ ہے جس کا استعمال مفت ہے (اس کی اپنی ریٹ لمٹس ہیں، جو پیغام بنانے سے الگ ہیں):

count = client.messages.count_tokens(
    model="claude-opus-4-8",
    messages=[{"role": "user", "content": big_log_text}],
)
print(count.input_tokens)

اسے غلطی سے 2 GB کے لاگ کو ٹول سے گزارنے سے بچنے کے لیے استعمال کریں۔ اس کے لیے tiktoken کا استعمال نہ کریں — یہ OpenAI کا ٹوکنائزر ہے، اور یہ عام متن پر Claude ٹوکنز کی گنتی تقریباً 15–20% کم کرتا ہے، اور کوڈ پر اس سے بھی زیادہ۔

ماڈل وفاداری کے بجائے کام کے لحاظ سے منتخب کریں۔ جولائی 2026 تک، Opus 4.8 (claude-opus-4-8) $5 فی ملین ان پٹ ٹوکنز اور $25 فی ملین آؤٹ پٹ پر چلتا ہے؛ Haiku 4.5 (claude-haiku-4-5) $1/$5 ہے جس میں 200K کنٹیکسٹ ہے؛ Sonnet 5 (claude-sonnet-5) $3/$15 پر درمیان میں ہے، جس میں 31 اگست، 2026 تک تعارفی $2/$10 قیمت ہے۔ ٹھوس طور پر: 2,000-ٹوکن لاگ اقتباس اور 500-ٹوکن جواب کی لاگت Opus پر تقریباً $0.0225 اور Haiku پر $0.0045 ہے۔ آؤٹ پٹ کوالٹی کا اندازہ لگاتے ہوئے Opus سے شروع کریں، پھر وہی پرامپٹس Haiku پر آزمائیں — زیادہ مقدار والی، سادہ تبدیلیوں کے لیے یہ اکثر پانچویں حصے کی قیمت پر بھی ممتاز نہیں ہوتا۔ کسی بجٹ میں اسے ہارڈ کوڈ کرنے سے پہلے موجودہ اعداد و شمار کو پرائسنگ پیج پر تصدیق کریں۔

جو کچھ انتظار کر سکتا ہے اس کے لیے بیچز۔ Batches API درخواستوں کو غیر مطابقت پذیر طریقے سے معیاری قیمتوں کے 50% پر پروسیس کرتا ہے، اور زیادہ تر بیچز ایک گھنٹے کے اندر مکمل ہو جاتے ہیں۔ رات کے ڈائجسٹس، بیک فلز، بڑے پیمانے پر درجہ بندی — جس میں کوئی انسان انتظار نہیں کر رہا، وہ سب وہیں تعلق رکھتا ہے۔

دہرائے گئے کنٹیکسٹ کے لیے پرامپٹ کیشنگ۔ اگر ہر کال ایک ہی بڑا سسٹم پرامپٹ یا رن بک دوبارہ بھیجتی ہے، تو اسے کیشے کے قابل کے طور پر نشان زد کریں:

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1000,
    system=[{
        "type": "text",
        "text": RUNBOOK_TEXT,  # the same 30K tokens on every call
        "cache_control": {"type": "ephemeral"},
    }],
    messages=[{"role": "user", "content": question}],
)
print(response.usage.cache_read_input_tokens)  # non-zero from the second call on

کیش رائٹس کی لاگت ان پٹ قیمت کا تقریباً 1.25 گنا ہے، کیش ریڈز تقریباً 0.1 گنا، 5 منٹ کی TTL پر — لہذا ونڈو کے اندر دوسری کال پہلی کی لاگت پہلے ہی ادا کر چکی ہوتی ہے۔ دو باتیں۔ کیشڈ پری فکس کو ہر ماڈل کی کم سے کم حد پار کرنی چاہیے — Opus پر کچھ ہزار ٹوکنز — لہذا ایک مختصر سسٹم پرامپٹ خاموشی سے کیش نہیں ہوگا۔ اور اگر cache_read_input_tokens ایک جیسی کالز پر صفر رہتا ہے، تو آپ کے پری فکس میں کچھ ہر درخواست پر تبدیل ہو رہا ہے (ٹائم اسٹیمپ عام مجرم ہے)۔

یاد رکھیں کہ ان پٹ میں کیا شمار ہوتا ہے۔ سسٹم پرامپٹس، ٹول تعریفیں، اور — ملٹی ٹرن گفتگو میں — ہر ٹرن پر دوبارہ بھیجا جانے والا پورا ہسٹوری ان پٹ ٹوکنز کے طور پر بل ہوتا ہے۔ ایک چیٹ لوپ جو ہسٹری کو کبھی نہیں کاٹتا، اس کی لاگت چوکور طور پر بڑھتی ہے۔ کوئی بھی چیتی سہولت بنانے سے پہلے مکمل حساب کتاب سمجھنا مفید ہے: Claude ٹوکن استعمال اور بلنگ درحقیقت کیسے جمع ہوتی ہے۔

اسے systemd کے تحت چلائیں

ماحول فائل کے نظم و ضبط کا فائدہ: ایک ٹائمر جو ہر صبح کل کی غلطیوں کا خلاصہ پیش کرتا ہے۔

# /etc/systemd/system/log-digest.service
[Unit]
Description=Daily error-log digest via the Claude API

[Service]
Type=oneshot
User=explain
Group=systemd-journal
EnvironmentFile=/etc/claude-explain.env
ExecStart=/bin/sh -c 'journalctl -p err --since yesterday | /opt/explain/venv/bin/python /opt/explain/explain.py >> /var/log/log-digest.txt'
# /etc/systemd/system/log-digest.timer
[Unit]
Description=Run the log digest every morning

[Timer]
OnCalendar=06:15
Persistent=true

[Install]
WantedBy=timers.target
sudo useradd -r -s /usr/sbin/nologin explain
sudo touch /var/log/log-digest.txt && sudo chown explain /var/log/log-digest.txt
sudo systemctl daemon-reload
sudo systemctl enable --now log-digest.timer
sudo systemctl start log-digest.service   # test it once, right now

یہ بات نوٹ کریں کہ EnvironmentFile= آپ کو کیا فراہم کرتا ہے: systemd روٹ کی ملکیت والی، mode-600 فائل کو غیر مراعات یافتہ explain صارف پر آ جانے سے پہلے پڑھتا ہے، لہذا عمل کو ویری ایبل مل جاتا ہے جبکہ صارف کلیدی فائل نہیں پڑھ سکتا۔ systemd-journal گروپ لاگ تک رسائی دیتا ہے۔ ایک دستی systemctl start کے ساتھ ٹیسٹ کریں اور journalctl -u log-digest.service پڑھیں — کسی ٹائپو کی وجہ سے 06:15 کا انتظار نہ کریں۔ جب یہ پیٹرن شیل پائپ لائن سے بڑھ جاتا ہے، تو کلیدی-فائل-میں-ماحول کا یہی طریقہ اسی مشین پر Claude سے چلنے والے n8n ورک فلو میں براہ راست منتقل ہو جاتا ہے۔

ناکامی کے طریقے، جن سے متعلقہ اسٹرنگز آپ کو نظر آئیں گے

درست کلید پر 401۔ استثنا یہ کہتی ہے:

anthropic.AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CSHoEeqs5C35K2UUqR7Fy'}

اگر کلید آپ کے شیل میں کام کرتی ہے لیکن سروس 401 دیتی ہے، تو سروس نے اسے کبھی موصول نہیں کیا — یاد رکھیں کہ systemd یہ .bashrc نہیں پڑھتا؛ چیک کریں کہ EnvironmentFile= صحیح راستے کی طرف اشارہ کرتا ہے۔ دیگر وجوہات: env فائل میں پیسٹ کیے گئے کوٹیشن مارکس (ANTHROPIC_API_KEY="sk-ant-..." — systemd کوٹیشن مارکس خارج کر دیتا ہے، لیکن آپ کے شیل ریپر کا . file انہیں ویلیو میں شامل رکھتا ہے اگر آپ نے عجیب انداز میں کوٹ کیا تھا)، آخر میں وائٹ اسپیس، یا وہ کلید جسے آپ نے پچھلے ہفتے کنسول میں منسوخ کر دی تھی۔

ماڈل کی ٹائپو سے 404۔ اس کی سب سے عام شکل موجودہ ماڈل ID کے ساتھ تاریخ کا لاحقہ لگانا ہے:

anthropic.NotFoundError: Error code: 404 - {'type': 'error', 'error': {'type': 'not_found_error', 'message': 'model: claude-opus-4-8-20260115'}, 'request_id': 'req_011CSJqymAvNw4bT3qmDdMbA'}

موجودہ جنریشن کے IDs بالکل اسی طرح ہیں جیسے لکھے گئے ہیں — claude-opus-4-8، claude-haiku-4-5، claude-sonnet-5۔ انہیں ماڈلز کی دستاویزات سے کاپی کریں، کبھی یاد داشت یا پرانے ٹیوٹوریل سے نہیں۔

429 rate_limit_error۔ ایرر ٹائپ اسٹرنگ rate_limit_error ہے اور ریسپانس میں retry-after ہیڈر شامل ہوتا ہے جس میں انتظار کرنے کے سیکنڈز ہوتے ہیں۔ SDK نے استثنا نظر آنے سے پہلے بیک آف کے ساتھ پہلے ہی دو دفعہ دوبارہ کوشش کی ہوتی ہے، لہذا مسلسل 429 کا مطلب ہے کہ آپ کی شرح واقعی آپ کے ٹائر سے زیادہ ہے — کام کو بیچ میں تقسیم کریں یا پھیلائیں، ریٹری لوپ کو سخت نہ کریں۔

یہ ٹیکسٹ نہیں، آبجیکٹ پرنٹ کرتا ہے۔ آؤٹ پٹ [TextBlock(citations=None, text='...', type='text')] جیسا دکھتا ہے۔ آپ نے بلاکس کو بار بار پڑھنے اور ان میں سے .text پڑھنے کے بجائے response.content پرنٹ کیا جہاں block.type == "text" ہو۔ اوپر دیا گیا ہر SDK مثال اسے درست طریقے سے کرتی ہے؛ وہ لوپ کاپی کریں۔

error: externally-managed-environment۔ آپ نے Ubuntu 24.04 کے سسٹم Python کے خلاف pip install چلایا۔ venv استعمال کریں — کسی ایسے سرور پر کبھی --break-system-packages نہ چلائیں جس کی اہمیت آپ کو ہے۔

کٹے ہوئے جوابات۔ response.stop_reason == "max_tokens" کا مطلب ہے کہ ماڈل آپ کی آؤٹ پٹ کی حد تک پہنچ گیا۔ یہ ڈیزائن کے مطابق ہے؛ حد کو باآور بڑھائیں۔

جب آپ کی پہلی ایپ کام کرنے لگے، تو Claude کے ساتھ AI ایجنٹ بنانا انہیں API کالز کو ایک ایسے ایجنٹ میں بدل دیتا ہے جو ٹولز استعمال کرتا ہے۔

FAQ

Claude API آزمانے کا کتنا خرچ آتا ہے؟

اس طرح کے ٹول کے لیے بہت کم۔ جولائی 2026 تک، Opus 4.8 کی قیمت $5 فی ملین ان پٹ ٹوکنز اور $25 فی ملین آؤٹ پٹ ہے۔ ایک عام لاگ تشخیص — کچھ ہزار ٹوکنز ان پٹ، چند سو آؤٹ پٹ — تقریباً دو سینٹ کی ہوتی ہے۔ Haiku 4.5 ($1/$5) پر یہ آدھے سینٹ سے بھی کم ہے۔ ایک ماہ کے روزانہ خلاصے کی لاگت ایک کافی سے بھی کم ہے۔ خطرہ کال کی قیمت نہیں ہے؛ بلکہ بے تحاشا لوپس اور بے تحاشا max_tokens ہیں، اسی لیے دونوں کو اس گائیڈ میں واضح طور پر سیٹ کیا گیا ہے۔

کیا Claude API کے لیے کوئی فری ٹیئر موجود ہے؟

جولائی 2026 تک کوئی مستقل فری ٹیئر نہیں ہے۔ Anthropic کی قیمت کی دستاویزات کے مطابق نئے صارفین کو API آزمانے کے لیے تھوڑی مقدار میں مفت کریڈٹس ملتے ہیں — یہ ایک بار کا ٹرائل ہوتا ہے، جس کی عین مقدار سائن اپ کے وقت Console میں دکھائی دیتی ہے — اس کے بعد آپ اکاؤنٹ میں رقم جمع کراتے ہیں۔ اگر آپ کا مقصد سرحدی معیار کے بجائے فی درخواست صفر اضافی لاگت ہے، تو متبادل یہ ہے کہ Ollama کے ساتھ اوپن ویٹ ماڈیل سیلف ہوسٹ کریں اور ٹوکنز کے بجائے RAM میں قیمت ادا کریں۔

میں اپنے سرور پر API کلید کو کیسے محفوظ رکھوں؟

کبھی کوڈ میں نہیں، کبھی git میں نہیں، کبھی .bashrc سے ایکسپورٹ نہیں، اور کبھی ایسے شیل میں ٹائپ نہیں جہاں ہسٹری اسے محفوظ رکھے گی۔ اسے 600 اجازت والی root کی ملکیت والی فائل میں رکھیں، اسے فی پروسیس لوڈ کریں — انٹرایکٹو استعمال کے لیے ریپر اسکرپٹ، systemd کے لیے EnvironmentFile= — اور ہر سرور یا پروجیکٹ کے لیے ایک کلید مختص کریں تاکہ لیک ہوئی کلید کو منسوخ کرنا ایک معمولی آپریشن ہو، بڑا نقصان نہ ہو۔ اگر کلید کبھی کسی پیسٹ سائٹ یا git کمٹ تک پہنچ جائے، تو فوراً Console میں اسے منسوخ کریں؛ کمٹ ڈیلیٹ کرنا اسے دوبارہ پوشیدہ نہیں کرتا۔

میں کس Claude ماڈل سے شروع کروں؟

جب آپ یہ جانچ رہے ہوں کہ آؤٹ پٹس کافی اچھے ہیں کہ ان پر کام کیا جا سکے، تو claude-opus-4-8 سے شروع کریں — آپ خیال کو مکمل معیار پر پرکھنا چاہتے ہیں، اور شوقیہ حجم پر لاگت کا فرق صرف چند سینٹ ہوتا ہے۔ ایک بار پرامپٹ طے ہونے کے بعد، اپنے حقیقی ان پٹس پر claude-haiku-4-5 دوبارہ چلائیں؛ خلاصہ نگاری، درجہ بندی، اور لاگ ٹریاج کے لیے یہ اکثر پانچویں حصے قیمت پر بھی اتنا ہی اچھا ہوتا ہے۔ Haiku یا Sonnet کی طرف ناپ کر کے بڑھیں، ڈیفالٹ طور پر نہیں۔