Потоковая передача сообщений
При создании сообщения вы можете установить "stream": true
для пошаговой потоковой передачи ответа с использованием server-sent events (SSE).
Потоковая передача с помощью SDK
Наши SDK для Python и TypeScript предлагают несколько способов потоковой передачи. SDK для Python поддерживает как синхронные, так и асинхронные потоки. Подробности смотрите в документации к каждому SDK.
Типы событий
Каждое серверное событие включает именованный тип события и связанные с ним данные JSON. Каждое событие использует имя события SSE (например, event: message_stop
) и включает соответствующий type
события в своих данных.
Каждый поток использует следующую последовательность событий:
message_start
: содержит объектMessage
с пустым полемcontent
.- Серия блоков контента, каждый из которых имеет события
content_block_start
, одно или несколько событийcontent_block_delta
и событиеcontent_block_stop
. Каждый блок контента будет иметьindex
, соответствующий его индексу в финальном массивеcontent
сообщения. - Одно или несколько событий
message_delta
, указывающих на изменения верхнего уровня в финальном объектеMessage
. - Финальное событие
message_stop
.
События ping
Потоки событий также могут включать любое количество событий ping
.
События ошибок
Иногда мы можем отправлять ошибки в потоке событий. Например, в периоды высокой нагрузки вы можете получить overloaded_error
, что обычно соответствует HTTP 529 в контексте без потоковой передачи:
Другие события
В соответствии с нашей политикой версионирования, мы можем добавлять новые типы событий, и ваш код должен корректно обрабатывать неизвестные типы событий.
Типы дельт
Каждое событие content_block_delta
содержит delta
определенного типа, которая обновляет блок content
по указанному index
.
Текстовая дельта
Дельта контента типа text
выглядит так:
Дельта входного JSON
Дельты для блоков контента tool_use
соответствуют обновлениям поля input
блока. Для поддержки максимальной детализации дельты являются частичными строками JSON, тогда как финальный tool_use.input
всегда является объектом.
Вы можете накапливать строковые дельты и разбирать JSON после получения события content_block_stop
, используя библиотеку вроде Pydantic для частичного разбора JSON, или используя наши SDK, которые предоставляют вспомогательные функции для доступа к разобранным инкрементальным значениям.
Дельта блока контента tool_use
выглядит так:
Примечание: Наши текущие модели поддерживают только вывод одного полного свойства ключа и значения из input
за раз. Таким образом, при использовании инструментов между событиями потоковой передачи могут быть задержки, пока модель работает. Как только ключ и значение input
накоплены, мы отправляем их как несколько событий content_block_delta
с разбитым на части частичным json, чтобы формат мог автоматически поддерживать более тонкую детализацию в будущих моделях.
Необработанный HTTP-ответ потока
Мы настоятельно рекомендуем использовать наши клиентские SDK при работе с режимом потоковой передачи. Однако если вы создаете прямую интеграцию с API, вам нужно будет обрабатывать эти события самостоятельно.
Ответ потока состоит из:
- События
message_start
- Потенциально нескольких блоков контента, каждый из которых содержит:
a. Событие
content_block_start
b. Потенциально несколько событийcontent_block_delta
c. Событиеcontent_block_stop
- События
message_delta
- События
message_stop
По всему ответу также могут быть рассеяны события ping
. Подробнее о формате см. в разделе Типы событий.
Базовый запрос потоковой передачи
Запрос потоковой передачи с использованием инструмента
В этом запросе мы просим Claude использовать инструмент, чтобы узнать погоду.