Префилл (prefill, «задать начало») — техника, при которой ты в API не просто отправляешь модели запрос, а дополнительно начинаешь её ответ за неё. Модель «дописывает» с того места, где ты остановилась.
Зачем это могло быть нужно:
{, модель скорее всего продолжит JSON, а не «вот
ваш ответ:».
1. — она сразу пишет первый пункт.
Я понимаю, что сейчас непросто., ответ скорее
всего будет в спокойном эмпатичном ключе.
Anthropic в свежей документации прямо пишет: «Начиная с Claude 4.6 префилл ответа на последнем ходу ассистента больше не поддерживается». Причина: модели стали достаточно умные, чтобы соблюдать формат и тон без этого приёма. У OpenAI похожая траектория: для GPT-5 семейства проще попросить промптом или использовать structured outputs, чем подсовывать assistant-сообщение с началом ответа.
Поэтому эта статья не про «как делать префилл». Она про то, как заменить префилл, если когда-то ты его использовала, и в каких редких случаях он всё ещё уместен.
Если ты раньше делала префилл {, чтобы получить JSON
— сейчас лучше:
response_format со схемой). Модель гарантированно
возвращает валидный JSON по схеме, без префилла.
from pydantic import BaseModel
class Plan(BaseModel):
items: list[str]
estimated_minutes: int
response = await client.chat.completions.parse(
model="gpt-5.4-mini",
messages=messages,
response_format=Plan,
)
plan: Plan = response.choices[0].message.parsed
Если у тебя в ответах болтаются «Конечно!», «Вот план:», «Хороший вопрос!» — добавь в системный промпт:
Отвечай сразу по делу. Не начинай ответы с фраз типа «Конечно»,
«Вот план», «Хороший вопрос», «Я понимаю». Если уместна эмпатия —
выражай её содержательно, не дежурными фразами.
Альтернатива — попросить модель писать ответ внутри
<answer>…</answer> и забирать только
содержимое тега (см.
«XML-теги»).
Тон надёжнее задаётся описанием тона + few-shot (см. «Примеры»), чем префиллом одной фразы. Префилл «учит» модель только начинать с этой фразы; описание + примеры учат стилю ответа в целом.
Редко, но бывает:
response_format,
и нужен надёжный JSON — assistant-сообщение, заканчивающееся на
{"plan":, ещё работает.
Для большинства сценариев в твоём боте префилл — не первый инструмент. Сначала попробуй промпт-инструкцию или structured outputs.