Membangun aplikasi dengan Claude bukan sekadar memanggil API dan mendapatkan teks. Ekosistem Anthropic telah berkembang menjadi platform agentic yang lengkap — dengan model-model Claude 4.6 yang powerful, tool use, extended thinking, RAG, prompt caching, hingga sistem multi-agent dengan Model Context Protocol.
Panduan ini mencakup perjalanan penuh: dari panggilan API pertama hingga sistem production-ready — lengkap dengan kode nyata yang bisa langsung dijalankan.

Bab 1 — Memilih Model Claude yang Tepat
Memilih model yang tepat adalah keputusan arsitektur paling fundamental. Jangan pakai satu model untuk semua task.
| Model | API String | Keunggulan | Gunakan untuk |
|---|---|---|---|
| Claude Opus 4.6 | claude-opus-4-6 |
Reasoning tertinggi | Coding kompleks, analisis mendalam, orchestrator multi-agent |
| Claude Sonnet 4.6 | claude-sonnet-4-6 |
Balance capability vs cost | Default untuk mayoritas task: coding, writing, analysis, agents |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 |
Tercepat, termurah | Klasifikasi, routing, preprocessing, subagent sederhana |
Strategi model routing yang matang bisa hemat 60-80% biaya: gunakan Haiku untuk task ringan (routing, klasifikasi), Sonnet untuk mayoritas pekerjaan, dan Opus hanya ketika benar-benar membutuhkan reasoning tertinggi.
Fitur utama Claude 4.6: Extended/Adaptive Thinking, 1 juta token context window (Sonnet 4.6 dan Opus 4.6), structured outputs (beta), parallel tool use, dan computer use.
Bab 2 — Messages API: Fondasi Semua Interaksi
Panggilan API Pertama
pip install anthropic
import anthropic
client = anthropic.Anthropic() # Pakai ANTHROPIC_API_KEY dari environment
message = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[
{"role": "user", "content": "Jelaskan konsep RAG dalam 3 kalimat."}
]
)
print(message.content[0].text)
Multi-Turn Conversation
# Multi-turn: sertakan histori percakapan
messages = [
{"role": "user", "content": "Apa itu transformer architecture?"},
{"role": "assistant", "content": "Transformer adalah arsitektur neural network..."},
{"role": "user", "content": "Bagaimana attention mechanism bekerja di dalamnya?"}
]
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=2048,
messages=messages
)
Streaming untuk UX yang Responsif
with client.messages.stream(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{'role': 'user', 'content': prompt}]
) as stream:
for text in stream.text_stream:
print(text, end='', flush=True)
Message Batches API — Hemat 50% untuk Volume Besar
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request
batch = client.messages.batches.create(
requests=[
Request(
custom_id=f"request_{i}",
params=MessageCreateParamsNonStreaming(
model='claude-haiku-4-5-20251001',
max_tokens=500,
messages=[{"role": "user", "content": prompts[i]}]
)
)
for i, prompt in enumerate(prompts[:1000]) # Maks 10.000 per batch
]
)
print(f'Batch ID: {batch.id}') # Poll status dengan batch.id
Files API — Upload Sekali, Gunakan Berulang
# Upload file sekali
with open('document.pdf', 'rb') as f:
uploaded_file = client.beta.files.upload(
file=('document.pdf', f, 'application/pdf')
)
file_id = uploaded_file.id
# Gunakan di multiple requests tanpa re-upload
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{"type": "document", "source": {"type": "file", "file_id": file_id}},
{"type": "text", "text": "Ringkas dokumen ini"}
]
}]
)
Bab 3 — Prompt Engineering yang Efektif
Teknik 1: XML Tags untuk Struktur yang Jelas
prompt = """
<system_context>
Anda adalah analis keuangan senior dengan keahlian di pasar Asia Tenggara.
Selalu berikan analisis berbasis data dengan asumsi yang eksplisit.
</system_context>
<task>
Analisis potensi ekspansi bisnis ke Vietnam untuk perusahaan SaaS B2B.
</task>
<output_format>
1. Executive Summary (100 kata)
2. Analisis Risiko (3-5 risiko utama dengan severity rating)
3. Rekomendasi (Go/No-Go dengan justifikasi)
</output_format>
"""
Teknik 2: Few-Shot Examples untuk Konsistensi Format
prompt = """
Klasifikasikan setiap tiket support. Format: [KATEGORI] | [PRIORITAS] | [RINGKASAN 10 KATA]
Contoh:
Input: 'Tidak bisa login sejak tadi pagi, urgent butuh akses'
Output: [AKSES] | [HIGH] | User tidak bisa login, berdampak operasional
Input: 'Tolong tambahkan fitur dark mode'
Output: [FEATURE_REQUEST] | [LOW] | Permintaan dark mode interface
Sekarang klasifikasikan:
Input: {tiket_baru}
"""
Teknik 3: Chain-of-Thought
prompt = """
Sebelum memberikan jawaban akhir, pikirkan langkah demi langkah:
1. Identifikasi semua asumsi yang perlu dibuat
2. Uraikan masalah menjadi sub-masalah yang lebih kecil
3. Selesaikan setiap sub-masalah
4. Verifikasi konsistensi jawabanmu
5. Baru berikan kesimpulan akhir
Masalah: {masalah_kompleks}
"""
Teknik 4: System Prompt yang Efektif
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
system="""
# Identitas dan Peran
Anda adalah asisten AI untuk [nama produk], platform manajemen inventori.
# Kemampuan dan Scope
Anda membantu pengguna dengan:
- Pertanyaan tentang fitur platform
- Troubleshooting masalah teknis
- Best practices manajemen inventori
# Batasan
- Jangan membahas produk kompetitor secara spesifik
- Untuk isu billing, arahkan ke: billing@company.com
- Jika tidak yakin, akui dan tawarkan untuk eskalasi ke human agent
# Format Respons
- Gunakan bahasa Indonesia yang profesional tapi tidak kaku
- Respons maks 3 paragraf untuk pertanyaan umum
- Untuk langkah teknis, gunakan numbered list
""",
messages=[{"role": "user", "content": user_message}]
)
Teknik 5: Prefill untuk Kontrol Output
# Prefill memaksa Claude melanjutkan dari titik tertentu
messages = [
{'role': 'user', 'content': 'Ekstrak informasi produk dari teks berikut: {teks}'},
{'role': 'assistant', 'content': '{'} # Prefill — Claude melanjutkan JSON
]
# Hasilnya: Claude output JSON valid tanpa pembukaan atau penjelasan
Bab 4 — Tool Use: Menghubungkan Claude ke Sistem Eksternal
Tool use memungkinkan Claude berinteraksi dengan API, database, filesystem, dan web. Claude memutuskan kapan menggunakan tool mana berdasarkan pemahaman konteks.
Mendefinisikan Tools
tools = [
{
"name": "get_product_info",
"description": """
Ambil informasi lengkap tentang produk dari database.
Gunakan ketika user bertanya tentang detail, harga, atau stok produk.
JANGAN gunakan untuk pencarian produk — gunakan search_products untuk itu.
""",
"input_schema": {
"type": "object",
"properties": {
"product_id": {
"type": "string",
"description": "ID produk unik (format: PROD-XXXX)"
}
},
"required": ["product_id"]
}
}
]
Agentic Loop — Handle Tool Calls
def run_agent_with_tools(user_message, tools, max_iterations=10):
messages = [{'role': 'user', 'content': user_message}]
for i in range(max_iterations):
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=4096,
tools=tools,
messages=messages
)
messages.append({'role': 'assistant', 'content': response.content})
if response.stop_reason == 'tool_use':
tool_results = []
for block in response.content:
if block.type == 'tool_use':
result = execute_tool(block.name, block.input)
tool_results.append({
'type': 'tool_result',
'tool_use_id': block.id,
'content': str(result)
})
messages.append({'role': 'user', 'content': tool_results})
else: # stop_reason == 'end_turn'
return response.content[0].text
return 'Max iterations reached'
Server tools bawaan Claude yang bisa langsung digunakan: web_search (pencarian web real-time), web_fetch (ambil konten dari URL), computer (eksekusi kode Python), text_editor (edit file teks), dan bash (shell commands).
Kunci penulisan tool yang baik: deskripsi seperti docstring untuk junior developer — eksplisit, jelas, termasuk kapan TIDAK menggunakan tool. Parallel tool use memungkinkan multiple tool calls dalam satu turn untuk efisiensi.
Bab 5 — Extended Thinking dan Vision
Adaptive Thinking untuk Reasoning Mendalam
# Adaptive thinking — DIREKOMENDASIKAN untuk Claude 4.6
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=8000,
thinking={
"type": "adaptive", # Model putuskan sendiri kapan perlu berpikir
"budget_tokens": 5000 # Maks token untuk thinking
},
messages=[{'role': 'user', 'content': complex_problem}]
)
for block in response.content:
if block.type == 'thinking':
print('THINKING:', block.thinking[:500])
elif block.type == 'text':
print('ANSWER:', block.text)
# Interleaved thinking untuk tool use
response = client.messages.create(
model='claude-opus-4-6',
max_tokens=8000,
extra_headers={'anthropic-beta': 'interleaved-thinking-2025-05-14'},
thinking={'type': 'enabled', 'budget_tokens': 5000},
tools=tools,
messages=messages
)
Mode thinking: Standard (cepat, hemat), Extended (latency tinggi, masalah sangat kompleks), Adaptive (balance terbaik — rekomendasi untuk Claude 4.6), Interleaved (thinking antara tool calls).
Vision: Analisis Gambar dan PDF
import base64
# Kirim gambar
with open('chart.png', 'rb') as f:
image_data = base64.standard_b64encode(f.read()).decode('utf-8')
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{
'role': 'user',
'content': [
{'type': 'image', 'source': {'type': 'base64',
'media_type': 'image/png', 'data': image_data}},
{'type': 'text', 'text': 'Analisis chart ini dan berikan insight utama'}
]
}]
)
# Analisis PDF
with open('report.pdf', 'rb') as f:
pdf_data = base64.standard_b64encode(f.read()).decode('utf-8')
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=4096,
messages=[{
'role': 'user',
'content': [
{'type': 'document', 'source': {'type': 'base64',
'media_type': 'application/pdf', 'data': pdf_data}},
{'type': 'text', 'text': 'Ekstrak semua data keuangan dan format sebagai tabel JSON'}
]
}]
)
Bab 6 — RAG dan Prompt Caching
Contextual Retrieval: RAG yang 49-67% Lebih Akurat
def generate_contextual_chunk(full_document: str, chunk: str) -> str:
"""Tambahkan konteks spesifik ke setiap chunk sebelum embedding"""
response = client.messages.create(
model='claude-haiku-4-5-20251001', # Haiku untuk biaya rendah
max_tokens=200,
system=[
{
"type": "text",
"text": full_document,
"cache_control": {"type": "ephemeral"} # Cache dokumen!
}
],
messages=[{
'role': 'user',
'content': f'Berikan konteks singkat (2-3 kalimat) untuk chunk ini: {chunk}'
}]
)
context = response.content[0].text
return f'{context}\n\n{chunk}'
Pipeline RAG: Ingest (chunking → contextual prefix → embed) → Index (vector + BM25 untuk hybrid search) → Retrieve (semantic + keyword + reranking) → Generate (dengan prompt caching).
Kapan tidak perlu RAG: knowledge base kurang dari 200.000 token (~500 halaman)? Pertimbangkan langsung masukkan ke context window — lebih sederhana dan dengan prompt caching bisa sangat cost-effective.
Prompt Caching: Hemat 90% Biaya Input
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=1024,
system=[
{
"type": "text",
"text": very_long_system_prompt,
"cache_control": {"type": "ephemeral"} # Cache 5 menit
}
],
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": large_reference_document,
"cache_control": {"type": "ephemeral"}
},
{
"type": "text",
"text": current_user_question # Bagian yang berubah
}
]
}
]
)
usage = response.usage
print(f'Cache read: {usage.cache_read_input_tokens} tokens (hemat 90%)')
print(f'Cache write: {usage.cache_creation_input_tokens} tokens')
Kalkulasi nyata: sistem prompt 10.000 token + 1.000 request/hari = hemat ~$810/bulan pada harga Sonnet $3/1M tokens. Gunakan TTL 1 jam untuk extended thinking tasks yang berlangsung lama.
Bab 7 — Multi-Agent Systems dan MCP
Pola Parallelization
import asyncio
async def analyze_section(section: str, focus: str) -> str:
response = await client.messages.create_async(
model='claude-sonnet-4-6',
max_tokens=1024,
messages=[{'role': 'user', 'content': f'Analisis {focus} dari: {section}'}]
)
return response.content[0].text
# 5 analisis berjalan paralel
results = await asyncio.gather(
analyze_section(doc, 'financial risks'),
analyze_section(doc, 'operational risks'),
analyze_section(doc, 'regulatory compliance'),
analyze_section(doc, 'market opportunities'),
analyze_section(doc, 'competitive landscape')
)
Pola Routing — Haiku untuk Klasifikasi Cepat
def route_request(user_message: str) -> str:
response = client.messages.create(
model='claude-haiku-4-5-20251001', # Cepat & murah untuk routing
max_tokens=50,
messages=[{
'role': 'user',
'content': f'''Klasifikasikan ke salah satu: [billing, technical_support, sales, general]
Request: {user_message}
Jawab hanya dengan kategori.'''
}]
)
return response.content[0].text.strip().lower()
Model Context Protocol (MCP)
MCP adalah protokol terbuka yang menstandardisasi cara AI terhubung ke tools dan data sources — seperti USB-C untuk AI integrations. Satu MCP server bisa digunakan oleh berbagai AI clients.
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Tool, TextContent
server = Server('my-company-tools')
@server.list_tools()
async def list_tools():
return [
Tool(
name='get_employee_info',
description='Get employee information from HR system',
inputSchema={
'type': 'object',
'properties': {'employee_id': {'type': 'string'}},
'required': ['employee_id']
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == 'get_employee_info':
data = hr_system.get_employee(arguments['employee_id'])
return [TextContent(type='text', text=str(data))]
Prinsip agentic yang harus selalu diingat: minimal footprint, human in the loop untuk aksi irreversible, incremental progress dengan checkpoint, dan batasi max_iterations untuk mencegah runaway costs.
Bab 8 — Evaluasi dan Quality Assurance
LLM-as-Judge Implementation
def grade_response(question: str, expected: str, actual: str) -> dict:
"""Gunakan Claude untuk mengevaluasi kualitas respons"""
grading_prompt = f"""
Evaluasi respons AI berikut berdasarkan rubrik ini:
PERTANYAAN: {question}
RESPONS YANG DIHARAPKAN: {expected}
RESPONS AKTUAL: {actual}
RUBRIK:
1. Akurasi faktual (0-30): Apakah informasi benar?
2. Kelengkapan (0-25): Apakah semua aspek tercakup?
3. Kejelasan (0-25): Apakah mudah dipahami?
4. Relevansi (0-20): Apakah fokus pada pertanyaan?
Format output sebagai JSON:
{{"accuracy": N, "completeness": N, "clarity": N, "relevance": N,
"total": N, "reasoning": "..."}}
"""
response = client.messages.create(
model='claude-sonnet-4-6',
max_tokens=500,
messages=[{'role': 'user', 'content': grading_prompt}]
)
import json
return json.loads(response.content[0].text)
Empat tipe grading: Code/Math (programatik, deterministik), Rubric-based LLM-as-Judge (kualitas tulisan dan analisis), Binary (safety check, compliance), Human (creative content, subjective quality).
Platform Deployment
| Platform | Keunggulan | Cocok Untuk |
|---|---|---|
| Anthropic Direct API | Semua fitur terbaru, paling cepat update | Startup, prototyping, tim kecil |
| Amazon Bedrock | AWS billing, IAM, regional compliance | Enterprise dengan existing AWS infra |
| Google Vertex AI | GCP billing, GDPR EU data residency | Enterprise dengan existing GCP infra |
| Microsoft Foundry | Azure billing, OAuth, enterprise SLA | Enterprise dengan Microsoft ecosystem |
Pertanyaan yang Sering Ditanyakan
Apa bedanya Messages API dengan Claude.ai biasa? Claude.ai adalah antarmuka chat untuk pengguna akhir. Messages API adalah antarmuka programatik untuk developer — memberikan kontrol penuh atas model yang digunakan, system prompt, parameter (temperature, max_tokens), format output, dan integrasi dengan tools eksternal. API cocok untuk membangun produk dan mengotomasi workflow.
Kapan harus menggunakan tool use vs RAG? Tool use untuk aksi real-time yang membutuhkan data terkini atau eksekusi di sistem eksternal (query database, kirim email, buat tiket). RAG untuk memberikan Claude akses ke knowledge base yang statis atau semi-statis (dokumentasi, FAQ, artikel). Keduanya bisa dikombinasikan: RAG untuk dokumen pengetahuan dan tool use untuk aksi operasional.
Bagaimana cara mengurangi biaya API secara signifikan? Tiga strategi utama: (1) model routing — Haiku untuk task sederhana, hemat 80-90% vs Sonnet. (2) Prompt caching — tandai sistem prompt dan dokumen referensi yang stabil, hemat 90% biaya input. (3) Batch API — untuk request non real-time, hemat 50% dengan Message Batches API.
Apa itu extended thinking dan kapan harus diaktifkan? Extended thinking memungkinkan Claude menggunakan chain-of-thought yang panjang sebelum menjawab. Gunakan untuk masalah multi-step reasoning kompleks, debugging sulit, atau analisis mendalam. Untuk Claude 4.6, gunakan mode adaptive — model memutuskan sendiri kapan perlu berpikir dalam, memberikan balance terbaik.
Bagaimana cara memulai membangun aplikasi production-ready? Mulai dengan satu use case yang jelas dan measurable. Setup evaluasi dengan test cases sebelum mulai build. Implementasi streaming untuk UX yang responsif. Tambahkan prompt caching dari awal untuk sistem prompt yang panjang. Baru setelah dasar berjalan dengan baik, tambahkan tool use dan agentic patterns.
Lanjutkan Perjalanan Belajar Claude Anda
Artikel ini adalah bagian dari seri Belajar Claude Gratis — panduan berbahasa Indonesia yang membahas ekosistem Claude untuk berbagai profil pembaca.
Kembali ke peta besar: Belajar Claude Gratis: Panduan Lengkap dari Nol hingga Mahir
Artikel cluster lainnya:
-
- Claude Code 01: Panduan Lengkap untuk Developer Indonesia
- Claude Code 02: Panduan Pemula untuk Semua Profesi
- Claude 03 Cowork: Panduan Lengkap Otomasi Pekerjaan untuk Profesional
- Claude 04-AI Fluency: Cara Menggunakan Claude AI dengan Benar, Efektif, dan Etis
- Claude 05 API: Panduan Lengkap Membangun Aplikasi AI dengan Python untuk Developer
- Claude 06, Mengenal Model Context Protocol (MCP): Cara Menghubungkan Claude ke Tools dan Data Eksternal
- Claude 7, AI Fluency untuk Pendidik: Panduan Lengkap Menggunakan Claude AI dalam Pengajaran dan Kurikulum
- Claude 08, AI Fluency untuk Mahasiswa: Panduan Lengkap Claude untuk Belajar, Menulis, dan Persiapan Karier
- Claude 09, MCP Advanced Topics: Panduan Teknis Sampling, Notifications, Roots, dan Transport untuk Developer
- Claude 10 Amazon Bedrock: Panduan Lengkap dari Setup hingga Production AI System
- Claude 11 dengan Google Cloud Vertex AI: Panduan Lengkap untuk Developer Indonesia
- Claude 12 Teaching AI Fluency: Panduan Lengkap Mengajarkan dan Menilai Kemampuan AI di Kelas
- Caude 13, AI Fluency untuk Organisasi Nonprofit: Panduan Praktis Menggunakan Claude AI untuk Dampak Misi yang Lebih Besa
- Claude 14 Agent Skills: Panduan Lengkap Membangun dan Mendistribusikan Skills Reusable
- Claude 15, Subagents Claude Code: Panduan Lengkap Mendelegasikan Task dan Mengelola Context Window
- Claude 16, AI Capabilities & Limitations: Model Mental Lengkap untuk Berkolaborasi dengan Claude Secara Cerdas
- Claude 17 Code: Panduan Lengkap Developer Indonesia — Dari Instalasi hingga CI/CD Otomatis
- Claude 18, Belajar Claude API: Panduan Lengkap Membangun Aplikasi AI dengan Python, Dari Hello World hingga Productio
- Claude 19: Cara Pakai Claude dari Nol untuk Semua Profesi — Panduan AI Fluency Lengkap
- Claude 20 untuk Pekerjaan dan Tim: Panduan Lengkap Implementasi Claude di Organisasi Anda
