Примечание автора: Глубокий анализ коренной причины ошибки content should be a valid list при вызове модели Claude Opus 4.6 Thinking через сервис-прокси API. Разбор различий в форматах между двумя конечными точками /v1/messages и /v1/chat/completions и варианты их совместимости.
Бывало у вас такое: вы используете модель claude-opus-4-6-thinking через конечную точку /v1/chat/completions (формат OpenAI), и всё работает отлично. Но стоит переключиться на /v1/messages (нативный формат Anthropic), как тут же вылетает ошибка content: Input should be a valid list? Этот, казалось бы, нелогичный феномен на самом деле раскрывает глубокие проблемы совместимости модели Thinking между двумя форматами API. В этой статье мы разберёмся с форматами на уровне API, чтобы полностью понять причину ошибки и правильный способ вызова.
Ключевая ценность: Прочитав эту статью, вы поймёте различия в поведении модели Thinking в двух форматах API, решите проблему с ошибкой content should be a valid list и освоите правильный способ обработки thinking blocks в многораундовых диалогах.

Ключевые моменты совместимости API модели Claude Thinking
Сначала прямо отвечу на суть этого "контр-интуитивного" явления.
| Пункт | Объяснение | Влияние |
|---|---|---|
| Причина ошибки | Прокси передаёт content: "string" в /v1/messages, который ожидает content: [list] |
Несоответствие формата вызывает ошибку 400 |
| Формат OpenAI работает | /v1/chat/completions позволяет content быть строкой, автоматически удаляя thinking blocks |
Простой формат, хорошая совместимость |
| Формат Anthropic вызывает ошибку | /v1/messages строго требует, чтобы content был списком блоков, и thinking должен быть на первом месте |
Преобразование формата прокси неполное |
| Разница в имени модели | claude-opus-4-6-thinking — это псевдоним на платформе прокси, официальное имя модели — claude-opus-4-6 |
thinking активируется через параметры, а не имя модели |
| Правильный подход | Используйте формат OpenAI для вызова или убедитесь, что прокси правильно обрабатывает преобразование формата content | Выберите правильную конечную точку + правильно передавайте параметры |
Техническая суть ошибки API модели Claude Thinking
Сообщение об ошибке content: Input should be a valid list раскрывает ключевое различие в форматах:
Нативный API Anthropic (/v1/messages) требует, чтобы поле content было массивом блоков (list):
{
"role": "assistant",
"content": [
{"type": "thinking", "thinking": "Давайте проанализирую эту проблему...", "signature": "CpcH..."},
{"type": "text", "text": "Вот мой ответ..."}
]
}
Совместимый формат OpenAI (/v1/chat/completions) позволяет content быть простой строкой:
{
"role": "assistant",
"content": "Вот мой ответ..."
}
Когда конфигурация канала сервиса-прокси API (например, в бэкенде APIYI) использует формат /v1/messages, и если клиент отправляет content в формате OpenAI (строка), прокси должен преобразовать "string" в [{"type": "text", "text": "string"}]. Если это преобразование неполное — особенно при передаче ответа модели Thinking в следующий раунд диалога — возникает ошибка Input should be a valid list.
Подробное сравнение двух форматов конечных точек API модели Claude Thinking
Это ключ к пониманию проблемы: два формата конечных точек имеют принципиально разные требования к полю content.
Различия форматов API модели Claude Thinking
| Критерий сравнения | /v1/chat/completions (OpenAI) |
/v1/messages (Anthropic) |
|---|---|---|
| Тип content | string или array |
Должен быть array (список блоков) |
| Возврат thinking | Не возвращает детальный процесс мышления | Возвращает блок content типа thinking |
| Передача signature | Помещается в provider_specific_fields |
Непосредственно в поле signature блока thinking |
| Многораундовый диалог | Передача чистого текста, не нужно заботиться о порядке thinking | Сообщение assistant должно начинаться с блока thinking |
| Способ активации thinking | Суффикс имени модели или параметры | Параметр thinking: {"type": "adaptive"} |
| prompt caching | Не поддерживается | Поддерживается |
| Видимость процесса мышления | Не виден | Виден (summarized thinking) |
Сравнение форматов запросов API модели Claude Thinking
Вызов в формате OpenAI (рекомендуется для сценариев с прокси):
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
response = client.chat.completions.create(
model="claude-opus-4-6-thinking", # Псевдоним на платформе прокси
messages=[
{"role": "user", "content": "Проанализируйте коммерческие перспективы квантовых вычислений"}
],
max_tokens=16000
)
print(response.choices[0].message.content)
Посмотреть код вызова в нативном формате Anthropic
import anthropic
client = anthropic.Anthropic(api_key="YOUR_API_KEY")
response = client.messages.create(
model="claude-opus-4-6", # Официальное имя модели, без -thinking
max_tokens=16000,
thinking={
"type": "adaptive" # Активация thinking через параметр
},
messages=[
{"role": "user", "content": "Проанализируйте коммерческие перспективы квантовых вычислений"}
]
)
# В ответе content — это список, содержащий блоки thinking и text
for block in response.content:
if block.type == "thinking":
print(f"[Процесс мышления] {block.thinking[:100]}...")
elif block.type == "text":
print(f"[Ответ] {block.text}")
Ключевые отличия:
- Имя модели —
claude-opus-4-6(без суффикса-thinking) - thinking активируется через параметр
thinking={"type": "adaptive"} - Content ответа — это список блоков, а не строка
- В многораундовом диалоге необходимо передавать полный список content (включая блоки thinking)
🎯 Рекомендация по вызову: Если вы вызываете модель Claude Thinking через сервис-прокси API, в первую очередь используйте
/v1/chat/completions(формат OpenAI) — это обеспечивает наилучшую совместимость.
Совместимая конечная точка OpenAI на платформе APIYI apiyi.com уже адаптирована для модели Thinking и автоматически обрабатывает преобразование thinking blocks.

Почему API модели Claude Thinking работает с форматом OpenAI
Это самая неинтуитивная часть: вызов модели Claude Thinking через "неродной" формат OpenAI обеспечивает лучшую совместимость. Причин три:
Причина 1: Разная степень гибкости формата content
Формат OpenAI позволяет, чтобы content был простой строкой "hello", а также массивом блоков содержимого [{"type":"text","text":"hello"}]. Нативный формат Anthropic принимает только массив блоков содержимого, строковый формат сразу вызывает ошибку.
Когда клиентский код передаёт content строковым способом (это поведение по умолчанию в OpenAI SDK), и запрос идёт через канал формата OpenAI, форматы клиента и конечной точки совпадают, проблем с конвертацией нет. Но если запрос идёт через канал формата Anthropic, строка уже не принимается.
Причина 2: Автоматическое удаление thinking blocks
Режим совместимости с OpenAI автоматически удаляет thinking blocks из ответа Claude, возвращая только итоговый текст. Это означает:
- Клиент не получает thinking blocks
- В следующем раунде диалога не нужно передавать thinking blocks обратно
- Не возникает проблемы с порядком thinking blocks
Нативный формат Anthropic, напротив, требует полного сохранения thinking blocks в многораундовом диалоге, и сообщение assistant должно начинаться с thinking block. Если прокси-сервис не обрабатывает это требование порядка корректно, возникает ошибка.
Причина 3: Проблема передачи thoughtSignature
Как упоминалось ранее, thinking blocks в формате Anthropic содержат криптографическую подпись (signature), которую необходимо передавать обратно в неизменном виде. Формат OpenAI просто пропускает этот этап — не возвращает подпись и не требует её передачи обратно.
🎯 Рекомендация по выбору: При вызове модели Claude Thinking через API-прокси, в первую очередь используйте формат
/v1/chat/completions, чтобы избежать проблем совместимости с форматом thinking blocks.
Совместимая с OpenAI конечная точка APIYI apiyi.com уже полностью адаптирована для моделей Thinking.
Сравнение вариантов вызова API модели Claude Thinking
Три варианта вызова API модели Claude Thinking
| Вариант | Конечная точка | Совместимость формата | thinking видим | prompt caching |
|---|---|---|---|---|
| Прокси в формате OpenAI | /v1/chat/completions |
Лучшая (string content) | Не виден | Не поддерживается |
| Прямое подключение в нативном формате Anthropic | /v1/messages |
Требует строгого следования формату | Виден | Поддерживается |
| Прокси в формате Anthropic | /v1/messages (прокси) |
Зависит от реализации прокси | Зависит от прокси | Частично поддерживается |
Различия в названиях моделей Claude Thinking API
На разных платформах используются разные способы именования моделей Thinking, что также является частым источником путаницы:
| Платформа | Название модели | Способ включения thinking |
|---|---|---|
| Официальный Anthropic | claude-opus-4-6 |
Параметр thinking: {"type": "adaptive"} |
| API-прокси (например, APIYI) | claude-opus-4-6-thinking |
Неявное включение через суффикс в названии модели |
| OpenRouter | anthropic/claude-opus-4.6 |
Включение через параметр |
| AWS Bedrock | anthropic.claude-opus-4-6-v1 |
Включение через параметр |
В официальном API Anthropic нет названия модели claude-opus-4-6-thinking. Суффикс -thinking — это соглашение об именовании на платформах-прокси, позволяющее пользователям напрямую включать функцию thinking через название модели, без ручной настройки параметров.
Подсказка: Если вы используете название модели
claude-opus-4-6-thinkingна APIYI apiyi.com, платформа автоматически добавит параметрthinking: {"type": "adaptive"}в запрос. Таким образом, вы сможете получить возможность thinking напрямую через OpenAI SDK, не изменяя код.
Распространённые проблемы при работе с API модели Claude Thinking и их решения

Часто задаваемые вопросы
Вопрос 1: Если использовать формат OpenAI для вызова модели Thinking, потеряет ли она способность «думать»?
Нет. Процесс "мышления" (thinking) модели происходит на стороне сервиса Anthropic и не зависит от формата конечной точки вызова. При вызове через формат OpenAI модель по-прежнему выполняет полный процесс логических рассуждений, просто текстовое резюме этого процесса не возвращается клиенту. Качество и глубина итогового ответа остаются прежними — вы получаете "продуманный ответ", просто не видите "текстовой записи процесса размышлений".
Вопрос 2: В каких сценариях обязательно использовать нативный формат /v1/messages?
Есть два сценария, требующих нативного формата: 1) Вам нужно видеть процесс мышления модели (summarized thinking) для отладки, обучения или демонстрации цепочки рассуждений; 2) Вам нужно использовать prompt caching для снижения затрат — функция кэширования доступна только через конечную точку /v1/messages. Если ни одна из этих потребностей не актуальна, использование формата OpenAI проще и удобнее. Самый простой способ — вызывать через совместимую конечную точку OpenAI на платформе APIYI apiyi.com.
Вопрос 3: Как решить проблему совместимости, если канал в APIYI настроен на /v1/messages?
Есть два варианта: 1) Переключить тип канала на OpenAI (/v1/chat/completions), чтобы полностью избежать проблем с преобразованием формата; 2) Если необходимо использовать канал /v1/messages, нужно убедиться, что промежуточный слой корректно преобразует строковый контент (string content) от клиента в формат списка (list), а также правильно обрабатывает порядок thinking blocks и передачу signature в многораундовых диалогах. Вариант 1 проще и надежнее.
Вопрос 4: В чем разница между adaptive thinking и устаревшим extended thinking?
Для Opus 4.6 рекомендуется использовать thinking: {"type": "adaptive"} (адаптивное мышление), когда модель сама решает, нужно ли "думать" и насколько глубоко, в зависимости от сложности вопроса. Устаревший вариант thinking: {"type": "enabled", "budget_tokens": N} в Opus 4.6 и Sonnet 4.6 считается устаревшим. В новой версии также добавлен параметр effort (low/medium/high/max) для контроля глубины мышления, по умолчанию используется high.
Итоги
Ключевые моменты, касающиеся совместимости API моделей Claude Thinking:
- Основная причина ошибок — несоответствие формата content: Нативный API Anthropic строго требует, чтобы content был списком (list), в то время как формат OpenAI допускает строку. Если сервис-прокси использует
/v1/messages, а клиент отправляет строку, возникает ошибкаInput should be a valid list. - Формат OpenAI обладает лучшей совместимостью: Автоматически удаляет thinking blocks, не требует передачи signature обратно, content может быть строкой — это предпочтительный выбор для сценариев с прокси.
- Суффикс -thinking — это соглашение сервисов-прокси, а не официальное название модели: Официальное название модели —
claude-opus-4-6, а thinking активируется через параметры.
При вызове моделей Claude Thinking через сервис-прокси API самый простой подход — единообразно использовать совместимый формат OpenAI.
Рекомендуем вызывать через платформу APIYI apiyi.com. Платформа уже оптимизирована для совместимости с моделями Thinking и предоставляет бесплатные квоты, а также унифицированный интерфейс для множества моделей.
📚 Справочные материалы
-
Документация Claude API Extended Thinking: Полный справочник по API для режима мышления
- Ссылка:
platform.claude.com/docs/en/build-with-claude/extended-thinking - Описание: Подробное описание adaptive thinking, параметра effort, формата блоков контента
- Ссылка:
-
Документация по совместимости Claude API с OpenAI SDK: Официальное руководство по вызову Claude в формате OpenAI
- Ссылка:
platform.claude.com/docs/en/api/openai-sdk - Описание: Включает ограничения совместимости и список неподдерживаемых функций
- Ссылка:
-
Справочник по кодам ошибок Claude API: Описание всех типов API-ошибок
- Ссылка:
platform.claude.com/docs/en/api/errors - Описание: Включает конкретные методы устранения ошибки invalid_request_error
- Ссылка:
-
Документационный центр APIYI: Вызов моделей Claude Thinking через OpenAI-совместимый интерфейс
- Ссылка:
docs.apiyi.com - Описание: Уже адаптирован для моделей Thinking, автоматически обрабатывает преобразование thinking blocks
- Ссылка:
Автор: Техническая команда APIYI
Техническое обсуждение: Добро пожаловать в комментарии, больше материалов доступно в документационном центре APIYI docs.apiyi.com