"stream": true
, чтобы инкрементально передавать ответ в потоковом режиме, используя server-sent events (SSE).
Потоковая передача с SDK
Наши SDK для Python и TypeScript предлагают несколько способов потоковой передачи. Python SDK поддерживает как синхронные, так и асинхронные потоки. Подробности смотрите в документации каждого SDK.Типы событий
Каждое server-sent event включает именованный тип события и связанные 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
.
Количество токенов, показанное в поле
usage
события message_delta
, является кумулятивным.Ping события
Потоки событий также могут включать любое количество событийping
.
События ошибок
Мы можем иногда отправлять ошибки в потоке событий. Например, в периоды высокой нагрузки вы можете получитьoverloaded_error
, который обычно соответствует HTTP 529 в не-потоковом контексте:
Example error
Другие события
В соответствии с нашей политикой версионирования, мы можем добавлять новые типы событий, и ваш код должен корректно обрабатывать неизвестные типы событий.Типы дельт блоков контента
Каждое событиеcontent_block_delta
содержит delta
типа, который обновляет блок content
по заданному index
.
Текстовая дельта
Дельта блока контентаtext
выглядит так:
Text delta
Дельта входного JSON
Дельты для блоков контентаtool_use
соответствуют обновлениям поля input
блока. Для поддержки максимальной детализации дельты являются частичными JSON строками, тогда как финальный tool_use.input
всегда является объектом.
Вы можете накапливать строковые дельты и парсить JSON после получения события content_block_stop
, используя библиотеку типа Pydantic для частичного парсинга JSON, или используя наши SDK, которые предоставляют помощники для доступа к парсированным инкрементальным значениям.
Дельта блока контента tool_use
выглядит так:
Input JSON delta
input
за раз. Таким образом, при использовании инструментов могут быть задержки между потоковыми событиями, пока модель работает. Как только ключ и значение input
накоплены, мы выдаем их как несколько событий content_block_delta
с разбитым на части частичным json, чтобы формат мог автоматически поддерживать более тонкую детализацию в будущих моделях.
Дельта размышлений
При использовании расширенного мышления с включенной потоковой передачей, вы будете получать контент размышлений через событияthinking_delta
. Эти дельты соответствуют полю thinking
блоков контента thinking
.
Для контента размышлений специальное событие signature_delta
отправляется непосредственно перед событием content_block_stop
. Эта подпись используется для проверки целостности блока размышлений.
Типичная дельта размышлений выглядит так:
Thinking delta
Signature delta
Полный HTTP потоковый ответ
Мы настоятельно рекомендуем использовать наши клиентские SDK при использовании потокового режима. Однако, если вы создаете прямую интеграцию с API, вам нужно будет обрабатывать эти события самостоятельно. Потоковый ответ состоит из:- События
message_start
- Потенциально нескольких блоков контента, каждый из которых содержит:
- Событие
content_block_start
- Потенциально несколько событий
content_block_delta
- Событие
content_block_stop
- Событие
- События
message_delta
- События
message_stop
ping
, разбросанные по всему ответу. Смотрите Типы событий для более подробной информации о формате.
Базовый потоковый запрос
Response
Потоковый запрос с использованием инструментов
Использование инструментов теперь поддерживает детализированную потоковую передачу для значений параметров как бета-функцию. Для получения более подробной информации смотрите Детализированная потоковая передача инструментов.
Response
Потоковый запрос с расширенным мышлением
В этом запросе мы включаем расширенное мышление с потоковой передачей, чтобы увидеть пошаговые рассуждения Claude.Response
Потоковый запрос с использованием инструмента веб-поиска
В этом запросе мы просим Claude найти в интернете текущую информацию о погоде.Response
Восстановление после ошибок
Когда потоковый запрос прерывается из-за проблем с сетью, таймаутов или других ошибок, вы можете восстановиться, возобновив с того места, где поток был прерван. Этот подход избавляет вас от необходимости повторной обработки всего ответа. Базовая стратегия восстановления включает:- Захват частичного ответа: Сохраните весь контент, который был успешно получен до возникновения ошибки
- Создание запроса продолжения: Создайте новый API запрос, который включает частичный ответ ассистента как начало нового сообщения ассистента
- Возобновление потоковой передачи: Продолжите получение остальной части ответа с того места, где он был прерван
Лучшие практики восстановления после ошибок
- Используйте функции SDK: Используйте встроенные в SDK возможности накопления сообщений и обработки ошибок
- Обрабатывайте типы контента: Помните, что сообщения могут содержать несколько блоков контента (
text
,tool_use
,thinking
). Блоки использования инструментов и расширенного мышления не могут быть частично восстановлены. Вы можете возобновить потоковую передачу с самого последнего текстового блока.