Anthropic сломала производство: что не так с Opus 4.7?
Релиз Claude Opus 4.7 случился три дня назад. И тишина. Не аплодисментов, а тишина падающих продакшен-скриптов. Ваш любимый агент, который вчера идеально планировал задачи, сегодня хрипит ошибкой 400. Бюджет токенов, который годами работал как швейцарские часы, теперь считает в каком-то параллельном измерении. Добро пожаловать в самый болезненный апдейт от Anthropic со времен перехода с Claude 2 на 3.
Важно: на момент 21 апреля 2026 года Opus 4.7 — последняя стабильная версия модели. Все примеры кода используют актуальный Claude Python SDK версии 1.1.7. Если у вас старая библиотека — сначала обновите ее.
Три кита, на которых треснула 4.7
Проблем не одна. Их три, и каждая бьет по разным частям вашего пайплайна. Некоторые изменения документация скромно называет "улучшениями". На практике это поломка обратной совместимости. Специалисты уже вовсю разбирают регрессии в отдельном глубоком анализе, но давайте по сути.
1. Параметр budget_tokens: цифровой призрак
Раньше вы задавали budget_tokens: 1000, и модель гарантированно укладывалась в лимит. Теперь этот параметр работает по принципу "я думаю, что влезу". Фактическое потребление токенов регулярно превышает установленный бюджет на 15-20%. В логах Anthropic вы увидите уведомление "budget_exceeded", но ответ уже ушел к клиенту. Платите вы.
# Код, который раньше работал, а теперь опасен
client = anthropic.Anthropic(api_key="ваш_ключ")
response = client.messages.create(
model="claude-3-5-opus-20241022", # Это 4.6. Для 4.7 используйте claude-3-7-opus-20250410
max_tokens=500,
budget_tokens=1000, # Вот этот предатель
messages=[{"role": "user", "content": "Напиши подробный план проекта"}]
)
print(f"Использовано токенов: {response.usage.input_tokens + response.usage.output_tokens}")
# Может показать 1150 при бюджете в 10002. Новый токенизатор: тихий убийца контекста
Anthropic обновила токенизатор на 21 апреля 2026. Теперь он лучше работает с неанглийскими языками и кодом. Звучит здорово. Но ваш точный подсчет токенов, завязанный на старый tokenizer.claude, теперь дает погрешность до 8%. Все системы мониторинга затрат, все лимиты контекста — в ауте. Подробности о работе нового токенизатора есть в разборе регрессий Opus 4.7.
# Старый способ подсчета токенов (больше не актуален)
from anthropic import Anthropic
old_count = Anthropic().count_tokens("Ваш текст")
print(f"Старый токенизатор: {old_count}")
# Новый способ (единственно верный на 21.04.2026)
from anthropic import AnthropicVertex # Или стандартный клиент с обновленной либой
client = AnthropicVertex() # Использует актуальный токенизатор
new_count = client.count_tokens("Ваш текст")
print(f"Новый токенизатор: {new_count}") # Цифры разные!3. Thinking Tokens: скрытая налоговая
Самое подлое изменение. Opus 4.7 использует "мыслительные токены" для сложных рассуждений. Их нет в response.usage. Они считаются отдельно, тарифицируются отдельно, и вы узнаете о них только в детализированном счете. В исповеди модели о внутреннем устройстве были намеки на такой механизм, но теперь он включен по умолчанию. Ваши затраты на сложные аналитические запросы могут вырасти на 40% без каких-либо изменений в коде.
Ошибка 400 Bad Request часто возникает именно из-за конфликта между max_tokens, budget_tokens и неявными thinking tokens. Система не может разрешить лимиты и просто отказывает.
Пошаговая миграция: как выжить
Не паникуйте. Миграция с Opus 4.6 на 4.7 займет час, если делать системно. Я прошел через это на пяти продакшен-проектах. Вот инструкция, которая сэкономит вам сутки отладки. Если вы переезжаете с других инфраструктурных решений, вам пригодится и гайд по миграции с TGI — принципы похожи.
1Обновите SDK и зафиксируйте токенизатор
Первым делом — зафиксировать инструменты. Не полагайтесь на старые версии библиотек.
# Обязательно специфицируйте версию
pip install anthropic>=1.1.7
# Или для Vertex
pip install anthropic-vertex>=0.8.2Сразу после обновления создайте утилиту для точного подсчета токенов. Не используйте старые методы.
# utils/token_counter.py
import anthropic
from functools import lru_cache
@lru_cache
def get_token_client():
# Возвращает клиент с актуальным токенизатором
return anthropic.Anthropic()
def count_tokens_accurate(text: str) -> int:
"""Единственно верный способ подсчета на 21.04.2026"""
client = get_token_client()
return client.count_tokens(text)
# Используйте везде вместо старого count_tokens
print(f"Токены: {count_tokens_accurate('Сложный запрос на русском')}")2Замените budget_tokens на явные лимиты
Пока Anthropic не починила budget_tokens, откажитесь от него. Используйте комбинацию max_tokens и ручную проверку.
# ВАЖНО: как НЕ надо делать
response = client.messages.create(
model="claude-3-7-opus-20250410", # Актуальная модель 4.7
max_tokens=500,
budget_tokens=1000, # УДАЛИТЬ ЭТУ СТРОКУ
messages=messages
)
# ПРАВИЛЬНО: явный контроль
MAX_ALLOWED = 1000 # Ваш абсолютный лимит
response = client.messages.create(
model="claude-3-7-opus-20250410",
max_tokens=min(500, MAX_ALLOWED), # Жесткий кап
messages=messages
)
# Дополнительная проверка после получения ответа
total_used = response.usage.input_tokens + response.usage.output_tokens
if total_used > MAX_ALLOWED:
log_warning(f"Превышен лимит: {total_used} > {MAX_ALLOWED}")
# Здесь можно реализовать компенсацию или оповещение3Добавьте мониторинг Thinking Tokens
Thinking Tokens не видны в стандартном ответе. Но их можно оценить через разницу между детализированным счетом и usage. Настройте алерты.
# Пример логирования для выявления скрытых затрат
def log_usage_with_thinking_estimate(response, request_cost_estimate):
"""Логирует использование с оценкой thinking tokens"""
standard_tokens = response.usage.input_tokens + response.usage.output_tokens
# Предполагаем, что thinking tokens - это разница между фактическим счетом и стандартными токенами
# В реальности используйте данные из биллинга API
thinking_estimate = max(0, request_cost_estimate - standard_tokens)
if thinking_estimate > standard_tokens * 0.3: # Если thinking > 30% от стандартных
send_alert(f"Высокий объем thinking tokens: {thinking_estimate}")
logger.info(f"Стандартные: {standard_tokens}, Оценка thinking: {thinking_estimate}")Для постоянного мониторинга рекомендую специализированные инструменты вроде TokenTracker Pro (партнерская ссылка), которые уже адаптировались к новым реалиям 4.7.
Где вас подстерегут ошибки
Даже после миграции остаются подводные камни. Вот топ-3 момента, из-за которых падает ваш деплой в полночь.
- Кэширование токенизатора. Старые кэшированные значения подсчета токенов будут неверны. Очистите все кэши, связанные с anthropic.count_tokens. Проблема похожа на сломанные скрипты после обновления llama-server.
- Граничные значения max_tokens. Из-за thinking tokens модель может превысить max_tokens на 10-15%. Если у вас жесткий лимит на стороне приложения (например, вывод ровно 500 символов), добавьте буфер.
- Старые названия моделей. В коде могло затеряться "claude-3-5-opus-20241022" (это 4.6). Ищите глобально и заменяйте на "claude-3-7-opus-20250410".
Стоит ли вообще переходить на 4.7?
Вопрос риторический. Качество генерации в 4.7 действительно лучше, особенно для сложных рассуждений и неанглийских языков. Но цена... цена стала непредсказуемой. Моя рекомендация на апрель 2026: переводите на 4.7 только критические аналитические задачи, где нужно максимальное качество. Для рутинных операций (классификация, простой синтез) оставайтесь на 4.6 или даже изучите альтернативы вроде Qwen3-coder-next, которую можно развернуть локально.
Anthropic обещает исправления к концу месяца. Но опыт подсказывает: то, что сломали в релизе, чинят минимум два цикла обновлений. Пока что ваш лучший друг — это детальный мониторинг и жесткие лимиты на уровне приложения. Не доверяйте бюджету, доверяйте только своему коду.