TypeScript
Создавайте пользовательских ИИ-агентов с помощью Claude Code TypeScript SDK
Предварительные требования
- Node.js 18+
Установка
Установите @anthropic-ai/claude-code
из NPM:
Чтобы просмотреть исходный код TypeScript SDK, посетите страницу @anthropic-ai/claude-code
на NPM.
Базовое использование
Основным интерфейсом через TypeScript SDK является функция query
, которая возвращает асинхронный итератор, передающий сообщения по мере их поступления:
Параметры конфигурации
Аргумент | Тип | Описание | По умолчанию |
---|---|---|---|
abortController | AbortController | Контроллер прерывания для отмены операций | new AbortController() |
additionalDirectories | string[] | Дополнительные каталоги для включения в сессию | undefined |
allowedTools | string[] | Список инструментов, которые Claude разрешено использовать | Все инструменты включены по умолчанию |
appendSystemPrompt | string | Текст для добавления к системному промпту по умолчанию | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | Пользовательская функция разрешений для использования инструментов | undefined |
continue | boolean | Продолжить самую последнюю сессию | false |
customSystemPrompt | string | Полностью заменить системный промпт по умолчанию | undefined |
cwd | string | Текущий рабочий каталог | process.cwd() |
disallowedTools | string[] | Список инструментов, которые Claude не разрешено использовать | undefined |
env | Dict<string> | Переменные окружения для установки | undefined |
executable | 'bun' | 'deno' | 'node' | Какую среду выполнения JavaScript использовать | node при запуске с Node.js, bun при запуске с Bun |
executableArgs | string[] | Аргументы для передачи исполняемому файлу | [] |
fallbackModel | string | Модель для использования, если основная модель не работает | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | Хуки жизненного цикла для настройки | undefined |
includePartialMessages | boolean | Включить частичные события потоковой передачи в поток сообщений | false |
maxThinkingTokens | number | Максимальное количество токенов для процесса размышления Claude | undefined |
maxTurns | number | Максимальное количество ходов разговора | undefined |
mcpServers | Record<string, McpServerConfig> | Конфигурации MCP-серверов | undefined |
model | string | Модель Claude для использования | Использует значение по умолчанию из конфигурации CLI |
pathToClaudeCodeExecutable | string | Путь к исполняемому файлу Claude Code | Исполняемый файл, поставляемый с @anthropic-ai/claude-code |
permissionMode | PermissionMode | Режим разрешений для сессии | "default" (варианты: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | ID сессии для возобновления | undefined |
stderr | (data: string) => void | Обратный вызов для вывода stderr | undefined |
strictMcpConfig | boolean | Принудительная строгая проверка конфигурации MCP | undefined |
Частичная потоковая передача сообщений
Когда включен includePartialMessages
, SDK будет выдавать сообщения stream_event
, содержащие необработанные события потоковой передачи из API Claude. Это позволяет получать доступ к частичному содержимому по мере его генерации, что полезно для реализации обновлений пользовательского интерфейса в реальном времени или индикаторов прогресса.
Каждое сообщение stream_event
включает:
event
: Необработанное событие потоковой передачи из APIsession_id
: Идентификатор текущей сессииparent_tool_use_id
: ID выполняемого инструмента (если применимо)uuid
: Уникальный идентификатор для этого события
Частичная потоковая передача сообщений в основном полезна для продвинутых случаев использования, где вам нужен детальный контроль над потоковым ответом. Для большинства приложений достаточно поведения по умолчанию (ожидание полных сообщений).
Многоходовые разговоры
Для многоходовых разговоров у вас есть два варианта.
Вы можете генерировать ответы и возобновлять их, или можете использовать режим потокового ввода, который принимает async/generator для массива сообщений. На данный момент режим потокового ввода - единственный способ прикреплять изображения через сообщения.
Возобновление с управлением сессиями
Режим потокового ввода
Режим потокового ввода позволяет предоставлять сообщения как асинхронный итерируемый объект вместо одной строки. Это обеспечивает многоходовые разговоры, вложения изображений и динамическую генерацию сообщений:
Потоковый ввод с изображениями
Режим потокового ввода - единственный способ прикреплять изображения через сообщения:
Пользовательские системные промпты
Системные промпты определяют роль, экспертизу и поведение вашего агента:
Интеграция MCP-серверов
Протокол контекста модели (MCP) позволяет предоставлять вашим агентам пользовательские инструменты и возможности:
Пользовательские инструменты с внутрипроцессными MCP-серверами
SDK MCP-серверы позволяют создавать пользовательские инструменты, которые работают непосредственно в процессе вашего приложения, обеспечивая типобезопасное выполнение инструментов без накладных расходов отдельных процессов или сетевого взаимодействия.
Создание пользовательских инструментов
Используйте функции-помощники createSdkMcpServer
и tool
для определения типобезопасных пользовательских инструментов:
Типобезопасность с Zod
Помощник tool
обеспечивает полный вывод типов TypeScript из ваших схем Zod:
Хуки
Хуки позволяют настраивать и расширять поведение Claude Code, запуская пользовательские обратные вызовы в различных точках жизненного цикла агента. В отличие от CLI-хуков, которые выполняют bash-команды, SDK-хуки - это JavaScript/TypeScript функции, которые выполняются внутри процесса.
Определение хуков
Хуки организованы по типу события с дополнительными сопоставителями для фильтрации времени их выполнения:
Доступные события хуков
- PreToolUse: Выполняется перед выполнением инструмента. Может блокировать инструменты или предоставлять обратную связь.
- PostToolUse: Выполняется после успешного выполнения инструмента.
- UserPromptSubmit: Выполняется, когда пользователь отправляет промпт.
- SessionStart: Выполняется при запуске сессии.
- SessionEnd: Выполняется при завершении сессии.
- Stop: Выполняется, когда Claude собирается прекратить отвечать.
- SubagentStop: Выполняется, когда субагент собирается остановиться.
- PreCompact: Выполняется перед сжатием разговора.
- Notification: Выполняется при отправке уведомлений.
Типы входных данных хуков
Каждый хук получает типизированные входные данные на основе события:
Выходные данные хука
Хуки возвращают выходные данные, которые управляют потоком выполнения:
Практические примеры
Логирование и мониторинг
Валидация файловых операций
Автоформатирование кода
Улучшение промптов
Пользовательские инструкции сжатия
Поведение выполнения хуков
- Параллелизация: Все соответствующие хуки выполняются параллельно
- Тайм-аут: Хуки учитывают сигнал прерывания из опций
- Обработка ошибок: Ошибки хуков логируются, но не останавливают выполнение
- Сопоставители: Поддерживают шаблоны regex (например,
"Write|Edit"
)
Комбинирование хуков с canUseTool
Хотя canUseTool
обеспечивает контроль разрешений, хуки предлагают более широкую интеграцию жизненного цикла:
Контроль разрешений с canUseTool
Обратный вызов canUseTool
обеспечивает детальный контроль над выполнением инструментов. Он вызывается перед каждым использованием инструмента и может разрешить, отклонить или изменить входные данные инструмента:
Случаи использования для canUseTool
- Управление разрешениями: Проверить разрешения пользователя перед разрешением выполнения инструмента
- Валидация входных данных: Валидировать или санитизировать входные данные инструмента перед выполнением
- Ограничение скорости: Реализовать ограничения скорости для дорогих операций
- Аудит логирования: Логировать использование инструментов для соответствия или отладки
- Динамические разрешения: Включать/отключать инструменты на основе условий времени выполнения
Форматы вывода
Текстовый вывод (по умолчанию)
JSON-вывод
Форматы ввода
Примеры интеграции агентов
SRE-агент реагирования на инциденты
Автоматизированная проверка безопасности
Многоходовой юридический помощник
Схема сообщений
Сообщения, возвращаемые из JSON API, строго типизированы согласно следующей схеме:
Дополнительные поддерживающие типы:
Типы Message
, MessageParam
и Usage
доступны в Anthropic TypeScript SDK.
Связанные ресурсы
- Использование и управление CLI - Полная документация CLI
- Интеграция GitHub Actions - Автоматизируйте ваш рабочий процесс GitHub с Claude
- Общие рабочие процессы - Пошаговые руководства для общих случаев использования