Установка
Выбор между 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] | [] | Список разрешенных имен инструментов |
max_thinking_tokens | int | 8000 | Максимальное количество токенов для процесса размышления |
system_prompt | str | None | None | Конфигурация системного промпта. Передайте строку для пользовательского промпта или используйте предустановленный формат для системного промпта Claude Code |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | Конфигурации MCP серверов или путь к конфигурационному файлу |
permission_mode | PermissionMode | None | None | Режим разрешений для использования инструментов |
continue_conversation | bool | False | Продолжить самый последний разговор |
resume | str | None | None | ID сессии для возобновления |
fork_session | bool | False | При возобновлении с resume , разветвить на новый 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 может получить доступ |
extra_args | dict[str, str | None] | {} | Дополнительные аргументы CLI для передачи напрямую в CLI |
can_use_tool | CanUseTool | None | None | Функция обратного вызова разрешений инструмента |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | Конф��гурации хуков для перехвата событий |
agents | dict[str, AgentDefinition] | None | None | Программно определенные субагенты |
setting_sources | list[SettingSource] | None | None (без настроек) | Контролировать, какие настройки файловой системы загружать. Когда опущено, настройки не загружаются |
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
Типы сообщений
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
Ввод:
MultiEdit
Имя инструмента:MultiEdit
Ввод:
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 - Интерфейс командной строки
- Общие рабочие процессы - Пошаговые руководства