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

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

Раздел: [LLM: обучение и инференс](https://ml-book.com/s/llm/) · Страница темы: https://ml-book.com/t/context-engineering/ · Обновлено: 2026-07-07 · Источник: ml-book.com, учебник делается сообществом

## Интуиция

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

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

**Роли сообщений.** Диалог с моделью размечен ролями: 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) — про формулировку конкретной инструкции; контекст-инжиниринг шире — про сборку и разметку всего, что окружает эту инструкцию: роли, порядок, разделители, бюджет.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/context-engineering/

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

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

> **⚠️ Подводный камень**
>
> Нельзя вручную склеивать реплики строками и рассчитывать на правильное поведение — модель обучалась на конкретном chat-шаблоне со спецтокенами. Если разметка не совпадает с обучающей (не тот формат ролей, забытые <|im_end|>), качество ответов заметно падает, хотя текст «на глаз» выглядит нормально.

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

## Связанные темы

- [Память, планирование и мультиагентные системы](https://ml-book.com/t/agent-memory/)
- [Tool calling: как модель вызывает инструменты](https://ml-book.com/t/tool-calling/)
- [Что такое RAG и зачем он нужен](https://ml-book.com/t/rag-basics/)
- [Промпт-паттерны и structured outputs](https://ml-book.com/t/prompt-patterns/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/context-engineering/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
