ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง
งบประมาณโทเค็นสำหรับการคิด ต้นทุนการอนุมาน และกลยุทธ์การกำหนดเส้นทางแบบผสม
ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
สามเหลี่ยมค่าใช้จ่าย–คุณภาพ–ความหน่วง
ในการออกแบบระบบ LLM มีสามปัจจัยพื้นฐานที่สัมพันธ์กัน ได้แก่ ค่าใช้จ่าย คุณภาพ และ ความหน่วง ในช่วงเวลาใดเวลาหนึ่ง คุณสามารถปรับให้เหมาะสมได้มากที่สุดเพียงสองปัจจัยจากสามปัจจัยนี้
- ค่าใช้จ่ายต่ำ + คุณภาพสูง = ช้า (โมเดลให้เหตุผล การสร้างผลลัพธ์ที่ช้า)
- ค่าใช้จ่ายต่ำ + ความหน่วงต่ำ = คุณภาพต่ำกว่า (โมเดลขนาดเล็ก/เร็ว)
- คุณภาพสูง + ความหน่วงต่ำ = แพง (โมเดลให้เหตุผลพร้อมการส่งผลลัพธ์แบบต่อเนื่อง)
การตัดสินใจด้านสถาปัตยกรรมทุกครั้งคือข้อแลกเปลี่ยนภายในสามเหลี่ยมนี้
การกำหนดราคาของโมเดลการให้เหตุผล
โทเค็นการคิดมีค่าใช้จ่ายเพิ่มเติมจากโทเค็นอินพุตและเอาต์พุตมาตรฐาน ค่าใช้จ่ายของการเรียกใช้โมเดลการให้เหตุผลประกอบด้วย โทเค็นอินพุต + โทเค็นการคิด + โทเค็นเอาต์พุต
เมื่อเทียบกับโมเดลที่เร็วและมีขนาดเล็ก o3 มีราคาแพงกว่า GPT-4o-mini ต่อโทเค็นประมาณ 20 เท่า ส่วน Claude Opus ที่ใช้การคิดแบบขยายมีราคาแพงกว่า Claude Haiku ต่อโทเค็นเอาต์พุตประมาณ 10-15 เท่า
# 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}')ค่าใช้จ่ายส่วนเกินของโทเค็นการคิด
โทเค็นการคิดมักมีจำนวนมากกว่าโทเค็นเอาต์พุตอย่างมาก คำตอบสั้นกระชับที่มีความยาว 200 คำอาจมีโทเค็นการคิดอยู่เบื้องหลังถึง 5,000-15,000 โทเค็น โทเค็นการคิดเหล่านี้มีค่าใช้จ่ายเท่ากับโทเค็นเอาต์พุต
นี่คือเหตุผลที่ตัวคูณค่าใช้จ่ายของโมเดลการให้เหตุผลได้รับอิทธิพลหลักจากโทเค็นการคิด ไม่ใช่ความยาวของคำตอบ
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
)ความหน่วง: สิ่งที่คาดหวังได้
ช่วงความหน่วงที่สังเกตได้สำหรับการตั้งค่าโมเดลต่าง ๆ (แตกต่างกันอย่างมากตามภาระการใช้งานและความยากของปัญหา):
- Claude Haiku: 0.5-2 วินาที
- Claude Sonnet: 2-8 วินาที
- Claude Opus (ไม่ใช้การคิด): 5-15 วินาที
- Claude Opus (การคิด 5K): 15-40 วินาที
- Claude Opus (การคิด 16K): 40-90 วินาที
- o3 (ใช้ความพยายามสูง): 30-120 วินาที
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)เวลาไปจนถึงโทเค็นแรกเมื่อสตรีม
แม้โมเดลการให้เหตุผลจะมีความหน่วงรวมสูง แต่ เวลาไปจนถึงโทเค็นแรก (TTFT) เมื่อสตรีมอาจสั้นกว่ามาก โมเดลจะเริ่มสตรีมคำตอบทันทีหลังจากคิดเสร็จ แสดงบางอย่างให้ผู้ใช้เห็นอย่างรวดเร็วด้วยการสตรีม
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.')รูปแบบสถาปัตยกรรมแบบผสม
รูปแบบสำหรับใช้งานจริงที่นำไปใช้ได้ คือเริ่มต้นด้วยโมเดลมาตรฐานที่รวดเร็ว หากผลลัพธ์น่าพอใจ (ตรวจสอบด้วยตัวชี้วัดคุณภาพของคุณ) ให้ส่งผลลัพธ์กลับทันที หากไม่เป็นเช่นนั้น ให้ยกระดับไปใช้โมเดลการให้เหตุผล วิธีนี้ช่วยให้มีความหน่วงและค่าใช้จ่ายเฉลี่ยต่ำ พร้อมความแม่นยำสูงในกรณีที่ยาก
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'ต้นทุนเมื่อใช้งานในวงกว้าง: คำนวณให้ชัดเจน
โมเดลการให้เหตุผลที่ดูเหมือนมีราคาเอื้อมถึงในการทดสอบ อาจกลายเป็นค่าใช้จ่ายก้อนใหญ่เมื่อใช้งานในวงกว้าง โปรดคาดการณ์ค่าใช้จ่ายก่อนเลือกสถาปัตยกรรมเสมอ
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)การแคชพรอมต์เพื่อลดค่าใช้จ่าย
สำหรับการเรียกใช้โมเดลการให้เหตุผลที่มีพรอมต์ระบบหรือบริบทที่ยาวและซ้ำเดิม ให้ใช้ การแคชพรอมต์ โทเค็นที่แคชไว้มีค่าใช้จ่ายถูกกว่าโทเค็นที่ไม่ได้แคชถึง 90% วิธีนี้มีประโยชน์อย่างยิ่งเมื่อมีการส่งบริบทขนาดใหญ่เดิมซ้ำ ๆ เช่น เอกสารหรือโค้ด
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การประมวลผลแบบกลุ่มเพื่อประสิทธิภาพด้านค่าใช้จ่าย
OpenAI และ Anthropic ต่างก็มี API แบบกลุ่ม พร้อมส่วนลดค่าใช้จ่าย 50% สำหรับคำขอที่ไม่จำเป็นต้องได้ผลลัพธ์ทันเวลา หากคุณมีคำค้นหาจำนวนมากที่สามารถรอผลลัพธ์ได้นานหลายชั่วโมง การประมวลผลแบบกลุ่มคือตัวเลือกที่คุ้มค่าที่สุด
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'การปรับให้เหมาะสมกับงบประมาณโทเค็น
กำหนดขนาด budget_tokens ให้เหมาะกับประเภทปัญหาของคุณ การใช้งบประมาณ 16K กับปัญหาง่าย ๆ ทำให้สิ้นเปลืองโทเค็นและเพิ่มความหน่วง จัดทำตารางอ้างอิงงบประมาณตามระดับความยากของปัญหา
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การกำหนด SLA สำหรับแอปพลิเคชัน LLM
ก่อนเลือกระหว่างโมเดลมาตรฐานกับโมเดลการให้เหตุผล ให้กำหนดข้อกำหนดข้อตกลงระดับการให้บริการ (SLA) ของแอปพลิเคชันก่อน:
- ความหน่วง P50: ประสบการณ์ทั่วไปของผู้ใช้
- ความหน่วง P99: ประสบการณ์ของผู้ใช้ในกรณีเลวร้ายที่สุด
- งบประมาณโทเค็น: ค่าใช้จ่ายสูงสุดต่อคำค้นหาของผู้ใช้
- เกณฑ์คุณภาพขั้นต่ำ: ความแม่นยำขั้นต่ำที่ยอมรับได้จากชุด test ของคุณ
โมเดลการให้เหตุผลละเมิด SLA ด้านความหน่วง P99 ได้ง่ายในแอปพลิเคชันแบบโต้ตอบ โปรดทราบข้อจำกัดของคุณก่อนล็อกการตัดสินใจด้านสถาปัตยกรรม
ตรวจสอบความรู้: ค่าใช้จ่ายของโมเดลการให้เหตุผล
เมื่อใช้โมเดลการให้เหตุผลเมื่อเทียบกับโมเดลมาตรฐาน อะไรคือปัจจัยหลักที่ทำให้มีค่าใช้จ่ายสูง
สรุป: การแลกเปลี่ยนระหว่างค่าใช้จ่ายกับความหน่วง
โมเดลการให้เหตุผลมีราคาแพง เพราะโทเค็นการคิดถูกคิดราคาเหมือนโทเค็นเอาต์พุต และอาจมีจำนวนมากกว่าคำตอบที่แสดงให้เห็น 10-50 เท่า ความหน่วงอยู่ที่ 15-120 วินาทีสำหรับปัญหาที่ยาก วิธีลดผลกระทบ ได้แก่ รูปแบบผสม (ใช้โมเดลเร็วเป็นอันดับแรก และยกระดับเฉพาะเมื่อความมั่นใจต่ำ) การแคชพรอมต์สำหรับบริบทขนาดใหญ่ที่ใช้ซ้ำ (ส่วนลด 90% สำหรับโทเค็นที่แคชไว้) API แบบกลุ่มสำหรับงานออฟไลน์ (ส่วนลด 50%) และการปรับขนาด budget_tokens ให้เหมาะกับความยากของปัญหา เมื่อใช้งานในวงกว้าง แม้ค่าใช้จ่ายเล็กน้อยต่อคำค้นหาก็สะสมเป็นใบเรียกเก็บเงินรายเดือนจำนวนมากได้เสมอ โปรดคาดการณ์ค่าใช้จ่ายก่อนตัดสินใจใช้สถาปัตยกรรมใด ๆ
คำถามที่พบบ่อย
บทเรียน “ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง”
งบประมาณโทเค็นสำหรับการคิด ต้นทุนการอนุมาน และกลยุทธ์การกำหนดเส้นทางแบบผสม คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม
ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ความแตกต่างของโมเดลการให้เหตุผล
- พรอมต์ที่มีประสิทธิภาพสำหรับการคิดต่อเนื่อง
- ควรใช้โมเดลการให้เหตุผลหรือโมเดลมาตรฐานเมื่อใด
- ข้อแลกเปลี่ยนระหว่างต้นทุนกับเวลาแฝง