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 | Pertukaran ganda dalam konteks yang sama |
| Koneksi | Dikelola secara otomatis | Kontrol manual |
| Input Streaming | ✅ Didukung | ✅ Didukung |
| Interupsi | ❌ Tidak didukung | ✅ Didukung |
| Hooks | ❌ Tidak didukung | ✅ Didukung |
| Alat Kustom | ❌ Tidak didukung | ✅ Didukung |
| Lanjutkan Chat | ❌ Sesi baru setiap kali | ✅ Mempertahankan percakapan |
| Kasus Penggunaan | Tugas sekali jalan | Percakapan berkelanjutan |
Kapan Menggunakan query() (Sesi Baru Setiap Kali)
Terbaik untuk:
- Pertanyaan sekali jalan di mana Anda tidak memerlukan riwayat percakapan
- Tugas independen yang tidak memerlukan konteks dari pertukaran sebelumnya
- Skrip otomasi sederhana
- Ketika Anda menginginkan awal yang segar setiap kali
Kapan Menggunakan ClaudeSDKClient (Percakapan Berkelanjutan)
Terbaik untuk:
- Melanjutkan percakapan - Ketika Anda memerlukan Claude untuk mengingat konteks
- Pertanyaan lanjutan - Membangun berdasarkan respons sebelumnya
- Aplikasi interaktif - Antarmuka obrolan, REPL
- Logika berbasis respons - Ketika tindakan berikutnya 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 tiba. Setiap panggilan ke query() dimulai segar tanpa memori 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) |
Pengembalian
MengembalikanAsyncIterator[Message] yang menghasilkan pesan dari percakapan.
Contoh - Dengan opsi
tool()
Dekorator untuk mendefinisikan alat MCP dengan keamanan tipe.
Parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
name | str | Pengidentifikasi unik untuk alat |
description | str | Deskripsi yang dapat dibaca manusia tentang apa yang dilakukan alat |
input_schema | type | dict[str, Any] | Skema yang mendefinisikan parameter input alat (lihat di bawah) |
Opsi Input Schema
-
Pemetaan tipe sederhana (direkomendasikan):
-
Format JSON Schema (untuk validasi kompleks):
Pengembalian
Fungsi dekorator yang membungkus implementasi alat dan mengembalikan instanceSdkMcpTool.
Contoh
create_sdk_mcp_server()
Buat server MCP dalam proses yang berjalan dalam aplikasi Python Anda.
Parameter
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
name | str | - | Pengidentifikasi unik untuk server |
version | str | "1.0.0" | String versi server |
tools | list[SdkMcpTool[Any]] | None | None | Daftar fungsi alat yang dibuat dengan dekorator @tool |
Pengembalian
Mengembalikan objekMcpSdkServerConfig yang dapat diteruskan ke ClaudeAgentOptions.mcp_servers.
Contoh
Kelas
ClaudeSDKClient
Mempertahankan sesi percakapan di seluruh pertukaran ganda. Ini adalah setara Python dari cara fungsi query() SDK TypeScript bekerja secara internal - ia membuat objek klien yang dapat melanjutkan percakapan.
Fitur Utama
- Kontinuitas Sesi: Mempertahankan konteks percakapan di seluruh panggilan
query()ganda - Percakapan 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 Berbasis Respons: Dapat bereaksi terhadap respons dan mengirim tindak lanjut
- Alat Kustom & Hooks: Mendukung alat kustom (dibuat dengan dekorator
@tool) dan hooks
Metode
| Metode | Deskripsi |
|---|---|
__init__(options) | Inisialisasi klien dengan konfigurasi opsional |
connect(prompt) | Terhubung ke Claude dengan prompt awal opsional atau aliran 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 async context manager untuk manajemen koneksi otomatis:
Penting: Saat melakukan iterasi atas pesan, hindari menggunakan break untuk keluar lebih awal karena ini dapat menyebabkan masalah pembersihan asyncio. Sebaliknya, 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 tingkat lanjut
Tipe
SdkMcpTool
Definisi untuk alat MCP SDK yang dibuat dengan dekorator @tool.
| Properti | Tipe | Deskripsi |
|---|---|---|
name | str | Pengidentifikasi unik untuk alat |
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 alat |
ClaudeAgentOptions
Dataclass konfigurasi untuk kueri Claude Code.
| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
allowed_tools | list[str] | [] | Daftar nama alat yang diizinkan |
system_prompt | str | SystemPromptPreset | None | None | Konfigurasi prompt sistem. Teruskan string untuk prompt kustom, atau gunakan {"type": "preset", "preset": "claude_code"} untuk prompt sistem Claude Code. Tambahkan "append" untuk memperluas preset |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Konfigurasi server MCP atau jalur ke file konfigurasi |
permission_mode | PermissionMode | None | None | Mode izin untuk penggunaan alat |
continue_conversation | bool | False | Lanjutkan percakapan terbaru |
resume | str | None | None | ID sesi untuk dilanjutkan |
max_turns | int | None | None | Jumlah maksimal putaran percakapan |
disallowed_tools | list[str] | [] | Daftar nama alat yang tidak diizinkan |
model | str | None | None | Model Claude yang digunakan |
permission_prompt_tool_name | str | None | None | Nama alat MCP untuk prompt izin |
cwd | str | Path | None | None | Direktori kerja saat ini |
settings | str | None | None | Jalur ke file pengaturan |
add_dirs | list[str | Path] | [] | Direktori tambahan yang dapat diakses Claude |
env | dict[str, str] | {} | Variabel lingkungan |
extra_args | dict[str, str | None] | {} | Argumen CLI tambahan untuk diteruskan langsung ke CLI |
max_buffer_size | int | None | None | Jumlah byte maksimal saat membuffer stdout CLI |
debug_stderr | Any | sys.stderr | Tidak digunakan lagi - Objek seperti file untuk output debug. Gunakan callback stderr sebagai gantinya |
stderr | Callable[[str], None] | None | None | Fungsi callback untuk output stderr dari CLI |
can_use_tool | CanUseTool | None | None | Fungsi callback izin alat |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Konfigurasi hook untuk mengintersepsi acara |
user | str | None | None | Pengidentifikasi pengguna |
include_partial_messages | bool | False | Sertakan acara streaming pesan parsial |
fork_session | bool | False | Saat melanjutkan dengan resume, fork ke ID sesi baru alih-alih melanjutkan sesi asli |
agents | dict[str, AgentDefinition] | None | None | Subagen yang didefinisikan secara terprogram |
plugins | list[SdkPluginConfig] | [] | Muat plugin kustom dari jalur lokal. Lihat Plugins untuk detail |
setting_sources | list[SettingSource] | None | None (tidak ada pengaturan) | Kontrol sumber pengaturan sistem file mana yang akan dimuat. Jika dihilangkan, tidak ada pengaturan yang dimuat. Catatan: Harus menyertakan "project" untuk memuat file CLAUDE.md |
SystemPromptPreset
Konfigurasi untuk menggunakan prompt sistem preset Claude Code dengan penambahan opsional.
| Bidang | Diperlukan | Deskripsi |
|---|---|---|
type | Ya | Harus "preset" untuk menggunakan prompt sistem preset |
preset | Ya | Harus "claude_code" untuk menggunakan prompt sistem Claude Code |
append | Tidak | Instruksi tambahan untuk ditambahkan ke prompt sistem preset |
SettingSource
Mengontrol sumber konfigurasi berbasis sistem file mana yang dimuat pengaturan SDK.
| 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 sistem file apa pun. Ini memberikan isolasi untuk aplikasi SDK.
Mengapa menggunakan setting_sources?
Muat semua pengaturan sistem file (perilaku warisan):Preseden pengaturan
Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):- Pengaturan lokal (
.claude/settings.local.json) - Pengaturan proyek (
.claude/settings.json) - Pengaturan pengguna (
~/.claude/settings.json)
agents, allowed_tools) selalu menggantikan pengaturan sistem file.
AgentDefinition
Konfigurasi untuk subagen yang didefinisikan secara terprogram.
| Bidang | Diperlukan | Deskripsi |
|---|---|---|
description | Ya | Deskripsi bahasa alami tentang kapan menggunakan agen ini |
tools | Tidak | Array nama alat yang diizinkan. Jika dihilangkan, mewarisi semua alat |
prompt | Ya | Prompt sistem agen |
model | Tidak | Penggantian model untuk agen ini. Jika dihilangkan, menggunakan model utama |
PermissionMode
Mode izin untuk mengontrol eksekusi alat.
McpSdkServerConfig
Konfigurasi untuk server MCP SDK yang dibuat dengan create_sdk_mcp_server().
McpServerConfig
Tipe union untuk konfigurasi server MCP.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
Konfigurasi untuk memuat plugin di SDK.
| Bidang | Tipe | Deskripsi |
|---|---|---|
type | Literal["local"] | Harus "local" (hanya plugin lokal yang didukung saat ini) |
path | str | Jalur absolut atau relatif ke direktori plugin |
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 pemikiran (untuk model dengan kemampuan pemikiran).
ToolUseBlock
Blok permintaan penggunaan alat.
ToolResultBlock
Blok hasil eksekusi alat.
Tipe Kesalahan
ClaudeSDKError
Kelas pengecualian dasar untuk semua kesalahan SDK.
CLINotFoundError
Dimunculkan ketika Claude Code CLI tidak diinstal atau tidak ditemukan.
CLIConnectionError
Dimunculkan ketika koneksi ke Claude Code gagal.
ProcessError
Dimunculkan ketika proses Claude Code gagal.
CLIJSONDecodeError
Dimunculkan ketika penguraian JSON gagal.
Tipe Hook
HookEvent
Tipe acara hook yang didukung. Perhatikan bahwa karena keterbatasan penyiapan, 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: Pengidentifikasi penggunaan alat opsional (untuk hook terkait alat)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 acara atau alat tertentu.
Contoh Penggunaan Hook
Tipe Input/Output Alat
Dokumentasi skema input/output untuk semua alat Claude Code bawaan. Meskipun Python SDK tidak mengekspor ini sebagai tipe, mereka mewakili struktur input dan output alat dalam pesan.Task
Nama alat:Task
Input:
Bash
Nama alat:Bash
Input:
Edit
Nama alat:Edit
Input:
Read
Nama alat:Read
Input:
Write
Nama alat:Write
Input:
Glob
Nama alat:Glob
Input:
Grep
Nama alat:Grep
Input:
NotebookEdit
Nama alat:NotebookEdit
Input:
WebFetch
Nama alat:WebFetch
Input:
WebSearch
Nama alat:WebSearch
Input:
TodoWrite
Nama alat:TodoWrite
Input:
BashOutput
Nama alat:BashOutput
Input:
KillBash
Nama alat:KillBash
Input:
ExitPlanMode
Nama alat:ExitPlanMode
Input:
ListMcpResources
Nama alat:ListMcpResources
Input:
ReadMcpResource
Nama alat:ReadMcpResource
Input:
Fitur Lanjutan dengan ClaudeSDKClient
Membangun Antarmuka Percakapan Berkelanjutan
Menggunakan Hooks untuk Modifikasi Perilaku
Pemantauan Kemajuan Real-time
Contoh Penggunaan
Operasi file dasar (menggunakan query)
Penanganan kesalahan
Mode streaming dengan klien
Menggunakan alat kustom dengan ClaudeSDKClient
Lihat juga
- Panduan Python SDK - Tutorial dan contoh
- Gambaran umum SDK - Konsep SDK umum
- Referensi TypeScript SDK - Dokumentasi SDK TypeScript
- Referensi CLI - Antarmuka baris perintah
- Alur kerja umum - Panduan langkah demi langkah