Tutorial Claude API: Aplikasi Pertama di VPS Ubuntu 24.04
Buat penjelas log Python sekitar 60 baris di Ubuntu 24.04 dengan streaming, penanganan error bertipe, systemd, dan pembatasan biaya API Claude.
Yang Anda bangun
Tool command-line pada VPS Ubuntu 24.04 baru. Anda dapat menyalurkan pesan error atau potongan log ke tool ini untuk mendapatkan diagnosis dalam bahasa Inggris yang sederhana: journalctl -u nginx -n 50 | explain. Tool ini hanya terdiri dari sekitar 60 baris Python. Proyek ini mempraktikkan semua hal yang diperlukan aplikasi Claude API nyata: key yang disimpan dengan benar, virtualenv, bentuk respons SDK, streaming, rangkaian exception bertipe, serta unit systemd agar tool berjalan tanpa intervensi Anda.
Saya memilih proyek ini dengan sengaja. Sebagian besar tutorial “aplikasi API pertama” meminta Anda membuat chatbot yang tidak akan pernah dibuka lagi. Penjelas log langsung berguna pada server sejak hari pertama. Proyek ini juga memaksa Anda memahami dua hal yang sering salah dilakukan pemula: membaca objek respons dengan benar dan mengendalikan pengeluaran. API menagih berdasarkan token tanpa batas selain batas yang Anda tetapkan. Karena itu, pengendalian biaya merupakan bagian dari desain, bukan pertimbangan setelahnya. Disiplin yang sama penting ketika Anda mulai menjalankan Claude Code pada VPS yang sama di tmux.
Dapatkan API key dari Console
Akses API dikelola melalui Anthropic Console di platform.claude.com. Daftar, lalu buat key di Settings → API Keys (dokumentasi menyediakan tautan langsung ke platform.claude.com/settings/keys). Console meminta Anda memberi nama key, memilih masa berlaku, dan mengaitkannya dengan akun Anda atau service account. Anthropic merekomendasikan key service account untuk service production dan apa pun yang digunakan bersama. Key hanya ditampilkan sekali, diawali dengan sk-ant-, dan tidak dapat diambil kembali. Segera salin key tersebut, atau hapus lalu buat key baru.
Mengenai biaya: per Oktober 2026, API tidak memiliki free tier berkelanjutan. Dokumentasi harga Anthropic menyatakan bahwa pengguna baru menerima sejumlah kecil kredit gratis untuk pengujian. Jumlah pastinya adalah jumlah yang ditampilkan Console saat pendaftaran. Setelah kredit habis, Anda harus mengisi saldo akun agar request berhasil. Ini terpisah dari langganan claude.ai, dan API key tidak memberi Anda akses ke aplikasi chat. Paket Pro tidak mencakup kredit API, tetapi paket Max dan Team mencakupnya: per Oktober 2026, $100 per bulan untuk Max 5x dan $200 untuk Max 20x (Team menyediakan pool $20 per seat Standard dan $100 per seat Premium, dengan batas $500), yang dapat diklaim dengan menautkan organisasi Console dari pengaturan billing claude.ai. Kredit yang tidak digunakan kedaluwarsa pada akhir setiap siklus billing dan tidak mencakup Claude Code. Detailnya tersedia di cara kerja kredit API bulanan Max dan Team. Jika Anda sedang mempertimbangkan langganan dibandingkan API, pertukaran tersebut merupakan topik tersendiri: paket Claude yang sebenarnya Anda perlukan.
Buat key yang dibatasi untuk satu project atau server. Jika sebuah key bocor, dan dalam jangka waktu yang cukup panjang hal itu akan terjadi, Anda dapat mencabutnya tanpa mengganggu semua resource lain yang Anda miliki.
Jauhkan key dari .bashrc
Tindakan refleksifnya adalah export ANTHROPIC_API_KEY=sk-ant-... di ~/.bashrc. Jangan lakukan itu. Ada tiga masalah yang terpisah:
- Setiap proses mewarisinya. Variabel lingkungan yang diekspor dalam login shell akan diteruskan ke semua yang Anda jalankan, termasuk aplikasi web, pelapor crash yang secara otomatis memasukkan lingkungannya ke dalam laporan bug, serta halaman
phpinfo()yang masih dibiarkan aktif. Permukaan paparan key menjadi "semua yang pernah dijalankan pengguna ini." - Mengetiknya akan tersimpan di
~/.bash_history. Jalankan perintah export secara manual sekali, dan key Anda akan tersimpan dalam file plaintext selamanya serta disinkronkan ke setiap backup direktori home Anda. - Key tidak tersedia saat systemd membutuhkannya. Service tidak membaca
.bashrcAnda, sehingga pola ini gagal tepat saat skrip dipromosikan menjadi unit, biasanya sebagai error 401 yang misterius pada pukul 6 pagi.
Pola yang tepat pada server adalah menggunakan file lingkungan khusus dengan permission 600, yang hanya dimuat oleh proses yang membutuhkannya:
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/nullGunakan tee dari printf, bukan editor, jika Anda ingin mencegah key tersimpan dalam file swap editor. Apa pun caranya, verifikasi dengan ls -l /etc/claude-explain.env bahwa file tersebut membaca -rw------- dan dimiliki oleh root. Interactive shell mendapatkan key untuk setiap pemanggilan melalui wrapper (di bawah), sedangkan systemd mendapatkannya melalui EnvironmentFile=. root membaca file tersebut sebelum menurunkan privilege, sehingga service user tidak pernah memerlukan akses baca ke file itu. Key tidak pernah muncul dalam kode, git, output ps, atau shell history.
Instal SDK dalam venv
Ubuntu 24.04 menyertakan Python 3.12 dengan penegakan PEP 668. Karena itu, menjalankan pip install anthropic langsung pada interpreter sistem gagal dengan error: externally-managed-environment. Error tersebut menunjukkan bahwa OS bekerja sesuai ketentuan. Gunakan virtualenv:
sudo apt update && sudo apt install -y python3-venv
sudo python3 -m venv /opt/explain/venv
sudo /opt/explain/venv/bin/pip install anthropicAktivasi tidak diperlukan pada server. Memanggil /opt/explain/venv/bin/python secara langsung selalu menggunakan paket dari venv.
Panggilan pertama dan cara membaca respons dengan benar
import anthropic
client = anthropic.Anthropic() # reads ANTHROPIC_API_KEY from the environment
response = client.messages.create(
model="claude-opus-5-5",
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)Ada dua hal dalam dua belas baris tersebut yang menjadi dasar sebagian besar model mental API. Pertama, anthropic.Anthropic() tanpa argumen membaca kunci dari environment; jangan pernah meneruskannya sebagai string literal. Kedua, response.content adalah daftar blok konten, bukan string. Jika langsung dicetak, hasilnya adalah keluaran klasik pengguna baru:
[TextBlock(citations=None, text='A systemd unit file is...', type='text')]Itu bukan bug, melainkan repr objek tersebut. Respons dapat berisi beberapa jenis blok (teks, pemanggilan tool, proses thinking), sehingga Anda perlu melakukan iterasi dan memeriksa block.type == "text" sebelum mengakses .text. Pada Opus 5.5, hal ini penting sejak pemanggilan pertama: thinking selalu aktif, sehingga kecuali model melewati proses thinking pada permintaan sederhana, daftar tersebut dimulai dengan blok thinking yang teksnya secara default kosong, dan response.content[0].text bukan jawaban Anda. Pasang loop tersebut sejak hari pertama agar seluruh kelas kebingungan “hasilnya mencetak data tidak beraturan” tidak pernah terjadi.
Gunakan ID model yang tepat, yaitu claude-opus-5-5. Mulai generasi 4.6, ID model tidak lagi menyertakan tanggal, dan ID tanpa tanggal tersebut adalah snapshot yang dipatok. Karena itu, jangan mengikuti kebiasaan lama (atau tulisan blog lama) yang menyarankan penambahan sufiks tanggal pada model saat ini; tindakan tersebut menghasilkan 404, yang dibahas di bawah. Model yang lebih lama menggunakan pola sebaliknya: ID kanonis Haiku 4.5 adalah claude-haiku-4-5-20251001.
Alat yang digunakan: penjelasan
Berikut program lengkapnya. Program ini menerima input dari stdin, menghasilkan diagnosis secara streaming, dan menangani error:
#!/usr/bin/env python3
"""explain: pipe an error or log excerpt in, get a diagnosis out."""
import sys
import anthropic
MODEL = "claude-opus-5-5"
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=4096,
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())Simpan sebagai /opt/explain/explain.py, lalu tambahkan wrapper yang memuat key untuk penggunaan interaktif:
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 harus dijalankan melalui sudo, atau file env harus memiliki group yang diikuti oleh admin user Anda. Tentukan salah satu opsi tersebut secara sengaja, bukan dengan melonggarkan permission file menjadi 644.)
Mengapa menggunakan streaming. client.messages.stream mencetak token segera setelah diterima, bukan menunggu seluruh proses generation selesai. Cara ini juga menghindari HTTP timeout pada output yang panjang. SDK akan menolak nilai max_tokens yang sangat besar pada pemanggilan non-streaming karena alasan tersebut. text_stream hanya menghasilkan teks jawaban. Dengan tampilan thinking default yang aktif pada Opus 5.5, tidak ada teks thinking yang di-streaming, sehingga output tetap bersih. Jika Anda memerlukan object yang telah dirakit setelahnya, panggil stream.get_final_message() di dalam blok with.
Mengapa urutan exception seperti itu. SDK menghasilkan typed exception dengan urutan dari yang paling spesifik: RateLimitError adalah 429 dan membawa header retry-after yang menunjukkan waktu tunggu; APIStatusError mencakup respons non-2xx lainnya (periksa e.status_code >= 500 untuk masalah di sisi server); APIConnectionError berarti request sama sekali tidak menerima respons. Sebelum membuat loop retry, ingat bahwa SDK sudah melakukan retry untuk error 429 dan 5xx secara otomatis, dua kali secara default dengan exponential backoff (max_retries pada client). Saat except Anda dijalankan, seluruh retry tersebut sudah habis. Karena itu, tindakan yang tepat dalam CLI adalah melaporkan error lalu keluar, bukan menunggu dan terus mengirim request.
Kontrol biaya
Bagian ini perlu dibahas secara khusus karena API tidak memiliki batas bulanan bawaan selain batas yang Anda konfigurasi, dan setiap kesalahan di sini dapat terakumulasi tanpa terlihat.
max_tokens adalah batas maksimum pengeluaran per panggilan. Token output merupakan komponen yang mahal. Pada Opus 5.5, harganya lima kali token input, dan max_tokens membatasi jumlah token yang boleh dihasilkan model. Prompt yang berjalan tanpa kendali tidak dapat menghasilkan biaya output yang lebih besar daripada batas yang Anda tetapkan. Pada model 5.5, batas ini juga mencakup thinking: token thinking dihitung dalam max_tokens dan ditagihkan sebagai output, meskipun teks thinking tidak dikembalikan kepada Anda. Sesuaikan ukurannya dengan tugasnya: 4,096 cukup untuk memberi ruang bagi diagnosis log singkat beserta proses thinking sebelumnya; tugas klasifikasi memerlukan jauh lebih sedikit. Jika respons berhenti terlalu cepat dengan stop_reason: "max_tokens", berarti batasnya terlalu rendah. Naikkan secara sadar, atau turunkan pengaturan effort agar model melakukan lebih sedikit thinking. Jangan langsung menggunakan nilai yang sangat besar.
Hitung sebelum mengirim. Input juga dikenai biaya, dan log dapat berukuran besar. API menyediakan endpoint penghitung yang dapat digunakan secara gratis. Endpoint ini memiliki rate limit sendiri, terpisah dari pembuatan pesan:
count = client.messages.count_tokens(
model="claude-opus-5-5",
messages=[{"role": "user", "content": big_log_text}],
)
print(count.input_tokens)Gunakan endpoint ini untuk mencegah log berukuran 2 GB tidak sengaja dialirkan melalui tool. Gunakan model yang benar-benar akan Anda panggil. Model Claude 4.7 dan yang lebih baru menggunakan tokenizer yang lebih baru, yang menghasilkan sekitar 30% lebih banyak token untuk teks yang sama dibandingkan model Claude sebelumnya. Jangan gunakan tiktoken untuk tujuan ini. Itu adalah tokenizer milik OpenAI, bukan tokenizer Claude, sehingga hasil penghitungannya tidak akan sama dengan jumlah yang ditagihkan kepada Anda.
Pilih model berdasarkan tugas, bukan loyalitas. Per Oktober 2026, Opus 5.5 (claude-opus-5-5) mengenakan biaya $4 per juta token input dan $20 per juta token output. Haiku 5.5 (claude-haiku-5-5) mengenakan biaya $0.10/$0.50 untuk prompt hingga 100,000 token, atau $0.50/$2.50 di atas jumlah tersebut, dengan context 1M. Sonnet 5.5 (claude-sonnet-5-5) berada di antara keduanya, dengan biaya $2/$10. Secara konkret, cuplikan log 2,000 token dengan jawaban 500 token berbiaya sekitar $0.018 pada Opus dan $0.00045 pada Haiku, ditambah biaya thinking yang dilakukan model dan ditagihkan sebagai output. Mulailah dengan Opus saat menilai kualitas output. Kemudian coba prompt yang sama pada Haiku. Untuk transformasi sederhana bervolume tinggi, hasilnya sering kali tidak dapat dibedakan, dengan harga per token sekitar seperempat puluhnya. Periksa angka terbaru di halaman pricing sebelum memasukkan nilai ini secara permanen ke dalam anggaran.
Gunakan Batches untuk pekerjaan yang dapat ditunda. Batches API memproses permintaan secara asynchronous dengan biaya 50% dari harga standar, dan sebagian besar batch selesai dalam waktu satu jam. Digest malam, backfill, klasifikasi massal, serta pekerjaan lain yang tidak memerlukan manusia untuk menunggu termasuk dalam kategori ini.
Gunakan prompt caching untuk context yang berulang. Jika setiap panggilan mengirim ulang system prompt atau runbook besar yang sama, tandai sebagai cacheable:
response = client.messages.create(
model="claude-opus-5-5",
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 onPenulisan cache dikenai biaya 1.25x harga input dengan TTL 5 menit. Pembacaan cache dikenai biaya 0.05x pada Opus 5.5 dan Sonnet 5.5, serta 0.1x pada sebagian besar model lain. Dengan demikian, panggilan kedua dalam periode tersebut sudah menutup biaya panggilan pertama. Ada dua hal yang perlu diperhatikan. Prefix yang disimpan dalam cache harus memenuhi minimum per model, yaitu 512 token pada Opus 5.5. Karena itu, system prompt yang sangat pendek tidak akan disimpan dalam cache tanpa pemberitahuan. Selain itu, jika cache_read_input_tokens tetap bernilai nol pada panggilan identik, berarti ada bagian prefix yang berubah pada setiap permintaan. Timestamp adalah penyebab yang paling umum.
Ingat apa saja yang dihitung sebagai input. System prompt, definisi tool, dan seluruh riwayat yang dikirim ulang pada setiap giliran dalam percakapan multi-turn semuanya ditagihkan sebagai token input. Chat loop yang tidak pernah memangkas riwayat akan meningkatkan biaya secara kuadratik. Pahami perhitungan biaya secara menyeluruh sebelum membangun fitur percakapan: cara penggunaan token dan penagihan Claude sebenarnya dihitung.
Jalankan dengan systemd
Manfaat dari disiplin penggunaan file environment: timer yang merangkum error kemarin setiap pagi.
# /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 nowPerhatikan manfaat EnvironmentFile=: systemd membaca file milik root dengan mode 600 sebelum beralih ke pengguna tanpa hak istimewa explain. Dengan demikian, proses memperoleh variabel tersebut, sementara pengguna tidak dapat membaca file key. Grup systemd-journal memberikan akses ke log. Uji dengan systemctl start secara manual dan baca journalctl -u log-digest.service. Jangan menunggu hingga 06:15 hanya untuk menemukan typo. Jika pola ini berkembang melampaui pipeline shell, pendekatan key di dalam file environment yang sama dapat langsung diterapkan pada workflow n8n berbasis Claude di server yang sama.
Mode kegagalan dan string yang akan Anda lihat
401 pada key yang berfungsi. Exception yang muncul adalah:
anthropic.AuthenticationError: Error code: 401 - {'type': 'error', 'error': {'type': 'authentication_error', 'message': 'invalid x-api-key'}, 'request_id': 'req_011CSHoEeqs5C35K2UUqR7Fy'}Jika key berfungsi di shell Anda, tetapi service menghasilkan 401, berarti service tidak pernah menerima key tersebut. Ingat bahwa systemd tidak membaca .bashrc. Periksa apakah EnvironmentFile= mengarah ke path yang benar. Penyebab lain meliputi tanda kutip yang ikut ditempelkan ke file env (ANTHROPIC_API_KEY="sk-ant-..."; systemd menghapus tanda kutip, tetapi wrapper shell Anda, . file, mempertahankannya sebagai bagian dari value jika cara Anda mengutipnya tidak tepat), whitespace di akhir, key yang Anda cabut melalui Console minggu lalu, atau key yang sudah mencapai masa berlaku yang Anda tentukan saat membuatnya.
404 akibat typo pada model. Bentuk yang paling sering terjadi adalah menambahkan akhiran tanggal pada model ID yang tidak memiliki bentuk bertanggal:
anthropic.NotFoundError: Error code: 404 - {'type': 'error', 'error': {'type': 'not_found_error', 'message': 'model: claude-opus-5-5-20260922'}, 'request_id': 'req_011CSJqymAvNw4bT3qmDdMbA'}ID generasi saat ini harus ditulis persis seperti berikut: claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5, claude-fable-5-1. Model dari sebelum generasi 4.6 merupakan pengecualian: claude-haiku-4-5 adalah alias praktis untuk ID bertanggal claude-haiku-4-5-20251001, dan kedua bentuk tersebut dapat digunakan. Salin ID dari dokumentasi model, jangan mengandalkan ingatan atau tutorial lama.
429 rate_limit_error. String jenis error tersebut adalah rate_limit_error, dan response menyertakan header retry-after yang berisi jumlah detik untuk menunggu. SDK sudah mencoba ulang 2 kali dengan backoff sebelum Anda melihat exception tersebut. Jadi, 429 yang terus-menerus berarti laju permintaan berkelanjutan Anda memang melebihi batas tier. Kelompokkan pekerjaan dalam batch atau sebarkan waktunya. Jangan memperketat loop retry.
Yang dicetak adalah object, bukan text. Output terlihat seperti [TextBlock(citations=None, text='...', type='text')]. Anda mencetak response.content, bukan melakukan iterasi pada block dan membaca .text dari block yang memenuhi block.type == "text". Semua contoh SDK di atas sudah melakukannya dengan benar. Salin loop tersebut.
error: externally-managed-environment. Anda menjalankan pip install pada system Python milik Ubuntu 24.04. Gunakan venv. Jangan pernah menjalankan --break-system-packages pada server yang penting bagi Anda.
Jawaban terpotong. response.stop_reason == "max_tokens" berarti model mencapai batas output di tengah proses berpikir. Ini sesuai desain. Naikkan batas tersebut secara sengaja, dan ingat bahwa pada model 5.5, proses berpikir menggunakan batas yang sama.
Setelah aplikasi pertama Anda berfungsi, membangun AI agent dengan Claude mengubah panggilan API yang sama menjadi agent yang menggunakan tool.
FAQ
Berapa biaya untuk mencoba Claude API?
Biayanya sangat rendah untuk alat seperti ini. Per Oktober 2026, Opus 5.5 berbiaya $4 per juta token input dan $20 per juta token output. Dengan demikian, diagnosis log biasa, yang menggunakan beberapa ribu token input dan beberapa ratus token output, berbiaya sekitar dua sen sebelum thinking tokens, yang ditagihkan sebagai output. Pada Haiku 5.5 ($0.10/$0.50), biayanya jauh di bawah sepersepuluh sen. Digest harian selama sebulan biayanya kurang dari harga secangkir kopi. Risikonya bukan harga per panggilan, melainkan loop tanpa batas dan max_tokens tanpa batas. Karena itu, keduanya ditetapkan secara eksplisit dalam panduan ini.
Apakah Claude API memiliki paket gratis?
Tidak ada paket gratis berkelanjutan per Oktober 2026. Dokumentasi harga Anthropic menyatakan bahwa pengguna baru menerima sejumlah kecil kredit gratis untuk menguji API. Ini adalah uji coba satu kali, dengan jumlah pastinya ditampilkan di Console saat pendaftaran. Setelah itu, Anda harus mengisi saldo akun. Pelanggan Max dan Team merupakan pengecualian karena paket mereka mencakup kredit API bulanan, seperti dijelaskan di atas. Jika tujuan Anda adalah biaya marginal nol per permintaan, bukan kualitas frontier, alternatifnya adalah menjalankan model open-weight secara mandiri dengan Ollama dan menggunakan RAM sebagai pengganti token.
Bagaimana cara menjaga keamanan API key di server?
Jangan pernah menyimpannya di dalam kode, git, atau hasil ekspor dari .bashrc. Jangan pula mengetikkannya ke shell karena riwayat shell akan menyimpannya. Simpan key dalam file yang dimiliki root dengan permission 600. Muat key untuk setiap proses. Gunakan wrapper script untuk penggunaan interaktif dan EnvironmentFile= untuk systemd. Batasi satu key untuk setiap server atau project agar pencabutan key yang bocor dapat dilakukan secara terarah, bukan dengan menonaktifkan lebih banyak akses dari yang diperlukan. Jika key pernah dimasukkan ke situs paste atau commit git, segera cabut key tersebut di Console. Menghapus commit tidak menghilangkan kebocoran key.
Model Claude mana yang sebaiknya saya gunakan terlebih dahulu?
Mulailah dengan claude-opus-5-5 saat mengevaluasi apakah output cukup baik untuk dijadikan dasar pengembangan. Dengan demikian, Anda dapat menilai gagasan tersebut dengan kualitas penuh. Pada volume penggunaan hobi, perbedaan biayanya hanya beberapa sen. Setelah prompt ditetapkan, jalankan kembali input nyata Anda pada claude-haiku-5-5. Untuk peringkasan, klasifikasi, dan triage log, model ini sering kali sudah cukup baik dengan harga per token sebesar seperempat puluh dari model tersebut. Beralihlah ke Haiku atau Sonnet berdasarkan hasil pengukuran, bukan secara default.