Beranda / Catatan / AI / Agents
AI / Agents
intermediate

Claude SDK Essentials

Panduan praktis membangun dengan Claude SDK — Messages API, tool use, dan Agent SDK untuk membuat agent custom

13 Juli 2026
Diperbarui secara berkala

Claude SDK Essentials

> "Claude SDK" sebenarnya mencakup dua hal yang saling terkait: Anthropic Messages API (untuk memanggil model secara langsung) dan Claude Agent SDK (untuk membangun agent custom yang loop terhadap tool). Notebook ini membahas keduanya — untuk apa masing-masing, dan bedanya dengan sekadar memanggil API endpoint.

Apa itu Claude SDK?

Anthropic menyediakan dua layer untuk membangun dengan Claude, dan penting untuk jelas layer mana yang dibutuhkan sebuah task:

1. Messages API — cara langsung dan low-level untuk mengirim percakapan ke Claude dan mendapat response. Ini adalah primitive-nya: satu call masuk, satu response keluar, dengan dukungan tool use, vision, dan system prompt terstruktur.

2. Claude Agent SDK — SDK level lebih tinggi (Python/TypeScript) yang membungkus Messages API dengan agentic loop: menjalankan tool, mengumpankan hasilnya kembali ke model, dan mengulang sampai model menghasilkan jawaban final — tanpa kita perlu menulis sendiri loop tersebut. Ini loop yang sama yang menggerakkan Claude Code, disediakan sebagai building block untuk agent custom.

Pakai Messages API kalau kita ingin kontrol langsung atas satu call atau loop custom milik sendiri. Pakai Agent SDK kalau sedang membangun agent yang perlu merencanakan, memanggil tool berulang kali, dan mengelola state loop tersebut — dan tidak mau mengimplementasikannya ulang dari nol.

Messages API

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    system="You are a concise technical writing assistant.",
    messages=[
        {"role": "user", "content": "Summarize what a message queue does, in two sentences."}
    ],
)

print(response.content[0].text)

Parameter kunci yang perlu diketahui:

  • system — field system prompt khusus (bukan bagian dari list messages), dipakai untuk role, tone, dan constraint
  • max_tokens — wajib diisi; membatasi panjang response
  • messages — list giliran user/assistant; Claude tidak punya memory implisit, jadi seluruh percakapan dikirim ulang setiap call
  • Tool Use dengan Messages API

    Claude bisa meminta aplikasi kita menjalankan tool tertentu, mirip dengan function calling di OpenAI — kita definisikan tool schema, Claude memutuskan kapan memanggilnya, dan kode kita mengeksekusi lalu mengembalikan hasilnya.

    tools = [{
        "name": "get_order_status",
        "description": "Look up the status of a customer order by ID",
        "input_schema": {
            "type": "object",
            "properties": {"order_id": {"type": "string"}},
            "required": ["order_id"],
        },
    }]
    
    response = client.messages.create(
        model="claude-sonnet-5",
        max_tokens=1024,
        tools=tools,
        messages=[{"role": "user", "content": "Where's my order #A1042?"}],
    )
    
    if response.stop_reason == "tool_use":
        tool_call = next(b for b in response.content if b.type == "tool_use")
        result = get_order_status(tool_call.input["order_id"])
    
        # kirim hasil tool kembali supaya Claude bisa menghasilkan jawaban final
        follow_up = client.messages.create(
            model="claude-sonnet-5",
            max_tokens=1024,
            tools=tools,
            messages=[
                {"role": "user", "content": "Where's my order #A1042?"},
                {"role": "assistant", "content": response.content},
                {"role": "user", "content": [{
                    "type": "tool_result",
                    "tool_use_id": tool_call.id,
                    "content": str(result),
                }]},
            ],
        )
    

    Agent SDK: Loop yang Sama, Sudah Jadi

    Menulis sendiri loop tool call → eksekusi → umpankan kembali itu jadi berulang-ulang begitu sebuah agent perlu memanggil beberapa tool lintas beberapa giliran. Agent SDK menyediakan loop tersebut siap pakai, plus permission handling, akses tool file/bash, dan hook untuk custom behavior — arsitektur yang sama yang ada di balik Claude Code, diekspos sebagai library.

    from claude_agent_sdk import query
    
    async for message in query(
        prompt="Find and fix the failing test in this repo",
        options={"allowed_tools": ["Read", "Edit", "Bash"]},
    ):
        print(message)
    

    Ini layer yang tepat kalau kita membangun sesuatu yang bentuknya agent — coding assistant, research agent, ops bot — bukan sekadar satu call klasifikasi atau ekstraksi.

    Use Case Umum

  • Messages API langsung: chatbot, summarization, klasifikasi, ekstraksi terstruktur, generation jawaban RAG
  • Tool use (Messages API): assistant yang perlu memanggil beberapa function yang sudah jelas definisinya (cek status order, kirim email, query database)
  • Agent SDK: coding agent, research agent, dan workflow apa pun yang butuh loop open-ended "pikir, eksekusi, amati, ulangi" dengan sesedikit mungkin kode orchestration custom
  • Best Practices

  • Jaga system prompt tetap fokus ke role dan constraint; instruksi spesifik untuk task taruh di giliran user
  • Selalu kirim seluruh riwayat message — tidak ada conversation memory di sisi server
  • Validasi argument tool sebelum mengeksekusi apa pun yang punya side effect nyata
  • Untuk task yang berbentuk agent, lebih baik pakai Agent SDK dibanding menulis sendiri tool loop — SDK ini sudah menangani edge case-nya (giliran multi-tool, error feedback, stop condition)
  • Set max_tokens dengan sengaja; cap yang terlalu rendah bisa diam-diam memotong response terstruktur yang panjang
  • Key Takeaways

  • "Claude SDK" merujuk ke dua hal — Messages API (call langsung) dan Agent SDK (agentic loop siap pakai) — pilih sesuai kebutuhan satu call atau agent yang jalan terus
  • Tool use mengikuti pattern request → tool call → eksekusi → umpankan hasil kembali, yang umum di banyak LLM API
  • Agent SDK ada supaya kita tidak perlu mengimplementasikan ulang core loop Claude Code untuk agent kita sendiri
  • Claude tidak punya memory bawaan — aplikasi kita yang bertanggung jawab menjaga dan mengirim state percakapan
  • Resources

  • Dokumentasi Anthropic API: https://docs.anthropic.com
  • Dokumentasi Claude Agent SDK: https://docs.anthropic.com/en/api/agent-sdk
  • Topik

    Claude SDKAnthropic APITool UseAgent SDKLLM Integration

    Apakah Ini Membantu?

    Jika Anda memiliki pertanyaan atau saran untuk meningkatkan catatan ini, saya ingin mendengar dari Anda.