AssistantMessage после того, как Claude завершит генерацию каждого ответа. Чтобы получать добавочные обновления по мере генерации текста и вызовов инструментов, включите потоковую передачу частичных сообщений, установив include_partial_messages (Python) или includePartialMessages (TypeScript) в значение true в ваших параметрах.
Включение потоковой передачи выходных данных
Чтобы включить потоковую передачу, установитеinclude_partial_messages (Python) или includePartialMessages (TypeScript) в значение true в ваших параметрах. Это заставляет SDK выдавать сообщения StreamEvent, содержащие необработанные события API по мере их поступления, в дополнение к обычным AssistantMessage и ResultMessage.
Ваш код затем должен:
- Проверить тип каждого сообщения, чтобы отличить
StreamEventот других типов сообщений - Для
StreamEventизвлечь полеeventи проверить егоtype - Искать события
content_block_delta, гдеdelta.type— этоtext_delta, которые содержат фактические текстовые фрагменты
StreamEvent, затем для content_block_delta, затем для text_delta:
Справочник StreamEvent
Когда включены частичные сообщения, вы получаете необработанные события потоковой передачи Claude API, завернутые в объект. Тип имеет разные имена в каждом SDK:- Python:
StreamEvent(импортируется изclaude_agent_sdk.types) - TypeScript:
SDKPartialAssistantMessageсtype: 'stream_event'
event содержит необработанное событие потоковой передачи из Claude API. Распространенные типы событий включают:
| Тип события | Описание |
|---|---|
message_start | Начало нового сообщения |
content_block_start | Начало нового блока содержимого (текст или использование инструмента) |
content_block_delta | Добавочное обновление содержимого |
content_block_stop | Конец блока содержимого |
message_delta | Обновления на уровне сообщения (причина остановки, использование) |
message_stop | Конец сообщения |
Поток сообщений
С включенными частичными сообщениями вы получаете сообщения в этом порядке:include_partial_messages в Python, includePartialMessages в TypeScript) вы получаете все типы сообщений, кроме StreamEvent. Распространенные типы включают SystemMessage (инициализация сеанса), AssistantMessage (полные ответы), ResultMessage (финальный результат) и компактное граничное сообщение, указывающее на то, когда история разговора была сжата (SDKCompactBoundaryMessage в TypeScript; SystemMessage с подтипом "compact_boundary" в Python).
Потоковая передача текстовых ответов
Чтобы отобразить текст по мере его генерации, ищите событияcontent_block_delta, где delta.type — это text_delta. Они содержат добавочные текстовые фрагменты. Пример ниже выводит каждый фрагмент по мере его поступления:
Потоковая передача вызовов инструментов
Вызовы инструментов также передаются потоком добавочно. Вы можете отследить, когда инструменты начинают работу, получить их входные данные по мере их генерации и увидеть, когда они завершаются. Пример ниже отслеживает текущий вызываемый инструмент и накапливает входные данные JSON по мере их поступления. Он использует три типа событий:content_block_start: инструмент начинает работуcontent_block_deltaсinput_json_delta: поступают фрагменты входных данныхcontent_block_stop: вызов инструмента завершен
Создание пользовательского интерфейса потоковой передачи
Этот пример объединяет потоковую передачу текста и инструментов в единый пользовательский интерфейс. Он отслеживает, выполняет ли агент в настоящее время инструмент (используя флагin_tool), чтобы показать индикаторы состояния, такие как [Using Read...], пока работают инструменты. Текст передается потоком нормально, когда инструмент не используется, а завершение инструмента вызывает сообщение “done”. Этот паттерн полезен для интерфейсов чата, которым нужно показывать прогресс во время многошаговых задач агента.
Известные ограничения
- Structured output: результат JSON появляется только в финальном
ResultMessage.structured_output, а не как потоковые дельта-обновления. Подробнее см. в разделе structured outputs.
Следующие шаги
Теперь, когда вы можете передавать текст и вызовы инструментов потоком в реальном времени, изучите эти связанные темы:- Интерактивные и одноразовые запросы: выберите режим ввода для вашего случая использования
- Структурированные выходные данные: получайте типизированные ответы JSON от агента
- Разрешения: контролируйте, какие инструменты может использовать агент