SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-07

VPS-এ Claude API দিয়ে প্রথম Python app তৈরি করুন

Ubuntu 24.04 VPS-এ Claude API key নিরাপদে সংরক্ষণ করে streaming-সহ Python log explainer বানান। typed error handling, systemd এবং খরচ নিয়ন্ত্রণও শিখুন।

আপনি যা তৈরি করছেন

একটি নতুন Ubuntu 24.04 VPS-এ একটি command-line tool। এতে একটি error message বা log-এর অংশ pipe করলে এটি সাধারণ ইংরেজিতে diagnosis ফেরত দেয়: journalctl -u nginx -n 50 | explain। কোডটি প্রায় ষাট লাইনের Python। এতে একটি বাস্তব Claude API application-এর প্রয়োজনীয় বিষয়গুলো অনুশীলন করা হয়: সঠিকভাবে সংরক্ষিত key, একটি virtualenv, SDK-এর response shape, streaming, typed exception chain এবং একটি systemd unit, যাতে আপনার সরাসরি হস্তক্ষেপ ছাড়াই এটি চলে।

আমি ইচ্ছা করেই এই project বেছে নিয়েছি। অধিকাংশ "first API app" tutorial-এ এমন chatbot তৈরি করতে বলা হয়, যা আপনি আর কখনও খুলবেন না। একটি log explainer প্রথম দিন থেকেই server-এ কাজে লাগে। এটি beginners যে দুটি বিষয়ে সবচেয়ে বেশি ভুল করে, সেগুলোও অনুশীলন করায়: response object সঠিকভাবে পড়া এবং খরচ নিয়ন্ত্রণ করা। API প্রতি token অনুযায়ী বিল করে। আপনি যে সীমা নির্ধারণ করেন, তার বাইরে কোনো ceiling নেই। তাই এখানে cost control পরে যোগ করার বিষয় নয়; এটি design-এর একটি input। একই discipline পরে কাজে লাগে, যখন আপনি tmux-এ এই একই VPS-এ Claude Code চালানো শুরু করবেন।

Console থেকে একটি API key সংগ্রহ করুন

API access platform.claude.com-এর Anthropic Console-এ পরিচালিত হয়। সাইন আপ করার পরে Settings → API Keys-এর অধীনে একটি key তৈরি করুন (ডকুমেন্টেশন সরাসরি platform.claude.com/settings/keys-এ নিয়ে যায়)। key-টি একবারই দেখানো হয়, এটি sk-ant- দিয়ে শুরু হয় এবং পরে আর পুনরুদ্ধার করা যায় না। তাই সঙ্গে সঙ্গে এটি copy করুন। না হলে key-টি delete করে নতুন করে জারি করুন।

খরচের বিষয়ে: July 2026 অনুযায়ী API-এর জন্য কোনো চলমান free tier নেই। Anthropic-এর pricing documentation অনুযায়ী, নতুন ব্যবহারকারীরা পরীক্ষামূলক ব্যবহারের জন্য অল্প পরিমাণ free credit পান। সঠিক পরিমাণটি signup-এর সময় Console-এ যা দেখায়, সেটিই প্রযোজ্য। credit শেষ হয়ে গেলে request সফল হওয়ার আগে account-এ অর্থ যোগ করতে হবে। এটি claude.ai subscription থেকে আলাদা। Pro বা Max plan-এর মধ্যে API credit অন্তর্ভুক্ত নয়। আবার, একটি API key ব্যবহার করে chat app-এ access পাওয়া যায় না। subscription এবং API-এর মধ্যে সিদ্ধান্ত নেওয়া আলাদা বিষয়: আপনার আসলে কোন Claude plan প্রয়োজন

key-টির scope একটি project বা server-এর মধ্যে সীমাবদ্ধ রাখুন। কোনো key ফাঁস হলে—দীর্ঘ সময়ের ব্যবধানে এমনটি ঘটবেই—যাতে আপনার অন্য সব resource-এর access নষ্ট না করে শুধু সেই key revoke করতে পারেন।

.bashrc-এ key রাখবেন না

স্বাভাবিকভাবে প্রথমে export ANTHROPIC_API_KEY=sk-ant-...-কে ~/.bashrc-এ বসানোর কথা মনে হতে পারে। তা করবেন না। এতে 3টি পৃথক সমস্যা হয়:

  • প্রতিটি process এটি উত্তরাধিকার সূত্রে পায়। আপনার login shell-এ export করা environment variable আপনার চালু করা সবকিছুর মধ্যে ছড়িয়ে পড়ে—web app, crash reporter, যা সুবিধামতো তার environment bug report-এ লিখে দেয়, এমনকি কেউ চালু রাখা phpinfo() page-ও। ফলে key-এর exposure surface হয়ে যায় “এই user কখনও চালানো প্রতিটি জিনিস।”
  • আপনি এটি লিখলে তা ~/.bash_history-এ জমা হয়। একবার হাতে export চালালেই key একটি plaintext file-এ স্থায়ীভাবে থেকে যায় এবং আপনার home directory-এর প্রতিটি backup-এ sync হয়।
  • systemd-এর প্রয়োজনের সময় এটি সেখানে থাকে না। Service আপনার .bashrc পড়ে না। তাই script-টিকে unit-এ রূপান্তর করার সময় এই পদ্ধতি ব্যর্থ হয়, সাধারণত সকাল 6টায় একটি রহস্যজনক 401 হিসেবে।

Server-এ সঠিক পদ্ধতি হলো 600 permission-সহ একটি 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

Editor-এর swap file-এ key না রাখতে চাইলে editor-এর পরিবর্তে printf থেকে tee ব্যবহার করুন। যেভাবেই তৈরি করুন, ls -l /etc/claude-explain.env দিয়ে যাচাই করুন যে এটি -rw------- পড়ে এবং file-টির owner root। Interactive shell-এ wrapper-এর মাধ্যমে প্রতিবার চালানোর সময় key দেওয়া হয় (নিচে দেখুন), আর systemd এটি EnvironmentFile=-এর মাধ্যমে পায়। root privilege কমানোর আগে 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-এ সরাসরি pip install anthropic চালালে error: externally-managed-environment দিয়ে ব্যর্থ হয়। এটি 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 করার প্রয়োজন নেই। সরাসরি /opt/explain/venv/bin/python চালালে সব সময় venv-এর package ব্যবহার হবে।

প্রথম কল এবং 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-এর মৌলিক ধারণার বেশিরভাগ অংশ বোঝায়। প্রথমত, কোনো argument ছাড়া anthropic.Anthropic() environment থেকে key পড়ে; এটিকে কখনো string literal হিসেবে pass করবেন না। দ্বিতীয়ত, response.content একটি content block-এর list, string নয়। এটিকে সরাসরি print করলে প্রথমবারের ব্যবহারকারীদের পরিচিত এই output দেখা যায়:

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

এটি কোনো bug নয়; এটি object-এর repr। Response-এ একাধিক block type থাকতে পারে, যেমন text, tool call এবং thinking। তাই iterate করার সময় .text ব্যবহার করার আগে block.type == "text" পরীক্ষা করুন। প্রথম দিন থেকেই এই loop যুক্ত করলে “এটি garbage print করছে” ধরনের একটি সম্পূর্ণ সমস্যা এড়ানো যায়।

সঠিক model ID claude-opus-4-8 ব্যবহার করুন। বর্তমান প্রজন্মের ID-তে কোনো date নেই। date suffix যোগ করার অভ্যাস বা পুরোনো blog post-এর নির্দেশনা অনুসরণ করবেন না; এতে 404 হয়, যা নিচে ব্যাখ্যা করা হয়েছে।

প্রকৃত টুল: ব্যাখ্যা

এখানে সম্পূর্ণ প্রোগ্রামটি দেওয়া হলো। এটি stdin থেকে ইনপুট নেয়, stream করে diagnosis দেখায় এবং error পরিচালনা করে:

#!/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 নামে সংরক্ষণ করুন। এরপর 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-এর মাধ্যমে চালাতে হবে, অথবা env file-এর জন্য এমন একটি group নির্ধারণ করতে হবে যার সদস্য আপনার admin user। file-এর permission 644 করে দেওয়ার মতো অনিরাপদ সমাধান বেছে নেবেন না।)

Streaming ব্যবহারের কারণ। client.messages.stream token আসার সঙ্গে সঙ্গে দেখায়; পুরো generation শেষ হওয়া পর্যন্ত নীরব থাকে না। এটি দীর্ঘ output-এর ক্ষেত্রে HTTP timeout এড়াতেও সাহায্য করে। একই কারণে SDK non-streaming call-এ অত্যন্ত বড় max_tokens value প্রত্যাখ্যান করে। পরে assembled object প্রয়োজন হলে with block-এর ভিতরে stream.get_final_message() call করুন।

এই exception order ব্যবহারের কারণ। SDK typed exception তোলে এবং সবচেয়ে নির্দিষ্ট exception আগে পরীক্ষা করতে হয়। RateLimitError একটি 429 response এবং এতে কতক্ষণ অপেক্ষা করতে হবে তা জানানো retry-after header থাকে। APIStatusError অন্য non-2xx response সামলায়; server-side সমস্যা আছে কি না দেখতে e.status_code >= 500 পরীক্ষা করুন। APIConnectionError বোঝায় যে request কোনো response-ই পায়নি। Retry loop লেখার আগে মনে রাখুন: SDK নিজেই 429 এবং 5xx error পুনরায় চেষ্টা করে। Default হিসেবে এটি exponential backoff ব্যবহার করে দুইবার retry করে (client-এ max_retries)। আপনার except চালানোর সময় retries শেষ হয়ে যায়। তাই CLI-তে সঠিক পদ্ধতি হলো error জানিয়ে program বন্ধ করা; অপেক্ষা করে বারবার request পাঠানো নয়।

খরচ নিয়ন্ত্রণ

এটির জন্য আলাদা একটি section থাকা দরকার, কারণ আপনি নিজে যে সীমা নির্ধারণ করেন তার বাইরে API-তে কোনো built-in মাসিক cap নেই। এখানে প্রতিটি ভুল নীরবে জমা হয়ে খরচ বাড়ায়।

max_tokens হলো প্রতি-call খরচের সর্বোচ্চ সীমা। Opus 4.8-এ output token-এর দাম input token-এর তুলনায় পাঁচ গুণ বেশি। max_tokens নির্ধারণ করে model সর্বোচ্চ কতটি output token তৈরি করতে পারবে। নিয়ন্ত্রণের বাইরে চলে যাওয়া prompt-এর খরচ আপনার নির্ধারিত output সীমার বেশি হতে পারে না। কাজ অনুযায়ী সীমা নির্ধারণ করুন: log diagnosis-এর জন্য 1,500 যথেষ্ট; classification task-এর জন্য 100-ই যথেষ্ট। stop_reason: "max_tokens" সহ response বাক্যের মাঝখানে থেমে গেলে বুঝবেন সীমাটি বেশি কম হয়েছে। তখন সচেতনভাবে সীমা বাড়ান; default হিসেবে অযথা বড় মান ব্যবহার করবেন না।

পাঠানোর আগে token গণনা করুন। Input-এর জন্যও খরচ হয়, আর log-এর আকার বড় হতে পারে। API-তে token গণনার একটি endpoint আছে, যা বিনামূল্যে ব্যবহার করা যায়। তবে এর rate limit আলাদা এবং message creation-এর rate limit-এর সঙ্গে এক নয়:

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 token-এর সংখ্যা প্রায় 15–20% কম গণনা করে; code-এর ক্ষেত্রে পার্থক্য আরও বেশি হতে পারে।

আনুগত্যের ভিত্তিতে নয়, task অনুযায়ী model বেছে নিন। July 2026 অনুযায়ী, Opus 4.8 (claude-opus-4-8)-এর দাম প্রতি million input token-এ $5 এবং প্রতি million output token-এ $25। 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 দিয়ে শুরু করুন। এরপর একই prompt Haiku-তে পরীক্ষা করুন। উচ্চ-পরিমাণের সাধারণ transformation-এর ক্ষেত্রে দামের এক-পঞ্চমাংশে এর ফল প্রায় একই হতে পারে। Budget-এ এসব সংখ্যা স্থায়ীভাবে ব্যবহারের আগে pricing page-এ বর্তমান দাম যাচাই করুন।

যে কাজ অপেক্ষা করতে পারে, তার জন্য Batches ব্যবহার করুন। Batches API asynchronousভাবে request process করে এবং standard price-এর 50% খরচ হয়। বেশিরভাগ batch এক ঘণ্টার মধ্যে সম্পন্ন হয়। Nightly digest, backfill, bulk classification এবং যেসব কাজের জন্য কোনো মানুষকে অপেক্ষা করতে হয় না, সেগুলো এখানে রাখুন।

পুনরাবৃত্ত context-এর জন্য prompt caching ব্যবহার করুন। প্রতিটি call-এ একই বড় system prompt বা runbook আবার পাঠালে সেটিকে cacheable হিসেবে চিহ্নিত করুন:

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

Cache write-এর খরচ input price-এর প্রায় 1.25 গুণ এবং cache read-এর খরচ প্রায় 0.1 গুণ। TTL হলো 5 মিনিট। তাই এই সময়ের মধ্যে দ্বিতীয় call-ই প্রথম call-এর খরচ পুষিয়ে দিতে পারে। এখানে দুটি বিষয় মনে রাখুন। Cached prefix-কে প্রতি-model নির্ধারিত minimum পূরণ করতে হয়। Opus-এর ক্ষেত্রে এটি কয়েক হাজার token হতে পারে। তাই ছোট system prompt নীরবে cache না-ও হতে পারে। আর অভিন্ন call-গুলোর মধ্যে cache_read_input_tokens শূন্য থাকলে prefix-এর কোনো অংশ প্রতি request-এ বদলাচ্ছে। সাধারণত timestamp এর কারণ হয়।

কোন বিষয় input হিসেবে গণ্য হয়, তা মনে রাখুন। System prompt, tool definition এবং multi-turn conversation-এ প্রতিটি turn-এ আবার পাঠানো সম্পূর্ণ history—সবই input token হিসেবে billed হয়। যে chat loop history কখনো trim করে না, তার খরচ ধীরে ধীরে quadratic হারে বাড়ে। Conversational কিছু তৈরি করার আগে সম্পূর্ণ হিসাব বোঝা দরকার: Claude token usage এবং billing কীভাবে বাস্তবে হিসাব হয়

systemd-এর অধীনে চালান

Environment file ব্যবহারের এই শৃঙ্খলার ফল হলো: প্রতিদিন সকালে আগের দিনের error-এর সারসংক্ষেপ তৈরি করা একটি timer।

# /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 unprivileged explain user-এ স্যুইচ করার আগেই root-owned, mode-600 file পড়ে। ফলে process variable-টি পায়, কিন্তু user key file পড়তে পারে না। systemd-journal group log access দেয়। Manual systemctl start দিয়ে পরীক্ষা করুন এবং journalctl -u log-digest.service পড়ুন। Typo ধরার জন্য 06:15 পর্যন্ত অপেক্ষা করবেন না। এই pattern shell pipeline-এর সীমা ছাড়িয়ে গেলে একই key-in-env-file পদ্ধতি একই box-এ Claude-চালিত n8n workflow-এ সরাসরি ব্যবহার করা যায়।

ব্যর্থতার ধরন এবং যে স্ট্রিংগুলো আপনি দেখবেন

সঠিক key থাকা সত্ত্বেও 401। Exception-এ লেখা থাকে:

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

আপনার shell-এ key কাজ করলেও service 401 দিলে বুঝবেন service-টি key পায়নি। মনে রাখবেন, systemd .bashrc পড়ে না; EnvironmentFile= সঠিক path নির্দেশ করছে কি না পরীক্ষা করুন। অন্যান্য কারণ হতে পারে env file-এ paste করা উদ্ধৃতি চিহ্ন (ANTHROPIC_API_KEY="sk-ant-..."; systemd উদ্ধৃতি চিহ্ন বাদ দেয়, কিন্তু অস্বাভাবিকভাবে উদ্ধৃতি চিহ্ন ব্যবহার করলে আপনার shell wrapper-এর . file সেগুলো value-এর অংশ হিসেবে রেখে দেয়), শেষে থাকা whitespace, অথবা গত সপ্তাহে Console-এ revoke করা key।

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'}

বর্তমান প্রজন্মের ID-গুলো লিখিত রূপেই নির্ভুল, claude-opus-4-8, claude-haiku-4-5, claude-sonnet-5। এগুলো models documentation থেকে copy করুন; কখনও স্মৃতি বা পুরোনো tutorial থেকে নেবেন না।

429 rate_limit_error। Error type string হলো rate_limit_error এবং response-এ retry-after header থাকে, যেখানে অপেক্ষার সময় সেকেন্ডে দেওয়া থাকে। Exception দেখানোর আগে SDK backoff সহ ইতিমধ্যে দুবার retry করেছে। তাই অব্যাহত 429-এর অর্থ আপনার sustained rate সত্যিই tier-এর সীমা ছাড়িয়ে গেছে। কাজ batch করুন বা সময়ের মধ্যে ছড়িয়ে দিন; retry loop আরও ঘন করবেন না।

Text-এর বদলে object print হয়। Output দেখতে এমন হয়: [TextBlock(citations=None, text='...', type='text')]। আপনি blocks iterate করে .text পড়ার বদলে response.content print করেছেন, যেখানে block.type == "text"। উপরের প্রতিটি SDK উদাহরণে এটি সঠিকভাবে করা হয়েছে; 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 call-গুলোকে এমন একটি agent-এ রূপ দেয়, যা tools ব্যবহার করে।

FAQ

Claude API পরীক্ষা করতে কত খরচ হয়?

এই ধরনের একটি টুলের জন্য খরচ সত্যিই খুব কম। July 2026 অনুযায়ী, Opus 4.8-এর দাম প্রতি million input token-এ $5 এবং প্রতি million output token-এ $25। তাই সাধারণ log diagnosis-এ কয়েক হাজার token input এবং কয়েকশ token output হলে খরচ প্রায় দুই cent। Haiku 4.5-এ ($1/$5) খরচ half cent-এরও কম। প্রতিদিনের digest চালানোর এক মাসের খরচ এক কাপ coffee-এর চেয়ে কম। ঝুঁকি প্রতি call-এর দামে নয়; ঝুঁকি unbounded loop এবং unbounded max_tokens-এ। এই কারণে এই guide-এ উভয়ই explicit ভাবে set করা হয়েছে।

Claude API-এর কি free tier আছে?

July 2026 অনুযায়ী কোনো চলমান free tier নেই। Anthropic-এর pricing documentation অনুযায়ী, নতুন user-রা API পরীক্ষা করার জন্য অল্প পরিমাণ free credit পান। এটি one-time trial। সঠিক পরিমাণ signup-এর সময় Console-এ দেখানো হয়। এরপর account-এ অর্থ যোগ করতে হবে। আপনার লক্ষ্য যদি frontier quality নয়, বরং প্রতি request-এ শূন্য marginal cost হয়, তাহলে বিকল্প হিসেবে Ollama দিয়ে একটি open-weight model self-host করুন এবং token-এর বদলে RAM খরচ করুন।

Server-এ API key কীভাবে নিরাপদ রাখব?

কখনো code-এ রাখবেন না, git-এ রাখবেন না, .bashrc থেকে export করবেন না, এবং এমন shell-এ type করবেন না যেখানে history সেটি সংরক্ষণ করবে। এটি root-owned একটি file-এ 600 permission দিয়ে রাখুন এবং প্রতিটি process-এর জন্য আলাদাভাবে load করুন। interactive ব্যবহারের জন্য wrapper script এবং systemd-এর জন্য EnvironmentFile= ব্যবহার করুন। প্রতি server বা project-এর জন্য একটি করে key নির্ধারণ করুন, যাতে ফাঁস হওয়া key revoke করা অস্ত্রোপচারের মতো নির্দিষ্ট কাজ হয়, সম্পূর্ণ ব্যবস্থা বদলাতে না হয়। key কখনো paste site বা git commit-এ গেলে সঙ্গে সঙ্গে Console-এ সেটি revoke করুন; commit মুছে ফেললেও key আর গোপন থাকে না।

কোন Claude model দিয়ে শুরু করা উচিত?

আপনি output যথেষ্ট ভালো কি না এবং এর ওপর ভিত্তি করে কাজ তৈরি করা যাবে কি না যাচাই করার সময় claude-opus-4-8 দিয়ে শুরু করুন। এতে ধারণাটির পূর্ণ quality মূল্যায়ন করতে পারবেন। hobby volume-এ cost difference কয়েক cent মাত্র। prompt স্থির হওয়ার পর আপনার প্রকৃত input claude-haiku-4-5-এ আবার চালান। summarization, classification এবং log triage-এর ক্ষেত্রে এটি প্রায়ই এক-পঞ্চমাংশ দামে সমান ভালো ফল দেয়। default হিসেবে নয়, measurement-এর ভিত্তিতে Haiku বা Sonnet-এ পরিবর্তন করুন।