AI Prompt Engineering · Pelajaran

Kompromi Biaya dan Latensi

Anggaran token untuk berpikir, biaya inferensi, dan strategi perutean hibrida.

Pelajaran 4 dari 413 langkah

Kompromi Biaya dan Latensi adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Segitiga Biaya–Kualitas–Latensi

Dalam desain sistem LLM, terdapat tiga aspek mendasar: biaya, kualitas, dan latensi. Pada waktu tertentu, Anda hanya dapat mengoptimalkan paling banyak dua dari tiga aspek tersebut.

  • Biaya rendah + kualitas tinggi = lambat (model penalaran, pembuatan lambat)
  • Biaya rendah + latensi rendah = kualitas lebih rendah (model kecil dan cepat)
  • Kualitas tinggi + latensi rendah = mahal (model penalaran dengan streaming)

Setiap keputusan arsitektur merupakan pertukaran kepentingan dalam segitiga ini.

Harga Model Penalaran

Token berpikir dikenai biaya tambahan selain token masukan dan keluaran standar. Biaya satu pemanggilan model penalaran mencakup: token masukan + token berpikir + token keluaran.

Dibandingkan dengan model cepat dan kecil: o3 kira-kira 20 kali lebih mahal daripada GPT-4o-mini per token; Claude Opus dengan pemikiran diperluas kira-kira 10–15 kali lebih mahal daripada Claude Haiku per token keluaran.

# Rough cost estimates (2025 pricing, may change)
# Source: provider pricing pages

PRICING = {
    # (input $/1M tokens, output $/1M tokens)
    'gpt-4o-mini':       (0.15,   0.60),
    'gpt-4o':            (2.50,  10.00),
    'o3-mini':           (1.10,   4.40),
    'o3':                (10.0,  40.00),
    'claude-haiku-4-5':  (0.25,   1.25),
    'claude-sonnet-4-5': (3.00,  15.00),
    'claude-opus-4-5':   (15.0,  75.00),
}

def estimate_cost(model, input_tokens, output_tokens, thinking_tokens=0):
    inp_price, out_price = PRICING[model]
    # Thinking tokens billed as output tokens
    total_out = output_tokens + thinking_tokens
    cost = (input_tokens / 1e6 * inp_price) + (total_out / 1e6 * out_price)
    return cost

# A single hard question with 8000 thinking tokens:
cost = estimate_cost('claude-opus-4-5', 500, 300, thinking_tokens=8000)
print(f'Cost per call: ${cost:.4f}')

Biaya Tambahan Token Berpikir

Jumlah token berpikir sering kali jauh lebih besar daripada token keluaran. Jawaban ringkas sepanjang 200 kata mungkin didukung oleh 5.000–15.000 token berpikir. Token berpikir tersebut dikenai biaya yang sama seperti token keluaran.

Inilah alasan pengali biaya untuk model penalaran terutama ditentukan oleh token berpikir, bukan panjang jawaban.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def analyze_token_breakdown(question, budget_tokens):
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=budget_tokens + 2000,
        thinking={'type': 'enabled', 'budget_tokens': budget_tokens},
        messages=[{'role': 'user', 'content': question}]
    )

    # Usage breakdown
    usage = response.usage
    print(f'Input tokens:  {usage.input_tokens:,}')
    print(f'Output tokens: {usage.output_tokens:,}')

    # Thinking tokens are in cache_creation_input_tokens on some APIs
    # or can be estimated from thinking block content length
    thinking_blocks = [b for b in response.content if b.type == 'thinking']
    est_thinking = sum(len(b.thinking.split()) * 1.3 for b in thinking_blocks)
    print(f'Est. thinking tokens: {int(est_thinking):,}')
    answer = next(b.text for b in response.content if b.type == 'text')
    print(f'Answer words: {len(answer.split())}')

analyze_token_breakdown(
    'Explain the trade-offs between REST and GraphQL APIs.',
    budget_tokens=5000
)

Latensi: Hal yang Perlu Diharapkan

Kisaran latensi yang teramati untuk berbagai konfigurasi model (sangat bervariasi bergantung pada beban dan tingkat kesulitan masalah):

  • Claude Haiku: 0,5–2 detik
  • Claude Sonnet: 2–8 detik
  • Claude Opus (tanpa berpikir): 5–15 detik
  • Claude Opus (berpikir 5K): 15–40 detik
  • Claude Opus (berpikir 16K): 40–90 detik
  • o3 (upaya tinggi): 30–120 detik
import time
import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def benchmark_latency(prompt, model, budget_tokens=None):
    kwargs = {
        'model': model,
        'max_tokens': 2000,
        'messages': [{'role': 'user', 'content': prompt}]
    }
    if budget_tokens:
        kwargs['thinking'] = {'type': 'enabled', 'budget_tokens': budget_tokens}
        kwargs['max_tokens'] = budget_tokens + 2000

    start = time.time()
    response = client.messages.create(**kwargs)
    elapsed = time.time() - start
    answer = response.content[-1].text
    print(f'{model} (budget={budget_tokens}): {elapsed:.1f}s')
    return elapsed, answer

benchmark_latency('Name 3 planets', 'claude-haiku-4-5')
benchmark_latency('Solve x^2 - 5x + 6 = 0', 'claude-opus-4-5', 3000)
benchmark_latency('Design a fault-tolerant payment system', 'claude-opus-4-5', 10000)

Waktu hingga Token Pertama dengan Streaming

Walaupun latensi total model penalaran tinggi, waktu hingga token pertama (TTFT) dengan streaming dapat jauh lebih rendah — model mulai men-streaming jawaban segera setelah selesai berpikir. Tampilkan sesuatu kepada pengguna dengan cepat melalui streaming.

import anthropic
import time

client = anthropic.Anthropic(api_key='sk-ant-...')

def stream_with_timing(prompt):
    start = time.time()
    first_token_time = None
    full_text = ''

    with client.messages.stream(
        model='claude-opus-4-5',
        max_tokens=10000,
        thinking={'type': 'enabled', 'budget_tokens': 5000},
        messages=[{'role': 'user', 'content': prompt}]
    ) as stream:
        in_answer = False
        for text_chunk in stream.text_stream:
            if not in_answer:
                in_answer = True
                first_token_time = time.time() - start
                print(f'Time to first answer token: {first_token_time:.1f}s')
            full_text += text_chunk
            print(text_chunk, end='', flush=True)

    total_time = time.time() - start
    print(f'\nTotal time: {total_time:.1f}s')

stream_with_timing('List 5 key benefits of microservices.')

Pola Arsitektur Hibrida

Pola produksi yang praktis: gunakan model standar yang cepat terlebih dahulu. Jika hasilnya memuaskan (periksa dengan metrik kualitas Anda), segera kembalikan hasil tersebut. Jika tidak, alihkan ke model penalaran. Dengan demikian, Anda mendapatkan latensi dan biaya rata-rata yang rendah, sekaligus akurasi tinggi untuk kasus yang sulit.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def hybrid_query(question, quality_threshold=0.7):
    # Step 1: Try fast model first
    r_fast = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=300,
        messages=[{'role': 'user', 'content': question}]
    )
    fast_answer = r_fast.content[0].text

    # Step 2: Quick confidence check
    confidence_check = client.messages.create(
        model='claude-haiku-4-5',
        max_tokens=20,
        messages=[{
            'role': 'user',
            'content': (
                f'Q: {question}\nA: {fast_answer}\n'
                f'Rate answer quality 0.0-1.0. Number only:'
            )
        }]
    )
    try:
        quality = float(confidence_check.content[0].text.strip())
    except ValueError:
        quality = 0.5

    if quality >= quality_threshold:
        return fast_answer, 'fast'

    # Step 3: Escalate to reasoning model
    r_slow = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=8000,
        thinking={'type': 'enabled', 'budget_tokens': 6000},
        messages=[{'role': 'user', 'content': question}]
    )
    return next(b.text for b in r_slow.content if b.type == 'text'), 'reasoning'

Biaya dalam Skala Besar: Menghitungnya

Model penalaran yang tampak terjangkau saat pengujian dapat menjadi biaya yang signifikan dalam skala besar. Selalu proyeksikan biaya sebelum memilih arsitektur.

def project_monthly_cost(daily_queries, model_config):
    """
    Project monthly API costs for different configurations.
    model_config: dict with 'cost_per_query' key
    """
    monthly_queries = daily_queries * 30
    monthly_cost = monthly_queries * model_config['cost_per_query']

    print(f'Daily queries: {daily_queries:,}')
    print(f'Monthly queries: {monthly_queries:,}')
    print(f'Cost per query: ${model_config["cost_per_query"]:.4f}')
    print(f'Monthly cost: ${monthly_cost:,.2f}')
    return monthly_cost

# Compare configurations at 10,000 queries/day
configs = [
    {'name': 'All Haiku', 'cost_per_query': 0.0005},
    {'name': 'All Sonnet', 'cost_per_query': 0.015},
    {'name': 'All Opus+Thinking', 'cost_per_query': 0.85},
    {'name': 'Hybrid (90% Haiku, 10% Opus)', 'cost_per_query': 0.9*0.0005 + 0.1*0.85},
]

for config in configs:
    print(f'\n--- {config["name"]} ---')
    project_monthly_cost(10_000, config)

Caching Prompt untuk Mengurangi Biaya

Untuk pemanggilan model penalaran dengan prompt sistem atau konteks yang panjang dan berulang, gunakan caching prompt. Biaya token yang tersimpan dalam cache 90% lebih rendah daripada token yang tidak di-cache. Hal ini terutama berdampak besar ketika konteks besar yang sama (dokumen, kode) dikirim berulang kali.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

LONG_CONTEXT = 'A' * 50000  # Simulated large document

# With prompt caching: mark large context as cacheable
response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=10000,
    thinking={'type': 'enabled', 'budget_tokens': 6000},
    system=[
        {
            'type': 'text',
            'text': f'You are analyzing this document: {LONG_CONTEXT}',
            'cache_control': {'type': 'ephemeral'}  # Cache this prefix
        }
    ],
    messages=[{
        'role': 'user',
        'content': 'What are the main themes in this document?'
    }]
)

usage = response.usage
print(f'Cache read tokens: {getattr(usage, "cache_read_input_tokens", 0):,}')
print(f'Cache creation tokens: {getattr(usage, "cache_creation_input_tokens", 0):,}')
# Second call with same system content costs ~90% less on cached tokens

Pemrosesan Batch untuk Efisiensi Biaya

OpenAI dan Anthropic sama-sama menawarkan API batch dengan diskon biaya 50% untuk permintaan yang tidak sensitif terhadap waktu. Jika Anda memiliki kueri dalam jumlah besar yang dapat menunggu beberapa jam untuk memperoleh hasil, pemrosesan batch adalah opsi yang paling hemat biaya.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

# Batch API: 50% cheaper, 24-hour turnaround
requests = [
    {
        'custom_id': f'query_{i}',
        'params': {
            'model': 'claude-opus-4-5',
            'max_tokens': 1024,
            'messages': [{'role': 'user', 'content': f'Analyze dataset row {i}'}]
        }
    }
    for i in range(100)  # 100 queries in one batch
]

# Submit batch
batch = client.messages.batches.create(requests=requests)
print(f'Batch ID: {batch.id}')
print(f'Status: {batch.processing_status}')
print(f'Requests: {batch.request_counts}')
# Poll batch.id for results when processing_status == 'ended'

Mengoptimalkan Anggaran Token

Sesuaikan budget_tokens dengan kelas masalah Anda. Menggunakan anggaran 16K untuk masalah sederhana akan membuang token dan menambah latensi. Buat tabel pencarian anggaran berdasarkan tingkatan kesulitan masalah.

BUDGET_LOOKUP = {
    'simple_math':        1000,   # Arithmetic, basic algebra
    'medium_code':        3000,   # Function implementation, debugging
    'complex_reasoning':  8000,   # System design, complex analysis
    'research_grade':    16000,   # Proofs, research-level problems
}

def budget_for_query(query):
    q_lower = query.lower()
    if any(kw in q_lower for kw in ['calculate', 'what is', 'how many', 'convert']):
        return BUDGET_LOOKUP['simple_math']
    elif any(kw in q_lower for kw in ['code', 'function', 'bug', 'implement']):
        return BUDGET_LOOKUP['medium_code']
    elif any(kw in q_lower for kw in ['design', 'architecture', 'analyze', 'strategy']):
        return BUDGET_LOOKUP['complex_reasoning']
    else:
        return BUDGET_LOOKUP['medium_code']  # Safe default

print(budget_for_query('What is 15% of 340?'))       # 1000
print(budget_for_query('Implement a trie in Python')) # 3000
print(budget_for_query('Design a CDC pipeline'))      # 8000

Menetapkan SLA untuk Aplikasi LLM

Sebelum memilih antara model standar dan model penalaran, tentukan persyaratan Perjanjian Tingkat Layanan (SLA) aplikasi Anda:

  • Latensi P50: Pengalaman pengguna yang umum
  • Latensi P99: Pengalaman pengguna dalam kondisi terburuk
  • Anggaran token: Biaya maksimum per kueri pengguna
  • Batas minimum kualitas: Akurasi minimum yang dapat diterima pada kumpulan data pengujian Anda

Model penalaran dengan mudah melanggar SLA latensi P99 untuk aplikasi interaktif. Pahami batasan Anda sebelum keputusan arsitektur ditetapkan.

Uji Pemahaman: Biaya Model Penalaran

Apa faktor utama yang menyebabkan tingginya biaya saat menggunakan model penalaran dibandingkan dengan model standar?

Ringkasan: Kompromi Biaya dan Latensi

Model penalaran mahal: token berpikir ditagihkan sebagai token keluaran dan ukurannya dapat 10–50 kali lebih besar daripada jawaban yang terlihat. Latensi berkisar antara 15–120 detik untuk masalah yang sulit. Kurangi dampaknya dengan: pola hibrida (model cepat terlebih dahulu, lalu beralih hanya jika keyakinan rendah), caching prompt untuk konteks besar yang berulang (diskon 90% untuk token yang di-cache), API batch untuk beban kerja luring (diskon 50%), dan penyesuaian budget_tokens dengan tingkat kesulitan masalah. Dalam skala besar, biaya kecil per kueri pun dapat terakumulasi menjadi tagihan bulanan yang besar — selalu proyeksikan biaya sebelum menetapkan arsitektur.

Gratis untuk memulai

Belajar AI Prompt Engineering dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
53
Pelajaran
199

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kompromi Biaya dan Latensi” gratis?

Ya — teks lengkap “Kompromi Biaya dan Latensi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kompromi Biaya dan Latensi”?

Anggaran token untuk berpikir, biaya inferensi, dan strategi perutean hibrida. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Kompromi Biaya dan Latensi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Perbedaan Model Penalaran
  2. Prompt Efektif untuk Penalaran Panjang
  3. Kapan Menggunakan Model Penalaran atau Standar
  4. Kompromi Biaya dan Latensi
← Kembali ke AI Prompt Engineering