Наши SDK для Python и TypeScript предлагают несколько способов потоковой передачи. SDK для Python позволяет использовать как синхронные, так и асинхронные потоки. Подробности смотрите в документации к каждому SDK.
import anthropicclient = anthropic.Anthropic()with client.messages.stream( max_tokens=1024, messages=[{"role":"user","content":"Hello"}], model="claude-opus-4-20250514",)as stream:for text in stream.text_stream:print(text, end="", flush=True)
Каждое событие, отправляемое сервером, включает именованный тип события и связанные с ним данные 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, является кумулятивным.
Иногда мы можем отправлять ошибки в потоке событий. Например, в периоды высокой нагрузки вы можете получить ошибку overloaded_error, которая обычно соответствует HTTP 529 в контексте без потоковой передачи:
В соответствии с нашей политикой версионирования, мы можем добавлять новые типы событий, и ваш код должен корректно обрабатывать неизвестные типы событий.
Дельты для блоков контента tool_use соответствуют обновлениям поля input блока. Для обеспечения максимальной детализации дельты представляют собой частичные строки JSON, тогда как финальный tool_use.input всегда является объектом.
Вы можете накапливать строковые дельты и разбирать JSON после получения события content_block_stop, используя библиотеку, такую как Pydantic для частичного разбора JSON, или используя наши SDK, которые предоставляют вспомогательные функции для доступа к разобранным инкрементальным значениям.
Примечание: Наши текущие модели поддерживают только выдачу одного полного свойства ключа и значения из input за раз. Таким образом, при использовании инструментов между событиями потоковой передачи могут возникать задержки, пока модель работает. Как только ключ и значение input накапливаются, мы выдаем их как несколько событий content_block_delta с разбитым на части частичным json, чтобы формат мог автоматически поддерживать более тонкую детализацию в будущих моделях.
При использовании расширенного размышления с включенной потоковой передачей вы будете получать содержимое размышлений через события thinking_delta. Эти дельты соответствуют полю thinking блоков контента thinking.
Для содержимого размышлений специальное событие signature_delta отправляется непосредственно перед событием content_block_stop. Эта подпись используется для проверки целостности блока размышлений.
Типичная дельта размышления выглядит так:
Дельта размышления
event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"Let me solve this step by step:\n\n1. First break down 27 * 453"}}
Мы настоятельно рекомендуем использовать наши клиентские SDK при использовании режима потоковой передачи. Однако, если вы создаете прямую интеграцию с API, вам нужно будет обрабатывать эти события самостоятельно.
Ответ потока состоит из:
События message_start
Потенциально нескольких блоков контента, каждый из которых содержит:
Событие content_block_start
Потенциально несколько событий content_block_delta
Событие content_block_stop
События message_delta
События message_stop
Также в ответе могут быть рассредоточены события ping. Подробнее о формате см. в разделе Типы событий.
Запрос потоковой передачи с использованием инструмента
В этом запросе мы просим Claude использовать инструмент, чтобы сообщить нам о погоде.
Shell
curl https://api.anthropic.com/v1/messages \-H"content-type: application/json"\-H"x-api-key: $ANTHROPIC_API_KEY"\-H"anthropic-version: 2023-06-01"\-d '{"model":"claude-opus-4-20250514","max_tokens":1024,"tools":[{"name":"get_weather","description":"Get the current weather in a given location","input_schema":{"type":"object","properties":{"location":{"type":"string","description":"The city and state, e.g. San Francisco, CA"}},"required":["location"]}}],"tool_choice":{"type":"any"},"messages":[{"role":"user","content":"What is the weather like in San Francisco?"}],"stream":true}'
Запрос потоковой передачи с использованием инструмента веб-поиска
Response
event: message_startdata:{"type":"message_start","message":{"id":"msg_01G...","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":2679,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}}}event: content_block_startdata:{"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check"}}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the current weather in New York City for you"}}event: pingdata:{"type":"ping"}event: content_block_deltadata:{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"."}}event: content_block_stopdata:{"type":"content_block_stop","index":0}event: content_block_startdata:{"type":"content_block_start","index":1,"content_block":{"type":"server_tool_use","id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","name":"web_search","input":{}}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"query"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"\":"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" \"weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" NY"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"C to"}}event: content_block_deltadata:{"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"day\"}"}}event: content_block_stopdata:{"type":"content_block_stop","index":1}event: content_block_startdata:{"type":"content_block_start","index":2,"content_block":{"type":"web_search_tool_result","tool_use_id":"srvtoolu_014hJH82Qum7Td6UV8gDXThB","content":[{"type":"web_search_result","title":"Weather in New York City in May 2025 (New York) - detailed Weather Forecast for a month","url":"https://world-weather.info/forecast/usa/new_york/may-2025/","encrypted_content":"Ev0DCioIAxgCIiQ3NmU4ZmI4OC1k...","page_age":null},...]}}event: content_block_stopdata:{"type":"content_block_stop","index":2}event: content_block_startdata:{"type":"content_block_start","index":3,"content_block":{"type":"text","text":""}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"Here's the current weather information for New York"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" City:\n\n# Weather"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":" in New York City"}}event: content_block_deltadata:{"type":"content_block_delta","index":3,"delta":{"type":"text_delta","text":"\n\n"}}...event: content_block_stopdata:{"type":"content_block_stop","index":17}event: message_deltadata:{"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":10682,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":510,"server_tool_use":{"web_search_requests":1}}}event: message_stopdata:{"type":"message_stop"}