Экспресс-курс · No. 26

LLM блестяща и пуста: между вызовами она не помнит ничего, а в каждом вызове знает только текст, что ты кладёшь перед ней. Инженерия контекста — это дисциплина собирать в это окно ровно нужный текст: инструкции, факты, историю, инструменты — не больше и не меньше. Здесь и живёт качество LLM, и это в основном не про хитрую формулировку.

Только суть · Один образ на идею · Инженерия важнее магии

§ 01

Всё в этом курсе следует из одного факта о том, как работает языковая модель: у неё нет памяти, и вся её осведомлённость в любом вызове — это текст, что ты ей шлёшь. Пойми это, и остальное очевидно.

Модель не помнит ничего между вызовами

Блестящий консультант с полной амнезией — на каждой встрече ты заново вручаешь ему все документы, потому что с прошлого раза он не помнит ничего.

Языковая модель без состояния (stateless): она не держит ничего между запросами. Иллюзия чат-бота, что помнит твой разговор, — это просто вся история, переотправляемая каждый раз. Сама модель стартует с чистого листа в каждом вызове, зная лишь то, что прямо перед ней. Так что «что модель знает?» — это никогда не про модель, а целиком про то, что ты выбрал включить на этот раз.

Окно контекста — её единственная рабочая память

Работник, что может действовать только по заметкам, приколотым к доске перед ним, — сотри доску, и будто ничего и не было.

Окно контекста (context window) — это блок текста, что модель видит в вызове: твои инструкции, разговор, любые данные, инструменты. Это вся её рабочая память, и у него конечный размер. Если факта, правила или прошлого сообщения нет в окне, модель его просто не знает. Всё, о чём модель может рассуждать, она рассуждает из окна — что делает окно тем, что ты на самом деле инженеришь.

Так что качество решается тем, что ты кладёшь

Гений, отвечающий только из той единственной папки, что ты ему вручил, — дай нужную папку, и ответ блестящ; дай не ту, и он уверенно бесполезен.

Поскольку модель работает только из окна, качество её вывода в основном решается до того, как модель запустится, — тем, что ты собрал. Одна и та же модель даёт отличный ответ или безнадёжный целиком в зависимости от того, был ли нужный контекст перед ней. Это переосмысляет всю работу: ты не выманиваешь интеллект из модели, ты курируешь то, что ей дают увидеть. Это курирование и есть инженерия контекста.

Модель без состояния и знает только своё окно контекста. Качество вывода решается тем, что ты собираешь в это окно, — так что окно, а не модель, ты и инженеришь.

§ 02

Люди говорят об «инженерии промптов», но по мере того как приложения становятся серьёзными, настоящее ремесло переезжает в другое место — от формулировки запроса к сборке нужной информации вокруг него. Этот сдвиг — сердце курса.

Формулировка запроса против сборки контекста

Юрист побеждает не хитрой фразой, а вручая судье ровно нужные документы, в нужном порядке, без ничего лишнего, — дело в бумагах, а не в речи.

Инженерия промптов (prompt engineering) — это про то, как ты формулируешь инструкцию. Инженерия контекста (context engineering) — бо́льшая работа: собрать всю информацию, что нужна модели, — нужные факты, историю, примеры, инструменты — в окно на каждый вызов. По мере роста приложений формулировка значит меньше, а сборка — больше. Большинство моментов «AI дал плохой ответ» — это не плохая фраза, а модель, которой не хватило контекста, что ей ни разу не дали.

Большинство проблем качества — это проблемы контекста

Ассистент, что даёт неверный ответ, потому что ты забыл упомянуть одно ограничение, что меняло всё, — не глупый, просто неосведомлённый.

Когда LLM-фича недорабатывает, инстинкт — подкрутить формулировку промпта или винить модель. Куда чаще настоящая причина — отсутствующий или неверный контекст: нужный документ не извлёкся, ключевое правило не включили, устаревшая история запутала. Прежде чем что-то переформулировать, спроси, что у модели реально было перед ней. Починка контекста чинит больше багов, чем починка формулировки когда-либо.

Модель хороша ровно настолько, насколько её вход

Лучший повар может готовить только из ингредиентов на столе — вручи ему не те, и мастерство не спасёт блюдо.

Способная модель с плохим контекстом проигрывает слабой модели с отличным контекстом. Поэтому инженерия контекста, а не выбор модели, обычно самое рычажное место тратить усилия: вывод той же модели дико колеблется с тем, что ты ей скармливаешь. Ты не получаешь ответ лучше, требуя сильнее, — ты получаешь его, кладя в окно лучший, острее, релевантнее материал. Вход — это рычаг.

Инженерия промптов — это формулировка; инженерия контекста — это сборка нужной информации. Вторая — где живёт качество, а большинство плохих ответов это нехватка контекста, а не плохая фраза.

§ 03

Часть того, что идёт в окно, долговечна, а часть — на каждый запрос, и несколько конкретных ингредиентов делают бо́льшую часть работы. Знать, что это, делает сборку контекста конкретной.

Системный промпт задаёт постоянное поведение

Постоянная политика ресторана — «мы вегетарианские, закрываемся в десять» — против конкретного заказа на сегодня. Одно обрамляет всё; другое — это просьба.

Системный промпт (system prompt) держит долговечные инструкции, что применяются ко всему взаимодействию: роль модели, правила, которым следовать, тон, формат вывода. Пользовательское сообщение (user message) — это конкретный запрос. Положить персону, guardrails и постоянные правила в системный промпт держит их стабильными, пока вопросы пользователя меняются. Это разница между тем, кто модель есть в каждом вызове, и тем, о чём её просят в этот раз.

Покажи, а не только скажи: few-shot примеры

Научить кого-то формату, показав три готовых примера, быстрее и яснее, чем описывать словами и надеяться, что он верно вообразит.

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

Собирай окно из частей

Упаковать портфель на встречу: повестка, два релевантных отчёта, заметка об ограничениях — выбрано нарочно, а не весь твой шкаф документов, опрокинутый внутрь.

Реальное окно контекста собирается из кусков на каждый вызов: системный промпт, релевантная история, извлечённые факты (RAG), примеры, доступные инструменты и наконец запрос пользователя. Инженерия контекста — это решать, нарочно и каждый раз, какие куски входят, а какие остаются снаружи. Думать об окне как о том, что ты строишь из частей, а не просто как о промпте, что печатаешь, — вот ментальный сдвиг, после которого всё остальное щёлкает.

Системный промпт задаёт долговечное поведение; пользовательское сообщение — это запрос; few-shot-примеры показывают нужную форму. Окно собирается из этих частей, нарочно, на каждый вызов.

§ 04

Крупнейшая ошибка новичка в инженерии контекста — думать, что больше лучше. Верно обратное: каждый нерелевантный токен, что ты добавляешь, активно делает ответ хуже.

Больше контекста — не лучше контекст

Брифинг в одну острую страницу бьёт свалку в 200 страниц — читатель находит сигнал вместо того, чтобы в нём тонуть, и решает быстрее и лучше.

Соблазнительно напихать в окно всё возможно релевантное «на всякий случай». Но больше — не лучше, обычно хуже. Каждый токен соревнуется за внимание модели, и нерелевантный материал разбавляет сигнал, тянет модель к тому, что рядом, и делает вероятнее, что она зацепится не за то. Навык — выбрать те немногие вещи, что важны, а не включить всё, что может.

Шум поднимает шанс неверного ответа

Спрячь один релевантный факт внутри горы в основном нерелевантной бумаги — и даже внимательный читатель начнёт цитировать не ту страницу: шум сам и вызывает ошибку.

Длинный, набитый контекст не просто тратит место; он активно ухудшает качество. Погребённое в нерелевантном материале, внимание модели размазывается, и в длинных контекстах это измеримо поднимает долю галлюцинаций и ошибок — она уверенно использует то, что и не задумывалось ответом. Добавление контекста «на всякий случай» может быть ровно тем, что вызывает сбой. Меньше, острее контекст — это надёжнее контекст.

Курируй безжалостно под этот вызов

Хороший редактор не добавляет — он режет, вручая тебе лишь те строки, что отрабатывают своё место на этой странице.

Дисциплина — безжалостное курирование: для этого конкретного вызова включи те немногие вещи, что модели правда нужны, и оставь всё остальное снаружи. Это значит извлекать только самые релевантные чанки, обрезать историю до важного, выбрасывать контекст, что сделал своё дело. Релевантность важнее полноты — управляющий принцип: ты не пытаешься дать модели всё, ты пытаешься дать ей ровно достаточно.

Больше контекста — не лучше: нерелевантные токены разбавляют внимание и поднимают галлюцинации. Курируй безжалостно: дай модели ровно то, что нужно этому вызову, и ничего больше.

§ 05

Помимо качества, окно — конечный, оплачиваемый ресурс. Относиться к нему как к скудному бюджету, а не бесконечной свалке, — вот что отделяет игрушку от продукта.

Окно конечно, и каждый токен стоит

Чемодан с пределом веса и платой за килограмм — ты пакуешь то, что реально понадобится, а не весь гардероб, потому что есть жёсткий потолок и цена.

У окна контекста максимальный размер, и каждый токен в нём стоит задержки и денег — бо́льшие контексты медленнее и дороже на каждом вызове. Так что контекст — не свободное место для заполнения; это бюджет, что ты тратишь. Фича, что набивает окно на каждый запрос, медленна и дорога в масштабе, ещё до того как страдает качество. Окно — это ресурс для распределения, а не пустота для заполнения.

Трать его на то, что отрабатывает место

Тесный бюджет поездки вынуждает реальные выборы — ты тратишь на то, что важно для поездки, и пропускаешь остальное, и поездка лучше от этой дисциплины.

Относиться к окну как к бюджету меняет то, как ты строишь: ты обрезаешь историю разговора, суммируешь старые ходы вместо того, чтобы нести их дословно, и извлекаешь только релевантное сейчас, а не всё, что у тебя есть. Каждый токен должен заработать свой слот. Это та же дисциплина, что производительность или кэширование, — трать скудный ресурс нарочно, на то, что реально двигает исход.

Окно побольше не кончает дисциплину

Аренда грузовика побольше не значит, что надо набить его хламом, — больше ёмкости это место для большего числа полезных вещей, а не лицензия перестать паковать аккуратно.

Модели продолжают выпускать бо́льшие окна контекста — миллион токенов, больше, — и соблазнительно думать, что проблема бюджета уходит. Не уходит. Окно побольше всё равно стоит дороже и медленнее на токен, и, что критично, более полное окно всё равно разбавляет внимание и приглашает ошибки. Больше ёмкости — не разрешение вываливать; это просто больше места, что тебе всё равно надо тратить с умом. Дисциплина курирования окна переживает любой рост размера.

Окно конечно, и каждый токен стоит задержки и денег. Трать его как бюджет — обрезай, суммируй, извлекай только нужное — и не дай окну побольше кончить дисциплину.

§ 06

В длинных, многошаговых взаимодействиях контекст не просто лежит — он накапливается и распадается. Управлять этим распадом — самая трудная и важная часть инженерии контекста в масштабе.

Длинные контексты накапливают устаревшее, противоречивое состояние

Игра в испорченный телефон вдоль длинной цепочки — к концу сообщение тихо мутировало, и все уверенно повторяют что-то слегка неверное.

За долгий разговор или многошаговую задачу агента окно наполняется историей: ранние ходы, выводы инструментов, недоделанное рассуждение. Со временем эта куча становится неряшливой — устаревшие факты сидят рядом со свежими, противоречия накапливаются, исходная цель уплывает из фокуса. Индустрия зовёт получающийся распад качества гниением контекста (context rot): та же модель становится менее надёжной по мере того, как её собственный накопленный контекст становится шумнее.

Сжимай по ходу

Хороший конспектист не держит каждое слово долгого совещания — он дистиллирует его до решений и открытых вопросов, неся вперёд вывод, а не транскрипт.

Лекарство — активно сжимать контекст по мере роста: суммировать завершённые шаги в короткое текущее состояние вместо того, чтобы тащить вперёд весь транскрипт, выбрасывать выводы инструментов, как только извлёк важное, держать тугую рабочую сводку, а не сырую историю. Модель несёт вывод, а не каждое слово, что его произвело. Так долгоиграющие агенты остаются связными — они управляют своим контекстом, а не дают ему копиться.

Переякоривай цель

На долгом, извилистом походе ты регулярно перепроверяешь карту и пункт назначения — иначе дрейфуешь, по одному разумно выглядящему повороту за раз, прочь оттуда, куда метил.

За много шагов исходная задача размывается под весом всего, что случилось с тех пор. Так что ты её переякориваешь: переформулируй цель и ключевые ограничения в окне на каждом шаге, чтобы модель оставалась нацелена на настоящую мишень, а не дрейфовала с разговором. Окно побольше делает это хуже, а не лучше, — оно даёт дрейфу больше места копиться. Активное управление, а не сырая ёмкость, — вот что держит долгую задачу на курсе.

Длинные контексты гниют — устаревшее, противоречивое состояние накапливается и качество распадается. Сжимай завершённые шаги в текущую сводку и переякоривай цель, потому что окно побольше лишь даёт дрейфу больше места.

§ 07

Инженерия контекста, сделанная хорошо, — это намеренная сборка, измеренная, как и всё остальное. Вся практика сводится к тому, чтобы строить окно нарочно и проверять, что это помогло.

Строй окно нарочно, а не случайно

Повар выкладывает блюдо нарочно — каждый элемент помещён по причине — вместо того, чтобы наскрести на тарелку что попало со стола.

Ключевая привычка — относиться к окну как к тому, что ты конструируешь нарочно: реши, что держит системный промпт, какую историю оставить или суммировать, что извлечь, какие примеры показать, какие инструменты выставить. Многие LLM-приложения собирают контекст случайно — что попало под руку, то и шлётся. Строить его нарочно, с обоснованной каждой частью, — вот бо́льшая часть того, что отделяет надёжную фичу от флакающей.

Меряй контекст, как меряешь код

Ты не гадаешь, помогло ли изменение, — ты тестируешь. То же и с тем, что кладёшь в окно: ответ стал лучше или хуже, и ты должен знать какой.

Изменения контекста — реальные изменения, так что проверяй их: когда подстраиваешь, что идёт в окно — больше примеров, другое извлечение, обрезанная история, — проверь эффект эвалами, не просто окинь глазом один вывод. Инженерия контекста без измерения — это настройка на ощупь, и так «безобидное» добавление тихо ухудшает качество. Относись к содержимому окна как к тому, что тестируешь, — та же дисциплина, что курс об эвалах.

Прежде чем выкатывать LLM-фичу
  • Всё ли, что нужно модели, в окне — или ты ждёшь, что она будет знать то, что ты ей не дал? - Системное против пользовательского — долговечные правила в системном промпте, запрос в пользовательском сообщении? - Помогут ли примеры — это случай, где few-shot бьёт больше инструкций? - Каждый ли кусок релевантен — или набивка разбавляет внимание и поднимает ошибки?
  • В бюджете ли ты — обрезаешь и суммируешь, а не вываливаешь всё? - Для долгих задач — сжимаешь ли и переякориваешь ли против гниения контекста?
Слова, которыми ты теперь владеешь
  • stateless / окно контекста — модель не помнит ничего; окно — её единственная рабочая память.
  • prompt engineering / context engineering — формулировка запроса против сборки информации. - системный промпт / пользовательское сообщение — долговечное постоянное поведение против конкретного запроса. - few-shot — учить форму вывода, показывая примеры в контексте. - релевантность важнее полноты — курировать те немногие вещи, что важны, а не пихать всё. - бюджет контекста — окно конечно, и каждый токен стоит задержки и денег. - context rot / дрейф — длинные контексты накапливают устаревшее состояние и распадаются; сжимай и переякоривай.
Признаки, что ты инженеришь контекст хорошо
  • Ты чинишь плохие ответы, проверяя, что в окне, прежде чем переформулировать промпт. - Долговечные правила живут в системном промпте; ты тянешься к few-shot-примерам, когда важна форма. - Ты курируешь безжалостно — релевантность важнее полноты — вместо набивки окна.
  • Ты относишься к окну как к бюджету, обрезая и суммируя, а не вываливая. - Для долгих задач ты сжимаешь и переякориваешь и меряешь изменения контекста вместо гадания.

Инженерия контекста — это намеренная сборка окна: нужные правила, нужные факты, нужные примеры, скурированные до релевантности, удержанные в бюджете и управляемые против гниения, — построенные нарочно и измеренные, а не напечатанные и понадеянные.

Конец экспресс-курса · 7 глав · инженерия важнее магии

Дальше — практика: возьми LLM-фичу, что иногда даёт плохие ответы, и, прежде чем трогать формулировку промпта, залогируй ровно то, что было в окне на плохом вызове, — обычно найдёшь отсутствующий, устаревший или нерелевантный контекст, а не плохую фразу. Потом почини сборку: добавь недостающий факт, вырежь шум, суммируй историю. Дисциплина щёлкает в тот миг, как лучше построенное окно бьёт более хитрый промпт. Но держи одну мысль выше прочих: модель знает только то, что в окне. Перестань выманивать из неё интеллект и начни инженерить то, что ей дают увидеть, — там качество и было всё это время.