Если ваш промпт полагался на подстановку начала ответа за Claude - на новых моделях запрос просто вернёт ошибку 400. Вот как переписать логику под пять типичных случаев.
Коротко о главном
По официальной документации Claude Platform, начиная с моделей Claude 4.6 и Claude Mythos Preview, предзаполненные ответы (prefill - предоставление части сообщения ассистента, с которой Claude должен продолжить) на последнем ходу ассистента больше не поддерживаются: запросы с prefill к этим моделям возвращают ошибку 400. Причина - интеллект моделей и следование инструкциям выросли настолько, что большинство сценариев использования prefill больше не требуют этого обходного пути; более ранние модели продолжают поддерживать prefill без изменений, и добавление сообщений ассистента в другие места разговора (не на последний ход) не затронуто. Документация описывает пять типичных сценариев использования prefill и как их заменить: для управления форматом вывода (JSON/YAML, классификация) - использовать функцию Structured Outputs, которая ограничивает ответ заданной схемой, или инструменты (tools) с полем enum для классификации; для устранения преамбул вроде «Вот запрошенное резюме:» - явная инструкция в системном промпте не начинать с таких фраз, либо вывод в XML-тегах, structured outputs или tool calling; для обхода лишних отказов модели - Claude теперь лучше справляется с уместными отказами сам по себе, явного prefill не требуется; для продолжения прерванных ответов - перенести продолжение в пользовательское сообщение с указанием, на чём оборвался предыдущий ответ; для периодического «освежения» контекста в длинных диалогах - переносить напоминания в пользовательский ход, либо гидратировать контекст через инструменты или через compaction контекста.
Что изменилось и почему
Начиная с моделей Claude 4.6 и Claude Mythos Preview, предзаполненные ответы (prefill) на последнем ходу ассистента больше не поддерживаются - запросы с prefilled assistant-сообщением к этим моделям возвращают ошибку 400. Более ранние модели продолжают поддерживать prefill без изменений, а добавление сообщений ассистента в другие места разговора, помимо самого последнего хода, этой отменой не затронуто. Причина отмены, по официальной формулировке, в том, что интеллект моделей и следование инструкциям продвинулись настолько далеко, что большинству сценариев использования prefill этот обходной путь больше не нужен.
Сценарий 1: управление форматом вывода
Раньше prefill использовался, чтобы принудительно задать конкретный формат вывода - JSON, YAML, классификацию и похожие паттерны, где начало ответа ограничивало структуру. Замена: функция Structured Outputs, специально созданная для того, чтобы ограничивать ответ Claude заданной схемой - стоит сначала просто попросить модель соответствовать нужной структуре, поскольку новые модели надёжно попадают в сложные схемы, если им это явно сказать, особенно в связке с повторными попытками. Для задач классификации - инструменты (tools) с полем enum, содержащим допустимые метки, либо structured outputs.
Сценарий 2: устранение преамбул
Prefill вроде «Here is the requested summary:» использовался, чтобы пропустить вступительный текст. Замена: прямая инструкция в системном промпте - явно попросить отвечать без преамбулы и не начинать с фраз вроде «Вот...», «На основе...». Альтернативно - направить модель выводить ответ в XML-тегах, использовать structured outputs или tool calling. Если отдельная преамбула всё же проскакивает - убирать её постобработкой.
Сценарии 3-5: отказы, продолжения и обновление контекста
Обход лишних отказов модели: Claude теперь значительно лучше справляется с уместными отказами самостоятельно - чёткой формулировки в пользовательском сообщении без prefill должно быть достаточно. Продолжение прерванных ответов: перенести логику продолжения в пользовательское сообщение, включив в него финальный текст прерванного ответа - «Ваш предыдущий ответ был прерван и закончился на [previous_response]. Продолжите с того места». Если прерывание - часть обработки ошибок и нет штрафа для UX, можно просто повторить запрос. Периодическое обновление контекста в длинных диалогах: то, что раньше было prefilled-напоминаниями от лица ассистента, нужно переносить в пользовательский ход - либо гидратировать контекст через инструменты (поощряя их использование на основе эвристик вроде количества ходов), либо через механизм compaction контекста.
С каких моделей Claude отключили поддержку prefill?
С Claude 4.6 и Claude Mythos Preview - запросы с prefilled assistant-сообщением к этим моделям возвращают ошибку 400.
Работает ли prefill на более ранних моделях Claude?
Да, более ранние модели продолжают поддерживать prefill без изменений.
Чем заменить prefill для принудительного формата JSON или YAML?
Функцией Structured Outputs, которая ограничивает ответ заданной схемой, или инструментами с полем enum для задач классификации.
Как убрать преамбулу вроде «Вот запрошенный ответ» без prefill?
Явной инструкцией в системном промпте не начинать с таких фраз, либо выводом в XML-тегах, structured outputs или tool calling.
Как теперь продолжать прерванный ответ модели?
Перенести продолжение в пользовательское сообщение с указанием, на чём оборвался предыдущий ответ, и попросить продолжить с этого места.
Почему Anthropic отключила prefill на новых моделях?
Потому что интеллект моделей и следование инструкциям выросли настолько, что большинству прежних сценариев использования prefill этот обходной путь больше не требуется.
Источники (1)
- Prompting best practices - Claude Platform Docs
← Все статьи блога