Skip to main content
Когда вы используете нативный формат Claude (/v1/messages), ответ полностью отличается от режима, совместимого с OpenAI: ответ представляет собой типизированный массив блоков content, а потоковая передача использует SSE-протокол Anthropic с именованными событиями. На этой странице объясняется, как разбирать оба режима.
Сторона запроса (эндпоинт, заголовок anthropic-version, auth x-api-key, параметры effort / thinking) описана в Основах Claude API и Руководстве по Claude Effort & Thinking. Эта страница посвящена исключительно стороне ответа. В примерах используется облегченная модель claude-haiku-4-5-20251001.

Непотоковый ответ

Верхний уровень — это объект message, а ответ находится в массиве content, разбитом на блоки по type:
Получение ответа означает итерацию по массиву content — вы не можете прочитать одно строковое поле, как в OpenAI:
stop_reason значений: end_turn (обычный), max_tokens (обрезан по max_tokens — текст может быть пустым; увеличьте лимит), stop_sequence, tool_use (хочет вызвать инструмент). При включенном рассуждении массив content получает блок type: "thinking", расположенный перед блоком text.

Потоковый ответ (SSE с именованными событиями)

Claude streaming использует протокол событий Anthropic: каждое сообщение имеет имя event: и payload data:, и вы выполняете обработку по типу события, а не рассматриваете каждый фрагмент одинаково, как в OpenAI.
Фиксированная последовательность событий и что каждое из них содержит: Суть в накоплении text_delta внутри content_block_delta:
Тип события присутствует и в строке event:, и в поле "type" payload data:; обрабатывайте по любому из них. С официальным SDK anthropic укажите base_url на https://api.apiyi.com, и SDK сам обработает поток событий — ручной цикл не нужен.
При включенном thinking (adaptive thinking) сначала появляется блок type: "thinking"; его приросты — thinking_delta, а перед закрытием блока появляется signature_delta (сигнатура блока thinking). Чтобы отображать thinking, рендерьте thinking_delta и text_delta отдельно. См. Руководство Claude Effort & Thinking.

Ключевые различия по сравнению с режимом совместимости с OpenAI

Два самых простых подводных камня при миграции: (1) ответ — это массив, а не строка — перебирайте content для type=="text" блоков; (2) в потоковой передаче нет [DONE] — определяйте завершение по событию message_stop.

Использование и тарификация

  • Без потоковой передачи: usage возвращается с результатом, включая input_tokens, output_tokens, cache_creation_input_tokens, cache_read_input_tokens.
  • Потоковая передача: input_tokens находится в message_start, а финальный output_tokens находится в message_deltaобъедините оба.
  • Для скидки и использования поля cache-hit (cache_read_input_tokens) см. Тарификация Claude Cache.

Связанные ссылки