Установка
Выбор между query() и ClaudeSDKClient
Python SDK предоставляет два способа взаимодействия с Claude Code:
Быстрое сравнение
| Функция | query() | ClaudeSDKClient |
|---|---|---|
| Сессия | Создает новую сессию каждый раз | Переиспользует одну и ту же сессию |
| Разговор | Один обмен | Несколько обменов в одном контексте |
| Соединение | Управляется автоматически | Ручное управление |
| Потоковый ввод | ✅ Поддерживается | ✅ Поддерживается |
| Прерывания | ❌ Не поддерживается | ✅ Поддерживается |
| Хуки | ❌ Не поддерживается | ✅ Поддерживается |
| Пользовательские инструменты | ❌ Не поддерживается | ✅ Поддерживается |
| Продолжение чата | ❌ Новая сессия каждый раз | ✅ Сохраняет разговор |
| Вариант использования | Одноразовые задачи | Непрерывные разговоры |
Когда использовать query() (новая сессия каждый раз)
Лучше всего для:
- Одноразовых вопросов, когда вам не нужна история разговора
- Независимых задач, которые не требуют контекста из предыдущих обменов
- Простых скриптов автоматизации
- Когда вы хотите начать с чистого листа каждый раз
Когда использовать ClaudeSDKClient (непрерывный разговор)
Лучше всего для:
- Продолжения разговоров - Когда вам нужно, чтобы Claude помнил контекст
- Последующих вопросов - Построение на основе предыдущих ответов
- Интерактивных приложений - Интерфейсы чата, REPL
- Логики, управляемой ответом - Когда следующее действие зависит от ответа Claude
- Управления сессией - Явное управление жизненным циклом разговора
Функции
query()
Создает новую сессию для каждого взаимодействия с Claude Code. Возвращает асинхронный итератор, который выдает сообщения по мере их поступления. Каждый вызов query() начинается заново без памяти о предыдущих взаимодействиях.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
prompt | str | AsyncIterable[dict] | Входная подсказка в виде строки или асинхронного итератора для режима потоковой передачи |
options | ClaudeAgentOptions | None | Объект дополнительной конфигурации (по умолчанию ClaudeAgentOptions(), если None) |
Возвращает
ВозвращаетAsyncIterator[Message], который выдает сообщения из разговора.
Пример - С опциями
tool()
Декоратор для определения инструментов MCP с безопасностью типов.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
name | str | Уникальный идентификатор инструмента |
description | str | Описание инструмента, понятное человеку |
input_schema | type | dict[str, Any] | Схема, определяющая входные параметры инструмента (см. ниже) |
Опции схемы ввода
-
Простое сопоставление типов (рекомендуется):
-
Формат JSON Schema (для сложной валидации):
Возвращает
Функция-декоратор, которая оборачивает реализацию инструмента и возвращает экземплярSdkMcpTool.
Пример
create_sdk_mcp_server()
Создайте встроенный MCP сервер, который работает в вашем приложении Python.
Параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
name | str | - | Уникальный идентификатор сервера |
version | str | "1.0.0" | Строка версии сервера |
tools | list[SdkMcpTool[Any]] | None | None | Список функций инструментов, созданных с декоратором @tool |
Возвращает
Возвращает объектMcpSdkServerConfig, который можно передать в ClaudeAgentOptions.mcp_servers.
Пример
Классы
ClaudeSDKClient
Сохраняет сессию разговора в нескольких обменах. Это эквивалент Python функции query() TypeScript SDK - она создает объект клиента, который может продолжать разговоры.
Ключевые особенности
- Непрерывность сессии: Сохраняет контекст разговора в нескольких вызовах
query() - Один разговор: Claude помнит предыдущие сообщения в сессии
- Поддержка прерываний: Может остановить Claude во время выполнения
- Явный жизненный цикл: Вы контролируете, когда сессия начинается и заканчивается
- Поток, управляемый ответом: Может реагировать на ответы и отправлять последующие сообщения
- Пользовательские инструменты и хуки: Поддерживает пользовательские инструменты (созданные с декоратором
@tool) и хуки
Методы
| Метод | Описание |
|---|---|
__init__(options) | Инициализировать клиент с дополнительной конфигурацией |
connect(prompt) | Подключиться к Claude с дополнительной начальной подсказкой или потоком сообщений |
query(prompt, session_id) | Отправить новый запрос в режиме потоковой передачи |
receive_messages() | Получить все сообщения от Claude в виде асинхронного итератора |
receive_response() | Получить сообщения до и включая ResultMessage |
interrupt() | Отправить сигнал прерывания (работает только в режиме потоковой передачи) |
disconnect() | Отключиться от Claude |
Поддержка менеджера контекста
Клиент можно использовать как асинхронный менеджер контекста для автоматического управления соединением:
Важно: При итерации по сообщениям избегайте использования break для раннего выхода, так как это может вызвать проблемы с очисткой asyncio. Вместо этого позвольте итерации завершиться естественным образом или используйте флаги для отслеживания того, когда вы нашли то, что вам нужно.
Пример - Продолжение разговора
Пример - Потоковый ввод с ClaudeSDKClient
Пример - Использование прерываний
Пример - Продвинутое управление разрешениями
Типы
SdkMcpTool
Определение инструмента SDK MCP, созданного с декоратором @tool.
| Свойство | Тип | Описание |
|---|---|---|
name | str | Уникальный идентификатор инструмента |
description | str | Описание, понятное человеку |
input_schema | type[T] | dict[str, Any] | Схема для валидации ввода |
handler | Callable[[T], Awaitable[dict[str, Any]]] | Асинхронная функция, которая обрабатывает выполнение инструмента |
ClaudeAgentOptions
Конфигурационный dataclass для запросов Claude Code.
| Свойство | Тип | По умолчанию | Описание |
|---|---|---|---|
allowed_tools | list[str] | [] | Список разрешенных имен инструментов |
system_prompt | str | SystemPromptPreset | None | None | Конфигурация системной подсказки. Передайте строку для пользовательской подсказки или используйте {"type": "preset", "preset": "claude_code"} для системной подсказки Claude Code. Добавьте "append" для расширения предустановки |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Конфигурации MCP сервера или путь к файлу конфигурации |
permission_mode | PermissionMode | None | None | Режим разрешения для использования инструментов |
continue_conversation | bool | False | Продолжить самый последний разговор |
resume | str | None | None | ID сессии для возобновления |
max_turns | int | None | None | Максимальное количество ходов разговора |
disallowed_tools | list[str] | [] | Список запрещенных имен инструментов |
model | str | None | None | Модель Claude для использования |
permission_prompt_tool_name | str | None | None | Имя инструмента MCP для подсказок разрешения |
cwd | str | Path | None | None | Текущий рабочий каталог |
settings | str | None | None | Путь к файлу параметров |
add_dirs | list[str | Path] | [] | Дополнительные каталоги, к которым Claude может получить доступ |
env | dict[str, str] | {} | Переменные окружения |
extra_args | dict[str, str | None] | {} | Дополнительные аргументы CLI для передачи непосредственно в CLI |
max_buffer_size | int | None | None | Максимальное количество байтов при буферизации stdout CLI |
debug_stderr | Any | sys.stderr | Устарело - Объект, похожий на файл, для вывода отладки. Вместо этого используйте обратный вызов stderr |
stderr | Callable[[str], None] | None | None | Функция обратного вызова для вывода stderr из CLI |
can_use_tool | CanUseTool | None | None | Функция обратного вызова разрешения инструмента |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Конфигурации хуков для перехвата событий |
user | str | None | None | Идентификатор пользователя |
include_partial_messages | bool | False | Включить события потоковой передачи частичных сообщений |
fork_session | bool | False | При возобновлении с resume разветвиться на новый ID сессии вместо продолжения исходной сессии |
agents | dict[str, AgentDefinition] | None | None | Программно определенные подагенты |
plugins | list[SdkPluginConfig] | [] | Загрузить пользовательские плагины из локальных путей. Подробнее см. в разделе Плагины |
setting_sources | list[SettingSource] | None | None (нет параметров) | Контролировать, какие параметры файловой системы загружать. При пропуске параметры не загружаются. Примечание: Должен включать "project" для загрузки файлов CLAUDE.md |
SystemPromptPreset
Конфигурация для использования предустановленной системной подсказки Claude Code с дополнительными добавлениями.
| Поле | Обязательно | Описание |
|---|---|---|
type | Да | Должно быть "preset" для использования предустановленной системной подсказки |
preset | Да | Должно быть "claude_code" для использования системной подсказки Claude Code |
append | Нет | Дополнительные инструкции для добавления к предустановленной системной подсказке |
SettingSource
Контролирует, какие источники конфигурации на основе файловой системы загружает SDK.
| Значение | Описание | Местоположение |
|---|---|---|
"user" | Глобальные параметры пользователя | ~/.claude/settings.json |
"project" | Общие параметры проекта (контролируемые версией) | .claude/settings.json |
"local" | Локальные параметры проекта (игнорируемые git) | .claude/settings.local.json |
Поведение по умолчанию
Когдаsetting_sources опущен или None, SDK не загружает параметры файловой системы. Это обеспечивает изоляцию для приложений SDK.
Почему использовать setting_sources?
Загрузить все параметры файловой системы (поведение прежних версий):Приоритет параметров
Когда загружаются несколько источников, параметры объединяются с этим приоритетом (от высшего к низшему):- Локальные параметры (
.claude/settings.local.json) - Параметры проекта (
.claude/settings.json) - Параметры пользователя (
~/.claude/settings.json)
agents, allowed_tools) всегда переопределяют параметры файловой системы.
AgentDefinition
Конфигурация для подагента, определенного программно.
| Поле | Обязательно | Описание |
|---|---|---|
description | Да | Описание на естественном языке о том, когда использовать этого агента |
tools | Нет | Массив разрешенных имен инструментов. Если опущено, наследует все инструменты |
prompt | Да | Системная подсказка агента |
model | Нет | Переопределение модели для этого агента. Если опущено, использует основную модель |
PermissionMode
Режимы разрешения для управления выполнением инструментов.
McpSdkServerConfig
Конфигурация для серверов SDK MCP, созданных с помощью create_sdk_mcp_server().
McpServerConfig
Тип объединения для конфигураций MCP сервера.
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
Конфигурация для загрузки плагинов в SDK.
| Поле | Тип | Описание |
|---|---|---|
type | Literal["local"] | Должно быть "local" (в настоящее время поддерживаются только локальные плагины) |
path | str | Абсолютный или относительный путь к каталогу плагина |
Типы сообщений
Message
Тип объединения всех возможных сообщений.
UserMessage
Сообщение пользовательского ввода.
AssistantMessage
Сообщение ответа ассистента с блоками содержимого.
SystemMessage
Системное сообщение с метаданными.
ResultMessage
Финальное сообщение результата с информацией о стоимости и использовании.
Типы блоков содержимого
ContentBlock
Тип объединения всех блоков содержимого.
TextBlock
Блок текстового содержимого.
ThinkingBlock
Блок содержимого мышления (для моделей с возможностью мышления).
ToolUseBlock
Блок запроса использования инструмента.
ToolResultBlock
Блок результата выполнения инструмента.
Типы ошибок
ClaudeSDKError
Базовый класс исключения для всех ошибок SDK.
CLINotFoundError
Возникает, когда Claude Code CLI не установлен или не найден.
CLIConnectionError
Возникает, когда соединение с Claude Code не удается.
ProcessError
Возникает, когда процесс Claude Code не удается.
CLIJSONDecodeError
Возникает, когда анализ JSON не удается.
Типы хуков
HookEvent
Поддерживаемые типы событий хука. Обратите внимание, что из-за ограничений установки Python SDK не поддерживает хуки SessionStart, SessionEnd и Notification.
HookCallback
Определение типа для функций обратного вызова хука.
input_data: Данные ввода, специфичные для хука (см. документацию хука)tool_use_id: Дополнительный идентификатор использования инструмента (для хуков, связанных с инструментами)context: Контекст хука с дополнительной информацией
decision:"block"для блокировки действияsystemMessage: Системное сообщение для добавления в транскриптhookSpecificOutput: Вывод, специфичный для хука
HookContext
Информация контекста, передаваемая функциям обратного вызова хука.
HookMatcher
Конфигурация для сопоставления хуков с определенными событиями или инструментами.
Пример использования хука
Типы ввода/вывода инструментов
Документация схем ввода/вывода для всех встроенных инструментов Claude Code. Хотя Python SDK не экспортирует их как типы, они представляют структуру входов и выходов инструментов в сообщениях.Task
Имя инструмента:Task
Ввод:
Bash
Имя инструмента:Bash
Ввод:
Edit
Имя инструмента:Edit
Ввод:
Read
Имя инструмента:Read
Ввод:
Write
Имя инструмента:Write
Ввод:
Glob
Имя инструмента:Glob
Ввод:
Grep
Имя инструмента:Grep
Ввод:
NotebookEdit
Имя инструмента:NotebookEdit
Ввод:
WebFetch
Имя инструмента:WebFetch
Ввод:
WebSearch
Имя инструмента:WebSearch
Ввод:
TodoWrite
Имя инструмента:TodoWrite
Ввод:
BashOutput
Имя инструмента:BashOutput
Ввод:
KillBash
Имя инструмента:KillBash
Ввод:
ExitPlanMode
Имя инструмента:ExitPlanMode
Ввод:
ListMcpResources
Имя инструмента:ListMcpResources
Ввод:
ReadMcpResource
Имя инструмента:ReadMcpResource
Ввод:
Продвинутые функции с ClaudeSDKClient
Построение интерфейса непрерывного разговора
Использование хуков для модификации поведения
Мониторинг прогресса в реальном времени
Пример использования
Базовые операции с файлами (используя query)
Обработка ошибок
Режим потоковой передачи с клиентом
Использование пользовательских инструментов с ClaudeSDKClient
Смотрите также
- Руководство Python SDK - Учебник и примеры
- Обзор SDK - Общие концепции SDK
- Справочник TypeScript SDK - Документация TypeScript SDK
- Справочник CLI - Интерфейс командной строки
- Общие рабочие процессы - Пошаговые руководства