Диагностика Mock-интервью
Главная · LLM: обучение и инференс

Работа с контекстом и разметка сообщений

Модель видит не «вопрос», а весь собранный контекст перед генерацией — и то, как этот контекст структурирован и размечен, влияет на ответ не меньше, чем сам вопрос. Контекст-инжиниринг (context engineering) — это искусство собирать вход так, чтобы модель поняла границы ходов, роли и приоритеты.

Интуиция

Представь, что даёшь коллеге пачку бумаг перед совещанием. Если свалить всё в одну кучу без подписей — где инструкция, где данные, где вопрос, — коллега запутается. А если разложить по папкам с ярлыками «правила», «примеры», «материалы», «вопрос» — он сориентируется мгновенно. Модель ведёт себя так же: контекст = всё, что она видит перед генерацией, и разметка этого контекста определяет, что она сочтёт инструкцией, что примером, а что вопросом.

Как это работает

Роли сообщений. Диалог с моделью размечен ролями: system (правила поведения), user (реплики пользователя), assistant (ответы модели). Роль — это не просто ярлык: модель обучена относиться к system-инструкции как к приоритетной рамке, а к user — как к запросу. Без ролей «кто что сказал» превращается в неразличимую ленту текста.

Chat-шаблоны и спецтокены. Нельзя просто склеить реплики строками — модель не увидит, где закончился один ход и начался другой. Поэтому реплики оборачивают в chat-шаблон (chat template) со спецтокенами (special tokens). Формат вроде ChatML размечает ходы так:

<|im_start|>system
Ты — вежливый ассистент.<|im_end|>
<|im_start|>user
Привет!<|im_end|>
<|im_start|>assistant

Спецтокены <|im_start|> и <|im_end|> — это границы ходов, которые модель видела миллионы раз при обучении. Именно они говорят ей: «здесь начинается system, а вот тут твоя очередь отвечать».

💡 Ключевая мысль Модель не читает мысли — она читает токены. Роль-разметка и спецтокены превращают плоский текст в структуру, где модель различает правила, примеры и вопрос. «Просто текст» без разметки — это потеря сигнала о том, что важно.

Из чего собирают контекст. Реальный вход к модели редко состоит из одного вопроса. Обычно это: инструкции (system), few-shot примеры (демонстрации формата), извлечённые документы из RAG (retrieved documents), история диалога, описания доступных инструментов (tools) и, наконец, сам вопрос пользователя. Задача инженера — решить, что включить, в каком порядке и как разделить.

Методы контекст-инжиниринга. Порядок блоков важен: у моделей есть эффект позиции — «потерянное в середине» (lost in the middle): информация в начале и в конце контекста используется надёжнее, чем зарытая в середину. Отсюда практики: важное — в начало и в конец, между блоками — явные разделители и секции с заголовками, few-shot примеры как разметка ожидаемого формата ответа, структурированные секции вместо «каши». Токен (token) — реальная единица бюджета: длина контекста ограничена, и каждый блок его тратит.

Связь с промпт-инжинирингом. Промпт-инжиниринг (prompt engineering) — про формулировку конкретной инструкции; контекст-инжиниринг шире — про сборку и разметку всего, что окружает эту инструкцию: роли, порядок, разделители, бюджет.

Подводные камни на практике

Частая ошибка — засунуть самый важный документ в середину длинного контекста и удивляться, что модель его «не заметила». Другая — склеить историю диалога простым текстом без ролей, из-за чего модель путает, где её собственные прошлые ответы, а где реплики пользователя. Третья — раздуть few-shot примерами так, что на сам вопрос уже не остаётся бюджета.

⚠️ Подводный камень Нельзя вручную склеивать реплики строками и рассчитывать на правильное поведение — модель обучалась на конкретном chat-шаблоне со спецтокенами. Если разметка не совпадает с обучающей (не тот формат ролей, забытые <|im_end|>), качество ответов заметно падает, хотя текст «на глаз» выглядит нормально.
🎤 На собеседовании
  • «Почему role-разметка важнее просто текста?» — роли задают приоритет и границы: модель обучена относиться к system как к правилам, а к user как к запросу; без ролей эта информация теряется.
  • «Что такое chat template?» — формат оборачивания реплик спецтокенами (например, ChatML с <|im_start|>/<|im_end|>), размечающий границы ходов так, как модель видела при обучении.
  • «Куда класть важное в длинном контексте?» — в начало и в конец: из-за эффекта lost in the middle середина используется хуже.
  • «Чем контекст-инжиниринг шире промпт-инжиниринга?» — промпт про формулировку инструкции, контекст — про сборку и разметку всего входа: роли, порядок блоков, разделители, бюджет токенов.