Instalasi
Memilih Antara query()
dan ClaudeSDKClient
Python SDK menyediakan dua cara untuk berinteraksi dengan Claude Code:
Perbandingan Cepat
Fitur | query() | ClaudeSDKClient |
---|---|---|
Sesi | Membuat sesi baru setiap kali | Menggunakan kembali sesi yang sama |
Percakapan | Pertukaran tunggal | Beberapa pertukaran dalam konteks yang sama |
Koneksi | Dikelola secara otomatis | Kontrol manual |
Input Streaming | ✅ Didukung | ✅ Didukung |
Interupsi | ❌ Tidak didukung | ✅ Didukung |
Hook | ❌ Tidak didukung | ✅ Didukung |
Tool Kustom | ❌ Tidak didukung | ✅ Didukung |
Lanjutkan Chat | ❌ Sesi baru setiap kali | ✅ Mempertahankan percakapan |
Kasus Penggunaan | Tugas sekali pakai | Percakapan berkelanjutan |
Kapan Menggunakan query()
(Sesi Baru Setiap Kali)
Terbaik untuk:
- Pertanyaan sekali pakai di mana Anda tidak memerlukan riwayat percakapan
- Tugas independen yang tidak memerlukan konteks dari pertukaran sebelumnya
- Skrip otomatisasi sederhana
- Ketika Anda ingin memulai dari awal setiap kali
Kapan Menggunakan ClaudeSDKClient
(Percakapan Berkelanjutan)
Terbaik untuk:
- Melanjutkan percakapan - Ketika Anda perlu Claude mengingat konteks
- Pertanyaan lanjutan - Membangun dari respons sebelumnya
- Aplikasi interaktif - Antarmuka chat, REPL
- Logika yang didorong respons - Ketika tindakan selanjutnya bergantung pada respons Claude
- Kontrol sesi - Mengelola siklus hidup percakapan secara eksplisit
Fungsi
query()
Membuat sesi baru untuk setiap interaksi dengan Claude Code. Mengembalikan iterator async yang menghasilkan pesan saat mereka tiba. Setiap panggilan ke query()
dimulai segar tanpa memori dari interaksi sebelumnya.
Parameter
Parameter | Tipe | Deskripsi |
---|---|---|
prompt | str | AsyncIterable[dict] | Prompt input sebagai string atau async iterable untuk mode streaming |
options | ClaudeAgentOptions | None | Objek konfigurasi opsional (default ke ClaudeAgentOptions() jika None) |
Mengembalikan
MengembalikanAsyncIterator[Message]
yang menghasilkan pesan dari percakapan.
Contoh - Dengan opsi
tool()
Dekorator untuk mendefinisikan tool MCP dengan keamanan tipe.
Parameter
Parameter | Tipe | Deskripsi |
---|---|---|
name | str | Pengenal unik untuk tool |
description | str | Deskripsi yang dapat dibaca manusia tentang apa yang dilakukan tool |
input_schema | type | dict[str, Any] | Skema yang mendefinisikan parameter input tool (lihat di bawah) |
Opsi Skema Input
-
Pemetaan tipe sederhana (direkomendasikan):
-
Format JSON Schema (untuk validasi kompleks):
Mengembalikan
Fungsi dekorator yang membungkus implementasi tool dan mengembalikan instanceSdkMcpTool
.
Contoh
create_sdk_mcp_server()
Membuat server MCP dalam proses yang berjalan di dalam aplikasi Python Anda.
Parameter
Parameter | Tipe | Default | Deskripsi |
---|---|---|---|
name | str | - | Pengenal unik untuk server |
version | str | "1.0.0" | String versi server |
tools | list[SdkMcpTool[Any]] | None | None | Daftar fungsi tool yang dibuat dengan dekorator @tool |
Mengembalikan
Mengembalikan objekMcpSdkServerConfig
yang dapat diteruskan ke ClaudeAgentOptions.mcp_servers
.
Contoh
Kelas
ClaudeSDKClient
Mempertahankan sesi percakapan di beberapa pertukaran. Ini adalah setara Python dari bagaimana fungsi query()
TypeScript SDK bekerja secara internal - ia membuat objek klien yang dapat melanjutkan percakapan.
Fitur Utama
- Kontinuitas Sesi: Mempertahankan konteks percakapan di beberapa panggilan
query()
- Percakapan yang Sama: Claude mengingat pesan sebelumnya dalam sesi
- Dukungan Interupsi: Dapat menghentikan Claude di tengah eksekusi
- Siklus Hidup Eksplisit: Anda mengontrol kapan sesi dimulai dan berakhir
- Alur yang Didorong Respons: Dapat bereaksi terhadap respons dan mengirim tindak lanjut
- Tool & Hook Kustom: Mendukung tool kustom (dibuat dengan dekorator
@tool
) dan hook
Metode
Metode | Deskripsi |
---|---|
__init__(options) | Inisialisasi klien dengan konfigurasi opsional |
connect(prompt) | Terhubung ke Claude dengan prompt awal opsional atau stream pesan |
query(prompt, session_id) | Kirim permintaan baru dalam mode streaming |
receive_messages() | Terima semua pesan dari Claude sebagai iterator async |
receive_response() | Terima pesan hingga dan termasuk ResultMessage |
interrupt() | Kirim sinyal interupsi (hanya bekerja dalam mode streaming) |
disconnect() | Putuskan koneksi dari Claude |
Dukungan Context Manager
Klien dapat digunakan sebagai context manager async untuk manajemen koneksi otomatis:
Penting: Saat melakukan iterasi pesan, hindari menggunakan break
untuk keluar lebih awal karena ini dapat menyebabkan masalah pembersihan asyncio. Sebagai gantinya, biarkan iterasi selesai secara alami atau gunakan flag untuk melacak kapan Anda telah menemukan apa yang Anda butuhkan.
Contoh - Melanjutkan percakapan
Contoh - Input streaming dengan ClaudeSDKClient
Contoh - Menggunakan interupsi
Contoh - Kontrol izin lanjutan
Tipe
SdkMcpTool
Definisi untuk tool SDK MCP yang dibuat dengan dekorator @tool
.
Properti | Tipe | Deskripsi |
---|---|---|
name | str | Pengenal unik untuk tool |
description | str | Deskripsi yang dapat dibaca manusia |
input_schema | type[T] | dict[str, Any] | Skema untuk validasi input |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Fungsi async yang menangani eksekusi tool |
ClaudeAgentOptions
Dataclass konfigurasi untuk query Claude Code.
Properti | Tipe | Default | Deskripsi |
---|---|---|---|
allowed_tools | list[str] | [] | Daftar nama tool yang diizinkan |
max_thinking_tokens | int | 8000 | Token maksimum untuk proses berpikir |
system_prompt | str | None | None | Konfigurasi system prompt. Berikan string untuk prompt kustom, atau gunakan format preset untuk system prompt Claude Code |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Konfigurasi server MCP atau path ke file konfigurasi |
permission_mode | PermissionMode | None | None | Mode izin untuk penggunaan tool |
continue_conversation | bool | False | Lanjutkan percakapan terbaru |
resume | str | None | None | ID sesi untuk dilanjutkan |
fork_session | bool | False | Saat melanjutkan dengan resume , fork ke ID sesi baru alih-alih melanjutkan sesi asli |
max_turns | int | None | None | Giliran percakapan maksimum |
disallowed_tools | list[str] | [] | Daftar nama tool yang tidak diizinkan |
model | str | None | None | Model Claude yang akan digunakan |
permission_prompt_tool_name | str | None | None | Nama tool MCP untuk prompt izin |
cwd | str | Path | None | None | Direktori kerja saat ini |
settings | str | None | None | Path ke file pengaturan |
add_dirs | list[str | Path] | [] | Direktori tambahan yang dapat diakses Claude |
extra_args | dict[str, str | None] | {} | Argumen CLI tambahan untuk diteruskan langsung ke CLI |
can_use_tool | CanUseTool | None | None | Fungsi callback izin tool |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Konfigurasi hook untuk mencegat event |
agents | dict[str, AgentDefinition] | None | None | Subagen yang didefinisikan secara programatis |
setting_sources | list[SettingSource] | None | None (tidak ada pengaturan) | Kontrol sumber pengaturan filesystem mana yang dimuat SDK. Jika dihilangkan, tidak ada pengaturan yang dimuat |
SettingSource
Mengontrol sumber konfigurasi berbasis filesystem mana yang dimuat SDK untuk pengaturan.
Nilai | Deskripsi | Lokasi |
---|---|---|
"user" | Pengaturan pengguna global | ~/.claude/settings.json |
"project" | Pengaturan proyek bersama (dikontrol versi) | .claude/settings.json |
"local" | Pengaturan proyek lokal (diabaikan git) | .claude/settings.local.json |
Perilaku default
Ketikasetting_sources
dihilangkan atau None
, SDK tidak memuat pengaturan filesystem apa pun. Ini memberikan isolasi untuk aplikasi SDK.
Mengapa menggunakan setting_sources?
Muat semua pengaturan filesystem (perilaku legacy):Prioritas pengaturan
Ketika beberapa sumber dimuat, pengaturan digabungkan dengan prioritas ini (tertinggi ke terendah):- Pengaturan lokal (
.claude/settings.local.json
) - Pengaturan proyek (
.claude/settings.json
) - Pengaturan pengguna (
~/.claude/settings.json
)
agents
, allowed_tools
) selalu menimpa pengaturan filesystem.
AgentDefinition
Konfigurasi untuk subagen yang didefinisikan secara programatis.
Field | Wajib | Deskripsi |
---|---|---|
description | Ya | Deskripsi bahasa alami tentang kapan menggunakan agen ini |
tools | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool |
prompt | Ya | System prompt agen |
model | Tidak | Override model untuk agen ini. Jika dihilangkan, menggunakan model utama |
PermissionMode
Mode izin untuk mengontrol eksekusi tool.
McpSdkServerConfig
Konfigurasi untuk server SDK MCP yang dibuat dengan create_sdk_mcp_server()
.
McpServerConfig
Tipe union untuk konfigurasi server MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
Tipe Pesan
Message
Tipe union dari semua pesan yang mungkin.
UserMessage
Pesan input pengguna.
AssistantMessage
Pesan respons asisten dengan blok konten.
SystemMessage
Pesan sistem dengan metadata.
ResultMessage
Pesan hasil akhir dengan informasi biaya dan penggunaan.
Tipe Blok Konten
ContentBlock
Tipe union dari semua blok konten.
TextBlock
Blok konten teks.
ThinkingBlock
Blok konten berpikir (untuk model dengan kemampuan berpikir).
ToolUseBlock
Blok permintaan penggunaan tool.
ToolResultBlock
Blok hasil eksekusi tool.
Tipe Error
ClaudeSDKError
Kelas exception dasar untuk semua error SDK.
CLINotFoundError
Dimunculkan ketika Claude Code CLI tidak terinstal atau tidak ditemukan.
CLIConnectionError
Dimunculkan ketika koneksi ke Claude Code gagal.
ProcessError
Dimunculkan ketika proses Claude Code gagal.
CLIJSONDecodeError
Dimunculkan ketika parsing JSON gagal.
Tipe Hook
HookEvent
Tipe event hook yang didukung. Perhatikan bahwa karena keterbatasan setup, Python SDK tidak mendukung hook SessionStart, SessionEnd, dan Notification.
HookCallback
Definisi tipe untuk fungsi callback hook.
input_data
: Data input spesifik hook (lihat dokumentasi hook)tool_use_id
: Pengenal penggunaan tool opsional (untuk hook terkait tool)context
: Konteks hook dengan informasi tambahan
decision
:"block"
untuk memblokir tindakansystemMessage
: Pesan sistem untuk ditambahkan ke transkriphookSpecificOutput
: Data output spesifik hook
HookContext
Informasi konteks yang diteruskan ke callback hook.
HookMatcher
Konfigurasi untuk mencocokkan hook ke event atau tool tertentu.
Contoh Penggunaan Hook
Tipe Input/Output Tool
Dokumentasi skema input/output untuk semua tool Claude Code bawaan. Meskipun Python SDK tidak mengekspor ini sebagai tipe, mereka mewakili struktur input dan output tool dalam pesan.Task
Nama tool:Task
Input:
Bash
Nama tool:Bash
Input:
Edit
Nama tool:Edit
Input:
MultiEdit
Nama tool:MultiEdit
Input:
Read
Nama tool:Read
Input:
Write
Nama tool:Write
Input:
Glob
Nama tool:Glob
Input:
Grep
Nama tool:Grep
Input:
NotebookEdit
Nama tool:NotebookEdit
Input:
WebFetch
Nama tool:WebFetch
Input:
WebSearch
Nama tool:WebSearch
Input:
TodoWrite
Nama tool:TodoWrite
Input:
BashOutput
Nama tool:BashOutput
Input:
KillBash
Nama tool:KillBash
Input:
ExitPlan Mode
Nama tool:ExitPlanMode
Input:
ListMcpResources
Nama tool:ListMcpResources
Input:
ReadMcpResource
Nama tool:ReadMcpResource
Input:
Fitur Lanjutan dengan ClaudeSDKClient
Membangun Antarmuka Percakapan Berkelanjutan
Menggunakan Hook untuk Modifikasi Perilaku
Pemantauan Kemajuan Real-time
Contoh Penggunaan
Operasi file dasar (menggunakan query)
Penanganan error
Mode streaming dengan klien
Menggunakan tool kustom dengan ClaudeSDKClient
Lihat juga
- Panduan Python SDK - Tutorial dan contoh
- Ikhtisar SDK - Konsep SDK umum
- Referensi TypeScript SDK - Dokumentasi TypeScript SDK
- Referensi CLI - Antarmuka command-line
- Alur kerja umum - Panduan langkah demi langkah