Ubuntu 24.04 VPS پر Claude API کی پہلی Python app
Ubuntu 24.04 VPS پر Claude API key محفوظ کریں، Python log explainer بنائیں، streaming اور typed errors سمجھیں، اور token خرچ کی حد شروع سے قابو میں رکھیں۔
آپ کیا بنا رہے ہیں
ایک نئے Ubuntu 24.04 VPS پر ایک command-line tool، جس میں آپ error message یا log کا کوئی حصہ pipe کریں گے اور بدلے میں سادہ انگریزی میں تشخیص حاصل کریں گے: journalctl -u nginx -n 50 | explain۔ یہ تقریباً 60 lines کی Python ہے، اور اس میں حقیقی Claude API application کے لیے درکار تمام اہم چیزیں شامل ہیں: درست طریقے سے محفوظ کی گئی key، virtualenv، SDK کے response shapes، streaming، typed exception chain، اور systemd unit، تاکہ یہ آپ کے بغیر چل سکے۔
میں نے یہ project جان بوجھ کر منتخب کیا ہے۔ زیادہ تر "first API app" tutorials میں آپ ایسا chatbot بناتے ہیں جسے دوبارہ کبھی نہیں کھولتے۔ Log explainer پہلے دن سے server پر مفید ثابت ہوتا ہے، اور یہ آپ کو ان دو چیزوں کی عملی مشق کراتا ہے جن میں beginners عموماً غلطی کرتے ہیں: response object کو درست طریقے سے پڑھنا اور اخراجات کو قابو میں رکھنا۔ API ہر token کے حساب سے bill کرتی ہے، اور حد صرف وہی ہوتی ہے جو آپ خود مقرر کرتے ہیں۔ اس لیے یہاں cost control بعد میں شامل کی جانے والی چیز نہیں بلکہ design input ہے۔ یہی discipline اس وقت بھی اہم رہتی ہے جب آپ آگے بڑھ کر اسی VPS پر tmux میں Claude Code چلانے لگتے ہیں۔
Console سے API key حاصل کریں
API access کو Anthropic Console میں manage کیا جاتا ہے، جو platform.claude.com پر دستیاب ہے۔ پہلے sign up کریں، پھر Settings → API Keys کے تحت key بنائیں۔ دستاویزات براہ راست platform.claude.com/settings/keys سے لنک کرتی ہیں۔ Key صرف ایک بار دکھائی جاتی ہے، sk-ant- سے شروع ہوتی ہے، اور اسے دوبارہ retrieve نہیں کیا جا سکتا۔ اسے فوراً copy کریں، ورنہ اسے delete کرکے نئی key جاری کریں۔
اخراجات کے بارے میں: July 2026 تک API کے لیے کوئی مستقل free tier موجود نہیں ہے۔ Anthropic کی pricing documentation کے مطابق نئے users کو testing کے لیے تھوڑے free credits ملتے ہیں۔ صحیح مقدار وہی ہوگی جو sign up کے وقت Console میں دکھائی جائے۔ Credits ختم ہونے کے بعد requests کامیاب ہونے سے پہلے account میں funds شامل کرنا ضروری ہے۔ یہ claude.ai subscription سے الگ ہے۔ Pro یا Max plan میں API credit شامل نہیں ہوتا، اور API key سے chat app تک رسائی نہیں ملتی۔ اگر آپ subscription اور API کے درمیان انتخاب کر رہے ہیں تو یہ الگ موضوع ہے: آپ کو درکار Claude plan کون سا ہے۔
Key کو صرف ایک project یا server تک محدود رکھ کر بنائیں۔ جب کوئی key leak ہو جائے گی، اور کافی وقت گزرنے پر ایسا ایک بار ضرور ہوگا، تو اسے revoke کرنے کی ضرورت پڑے گی۔ اس لیے اسے اس scope کے ساتھ بنائیں کہ باقی تمام resources متاثر ہوئے بغیر key revoke کی جا سکے۔
bashrc میں key نہ رکھیں
فطری طور پر پہلا قدم export ANTHROPIC_API_KEY=sk-ant-... کو ~/.bashrc میں شامل کرنا ہوتا ہے۔ ایسا نہ کریں۔ اس کے تین الگ مسائل ہیں:
- ہر process اسے inherit کرتا ہے۔ آپ کے login shell میں export کیا گیا environment variable ہر اس چیز تک پہنچ جاتا ہے جسے آپ start کرتے ہیں، یعنی web app، وہ crash reporter جو bug report میں environment کو مفید سمجھ کر شامل کر دیتا ہے، اور وہ
phpinfo()page جسے کسی نے فعال چھوڑ دیا ہے۔ اس طرح key کی exposure surface یہ بن جاتی ہے: "یہ user جو کچھ بھی چلاتا ہے۔" - اسے درج کرنے سے وہ
~/.bash_historyمیں محفوظ ہو جاتی ہے۔ export کو ایک بار دستی طور پر چلائیں، اور key ہمیشہ کے لیے ایک plaintext file میں موجود رہتی ہے۔ پھر یہ آپ کی home directory کے ہر backup میں sync ہو جاتی ہے۔ - systemd کو درکار وقت یہ موجود نہیں ہوتی۔ Services آپ کے
.bashrcکو نہیں پڑھتیں۔ اس لیے جب آپ script کو unit میں تبدیل کرتے ہیں تو یہ طریقہ عین اسی وقت ناکام ہوتا ہے، عموماً صبح 6 بجے ایک پراسرار 401 کے طور پر۔
Server پر درست طریقہ یہ ہے کہ 600 permissions والی dedicated environment file بنائی جائے۔ اسے صرف وہی process load کرے جسے اس کی ضرورت ہے:
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اگر key کو editor کی swap files سے باہر رکھنا ہو تو editor کے بجائے printf سے tee استعمال کریں۔ دونوں صورتوں میں ls -l /etc/claude-explain.env سے تصدیق کریں کہ یہ -rw------- پڑھتا ہے اور اس کی ملکیت root کی ہے۔ Interactive shells کو wrapper کے ذریعے ہر invocation پر key ملتی ہے (ذیل میں دیکھیں)، جبکہ systemd کو یہ EnvironmentFile= کے ذریعے ملتی ہے۔ root privileges ختم کرنے سے پہلے file پڑھتا ہے، اس لیے service user کو اس تک read access کی ضرورت نہیں ہوتی۔ key code، git، ps output یا shell history میں کبھی ظاہر نہیں ہوتی۔
venv میں SDK انسٹال کریں
Ubuntu 24.04، PEP 668 enforcement کے ساتھ Python 3.12 فراہم کرتا ہے، اس لیے system interpreter کے خلاف bare pip install anthropic چلانے سے error: externally-managed-environment ظاہر ہوتا ہے۔ یہ error OS کے متوقع طریقے سے کام کرنے کی علامت ہے۔ 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سرور پر activation ceremony کی ضرورت نہیں: /opt/explain/venv/bin/python کو براہ راست چلانے سے ہمیشہ venv کے packages استعمال ہوتے ہیں۔
پہلی کال اور response کو درست طور پر پڑھنا
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() بغیر arguments کے key کو environment سے پڑھتا ہے؛ اسے کبھی string literal کے طور پر نہ دیں۔ دوسری بات یہ ہے کہ response.content ایک content blocks کی فہرست ہے، string نہیں۔ اسے براہِ راست print کرنے پر پہلی بار استعمال کرنے والوں کو عموماً یہ output نظر آتا ہے:
[TextBlock(citations=None, text='A systemd unit file is...', type='text')]یہ bug نہیں ہے؛ یہ object کا repr ہے۔ Responses میں متعدد block types شامل ہو سکتے ہیں، مثلاً text، tool calls اور thinking۔ اس لیے iterate کریں اور .text استعمال کرنے سے پہلے block.type == "text" کو check کریں۔ یہ loop پہلے ہی دن شامل کر لیں، تو "یہ garbage print کر رہا ہے" جیسے مسائل کا ایک پورا سلسلہ پیدا نہیں ہوگا۔
بالکل درست model ID claude-opus-4-8 استعمال کریں۔ موجودہ نسل کے IDs میں تاریخ شامل نہیں ہوتی۔ تاریخ کا suffix شامل کرنے کی عادت یا پرانی blog post کی ہدایت پر عمل نہ کریں؛ اس سے 404 حاصل ہوتا ہے، جس کی وضاحت نیچے دی گئی ہے۔
اصل tool: وضاحت
یہ مکمل program ہے۔ یہ stdin سے input لیتا ہے، diagnosis کو stream کرتا ہے، اور errors کو handle کرتا ہے:
#!/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 کے نام سے save کریں، پھر interactive استعمال کے لیے key load کرنے والا wrapper شامل کریں:
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(Wrapper کو sudo کے ذریعے run ہونا چاہیے، یا env file کا group ایسا ہونا چاہیے جس میں آپ کا admin user شامل ہو۔ file کو 644 permissions دینے کے بجائے یہ انتخاب جان بوجھ کر کریں۔)
Streaming کیوں؟ client.messages.stream tokens کو موصول ہوتے ہی print کرتا ہے، بجائے اس کے کہ مکمل generation کے دوران خاموش رہے۔ اس سے طویل output کے دوران HTTP timeouts سے بھی بچا جا سکتا ہے۔ اسی وجہ سے SDK non-streaming calls میں بہت بڑی max_tokens values کو مسترد کر دیتا ہے۔ اگر بعد میں assembled object درکار ہو تو with block کے اندر stream.get_final_message() call کریں۔
Exception order ایسی کیوں ہے؟ SDK typed exceptions اٹھاتا ہے، اور انہیں زیادہ مخصوص سے کم مخصوص ترتیب میں handle کرنا چاہیے: RateLimitError ایک 429 response ہے اور اس میں retry-after header ہوتا ہے، جو بتاتا ہے کہ کتنی دیر انتظار کرنا ہے؛ APIStatusError دیگر non-2xx responses کو cover کرتا ہے، اور server-side مسئلے کے لیے e.status_code >= 500 check کریں؛ APIConnectionError کا مطلب ہے کہ request کو کوئی response ملا ہی نہیں۔ Retry loop بنانے سے پہلے یہ بات یاد رکھیں: SDK خود 429 اور 5xx errors کے لیے پہلے ہی retries کرتا ہے۔ یہ exponential backoff کے ساتھ default طور پر دو مرتبہ retry کرتا ہے (client پر max_retries)۔ جب تک آپ کا except چلتا ہے، retries ختم ہو چکی ہوتی ہیں۔ اس لیے CLI میں درست طریقہ یہ ہے کہ error report کریں اور exit کریں، نہ کہ sleep کر کے server پر بار بار request بھیجیں۔
لاگت پر قابو
یہ موضوع ایک الگ حصے کا مستحق ہے، کیونکہ API میں آپ کی ترتیب کردہ حد کے علاوہ کوئی built-in ماہانہ cap نہیں ہوتی، اور یہاں کی ہر غلطی خاموشی سے مجموعی لاگت بڑھاتی رہتی ہے۔
max_tokens ہر call کے خرچ کی زیادہ سے زیادہ حد ہے۔ Output tokens مہنگا حصہ ہیں؛ Opus 4.8 میں ان کی قیمت input سے پانچ گنا ہے، اور max_tokens اس بات کی سخت حد مقرر کرتا ہے کہ model زیادہ سے زیادہ کتنے tokens پیدا کر سکتا ہے۔ بے قابو prompt سے اتنا output خرچ نہیں ہو سکتا جتنے کی آپ نے اجازت دی ہو۔ اسے کام کے مطابق مقرر کریں: log diagnosis کے لیے 1,500 کافی ہیں؛ classification task کے لیے 100 درکار ہوتے ہیں۔ اگر stop_reason: "max_tokens" کے ساتھ responses جملہ مکمل ہونے سے پہلے رک جائیں تو حد بہت کم ہے۔ اسے سمجھ بوجھ کے ساتھ بڑھائیں، default کے طور پر بہت بڑی حد مقرر نہ کریں۔
بھیجنے سے پہلے count کریں۔ Input کی بھی قیمت ہوتی ہے، اور logs کا حجم زیادہ ہو سکتا ہے۔ API میں counting endpoint موجود ہے جو مفت استعمال کیا جا سکتا ہے۔ اس کی rate limits الگ ہیں اور message creation سے مختلف ہیں:
count = client.messages.count_tokens(
model="claude-opus-4-8",
messages=[{"role": "user", "content": big_log_text}],
)
print(count.input_tokens)اسے استعمال کرکے اس خطرے سے بچیں کہ غلطی سے 2 GB کا log اس tool کے ذریعے بھیج دیا جائے۔ اس مقصد کے لیے tiktoken استعمال نہ کریں۔ یہ OpenAI کا tokenizer ہے، اور عام text میں Claude tokens کی تعداد تقریباً 15–20% کم بتاتا ہے؛ code میں یہ فرق مزید زیادہ ہو سکتا ہے۔
Model کا انتخاب وفاداری کے بجائے task کے مطابق کریں۔ July 2026 تک Opus 4.8 (claude-opus-4-8) کی قیمت $5 فی million input tokens اور $25 فی million output tokens ہے؛ Haiku 4.5 (claude-haiku-4-5) کی قیمت $1/$5 ہے اور اس کا context 200K ہے؛ Sonnet 5 (claude-sonnet-5) درمیانی سطح پر ہے، جس کی قیمت $3/$15 ہے، جبکہ August 31, 2026 تک introductory قیمت $2/$10 ہے۔ عملی طور پر، 2,000-token کے log excerpt اور 500-token کے answer کی لاگت Opus پر تقریباً $0.0225 اور Haiku پر $0.0045 بنتی ہے۔ Output quality کا جائزہ لیتے وقت Opus سے شروع کریں، پھر یہی prompts Haiku پر آزمائیں۔ زیادہ volume والے سادہ transformations میں Haiku اکثر پانچویں لاگت پر بھی تقریباً یکساں نتائج دیتا ہے۔ Budget میں ان اعداد کو hard-code کرنے سے پہلے pricing page پر موجودہ اعداد کی تصدیق کریں۔
ایسے کاموں کے لیے Batches استعمال کریں جو انتظار کر سکتے ہیں۔ Batches API requests کو asynchronous طور پر standard prices کے 50% پر process کرتا ہے، اور زیادہ تر batches ایک گھنٹے کے اندر مکمل ہو جاتے ہیں۔ Nightly digests، backfills، bulk classification، اور وہ تمام کام جن کے لیے کوئی انسان انتظار نہیں کر رہا، یہاں انجام دینے چاہییں۔
بار بار بھیجے جانے والے context کے لیے prompt caching استعمال کریں۔ اگر ہر call میں وہی بڑا system prompt یا runbook دوبارہ بھیجا جاتا ہے تو اسے cacheable mark کریں:
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 onCache writes کی قیمت input price سے تقریباً 1.25x اور cache reads کی تقریباً 0.1x ہوتی ہے، جبکہ TTL 5-minute ہے۔ اس لیے window کے اندر دوسرا call پہلے call کی لاگت پوری کرنے میں مدد دیتا ہے۔ یہاں دو باتوں کا خیال رکھیں۔ Cached prefix کو ہر model کے لیے مقررہ minimum پورا کرنا ہوتا ہے، جو Opus پر چند ہزار tokens ہے۔ اس لیے مختصر system prompt خاموشی سے cache نہیں ہوگا۔ دوسری بات یہ ہے کہ اگر یکساں calls کے دوران cache_read_input_tokens مسلسل zero رہے تو prefix کی کوئی چیز ہر request میں تبدیل ہو رہی ہے۔ عموماً timestamp اس کی وجہ ہوتا ہے۔
یہ بھی یاد رکھیں کہ input میں کیا شمار ہوتا ہے۔ System prompts، tool definitions، اور multi-turn conversations میں ہر turn کے ساتھ دوبارہ بھیجی جانے والی پوری history، سب input tokens کے طور پر bill ہوتے ہیں۔ ایسا chat loop جو history کو کبھی trim نہ کرے، اس کی لاگت quadratically بڑھتی ہے۔ Conversational نظام بنانے سے پہلے مکمل accounting سمجھنا مفید ہے: Claude token usage اور billing کا اصل حساب کیسے ہوتا ہے۔
systemd کے تحت چلائیں
environment file کے نظم و ضبط کا فائدہ یہ ہے کہ ہر صبح ایک timer گزشتہ دن کی errors کا خلاصہ تیار کرتا ہے۔
# /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.targetsudo 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 غیر مراعات یافتہ explain user کو اختیار منتقل کرنے سے پہلے root-owned، mode-600 file پڑھ لیتا ہے۔ اس طرح process کو variable مل جاتا ہے، جبکہ user key file نہیں پڑھ سکتا۔ systemd-journal group log access فراہم کرتا ہے۔ دستی systemctl start کے ذریعے test کریں اور journalctl -u log-digest.service پڑھیں؛ typo تلاش کرنے کے لیے 06:15 تک انتظار نہ کریں۔ جب یہ pattern shell pipeline سے آگے بڑھ جائے تو یہی key-in-env-file طریقہ اسی box پر Claude سے چلنے والے n8n workflows میں بھی براہ راست استعمال کیا جا سکتا ہے۔
خرابی کی صورتیں اور نظر آنے والے strings
working key پر 401۔ exception کا متن یہ ہے:
anthropic.AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CSHoEeqs5C35K2UUqR7Fy'}اگر key آپ کے shell میں کام کرتی ہے لیکن service 401 دیتی ہے تو service کو یہ key کبھی موصول ہی نہیں ہوئی۔ یاد رکھیں، systemd .bashrc نہیں پڑھتا؛ تصدیق کریں کہ EnvironmentFile= درست path کی طرف اشارہ کرتا ہے۔ دیگر وجوہات میں env file میں شامل کیے گئے quotes (ANTHROPIC_API_KEY="sk-ant-..."؛ systemd quotes کو value سے خارج کر دیتا ہے، لیکن اگر آپ نے غیر معمولی انداز میں quote کیا ہو تو آپ کے shell wrapper کا . file انہیں value میں شامل رکھتا ہے)، آخر میں موجود whitespace، یا وہ key شامل ہیں جسے آپ نے گزشتہ ہفتے Console میں revoke کر دیا تھا۔
model میں typo کی وجہ سے 404۔ اس کی سب سے عام صورت موجودہ model ID کے آخر میں date suffix شامل کرنا ہے:
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۔ انہیں models documentation سے copy کریں، memory یا کسی پرانے tutorial سے نہیں۔
429 rate_limit_error۔ error type string rate_limit_error ہے، اور response میں retry-after header شامل ہوتا ہے جس میں انتظار کے seconds درج ہوتے ہیں۔ exception ظاہر ہونے سے پہلے SDK backoff کے ساتھ دو بار retry کر چکا ہوتا ہے، اس لیے مسلسل 429 errors کا مطلب ہے کہ آپ کی sustained rate واقعی آپ کے tier کی حد سے زیادہ ہے۔ کام کو batch کریں یا وقفوں میں تقسیم کریں؛ retry loop کو مزید سخت نہ کریں۔
یہ text کے بجائے object print کرتا ہے۔ output کچھ یوں دکھائی دیتا ہے: [TextBlock(citations=None, text='...', type='text')]۔ آپ نے blocks پر iterate کرنے اور ان blocks میں .text پڑھنے کے بجائے response.content print کیا، جہاں block.type == "text"۔ اوپر موجود ہر SDK example یہ کام درست طریقے سے کرتا ہے؛ اسی loop کو copy کریں۔
error: externally-managed-environment۔ آپ نے Ubuntu 24.04 کے system Python کے خلاف pip install چلایا۔ venv استعمال کریں؛ ایسے server پر --break-system-packages کبھی نہ چلائیں جس کی آپ کو پروا ہو۔
جوابات truncated ہیں۔ response.stop_reason == "max_tokens" کا مطلب ہے کہ model نے output cap کے درمیان میں جواب مکمل کیے بغیر روک دیا۔ یہ متوقع طرزِ عمل ہے؛ cap کو سوچ سمجھ کر بڑھائیں۔
جب آپ کی پہلی app کام کرنے لگے تو Claude کے ساتھ AI agent بنانا انہی API calls کو ایسے agent میں تبدیل کرتا ہے جو tools استعمال کرتا ہے۔
FAQ
Claude API آزمانے کی لاگت کتنی ہے؟
اس نوعیت کے ٹول کے لیے لاگت واقعی بہت کم ہے۔ July 2026 تک Opus 4.8 کی قیمت input کے 1 million tokens کے لیے $5 اور output کے 1 million tokens کے لیے $25 ہے۔ عام log diagnosis میں چند ہزار tokens input اور چند سو tokens output ہوتے ہیں، اس لیے لاگت تقریباً دو cents بنتی ہے۔ Haiku 4.5 ($1/$5) پر یہ لاگت half cent سے بھی کم رہتی ہے۔ روزانہ تیار ہونے والے digests کا ایک ماہ کا خرچ ایک coffee سے بھی کم ہوتا ہے۔ خطرہ فی درخواست قیمت نہیں، بلکہ بے حد loops اور بے حد max_tokens ہیں۔ اسی لیے اس guide میں دونوں کو واضح طور پر set کیا جاتا ہے۔
کیا Claude API کے لیے free tier موجود ہے؟
July 2026 تک کوئی جاری free tier موجود نہیں ہے۔ Anthropic کی pricing documentation کے مطابق نئے users کو API آزمانے کے لیے تھوڑے free credits ملتے ہیں۔ یہ one-time trial ہوتا ہے، اور signup کے وقت Console میں exact amount دکھائی جاتی ہے۔ اس کے بعد آپ کو account میں funds شامل کرنا ہوتے ہیں۔ اگر آپ کا مقصد frontier quality کے بجائے ہر request کی zero marginal cost ہے تو متبادل یہ ہے کہ Ollama کے ساتھ open-weight model کو self-host کریں اور tokens کے بجائے RAM کی صورت میں قیمت ادا کریں۔
میں server پر اپنی API key کو محفوظ کیسے رکھوں؟
اسے کبھی code میں نہ رکھیں، git میں نہ رکھیں، .bashrc سے export نہ کریں، اور ایسے shell میں type نہ کریں جہاں history اسے محفوظ کر لے۔ اسے root-owned file میں 600 permissions کے ساتھ رکھیں اور ہر process کے لیے الگ load کریں۔ interactive use کے لیے wrapper script اور systemd کے لیے EnvironmentFile= استعمال کریں۔ ہر server یا project کے لیے ایک الگ key مقرر کریں، تاکہ leaked key کو revoke کرنا مکمل نظام ختم کرنے کے بجائے محدود کارروائی ہو۔ اگر key کبھی paste site یا git commit تک پہنچ جائے تو اسے فوراً Console میں revoke کریں؛ commit delete کرنے سے key دوبارہ محفوظ نہیں ہو جاتی۔
مجھے کس Claude model سے شروع کرنا چاہیے؟
جب آپ یہ جانچ رہے ہوں کہ outputs اتنے اچھے ہیں یا نہیں کہ ان پر build کیا جا سکے، تو claude-opus-4-8 سے شروع کریں۔ اس طرح آپ full quality پر خیال کا جائزہ لے سکتے ہیں، اور hobby volume میں cost difference صرف چند cents ہوتا ہے۔ Prompt طے ہو جانے کے بعد اپنے حقیقی inputs کو claude-haiku-4-5 پر دوبارہ چلائیں۔ Summarization، classification اور log triage کے لیے یہ اکثر ایک fifth price پر تقریباً اتنا ہی اچھا ہوتا ہے۔ Haiku یا Sonnet کا انتخاب default کے بجائے measurement کی بنیاد پر کریں۔