fedorthinks

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

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

18 понятий · схема у каждого · шпаргалка в конце

§ 01

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

Карта: 18 понятий в семи группах

Карта метро: сначала видишь линии целиком, потом едешь по станциям.

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

1 · The windowStateless modelContext window2 · The shiftPrompt vs context engineeringMissing context3 · AssemblySystem promptFew-shotContext assembly4 · RelevanceRelevance > completenessContext dilutionCuration5 · BudgetContext budgetTrim & summarizeLong context windows6 · Rot & driftContext rotCompactionRe-anchoring7 · PracticeDeliberate assemblyContext evals
Семь групп понятий — по ним идут главы 1–7.

Как читать каждое понятие

Паспорт: одинаковые поля у всех, поэтому их легко сравнивать.

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

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

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

Языковая модель без состояния — это и есть понятие Stateless Model: она не держит ничего между запросами. Иллюзия чат-бота, что помнит твой разговор, — это просто вся история, переотправляемая каждый раз. Сама модель стартует с чистого листа в каждом вызове, зная лишь то, что прямо перед ней.

Так что «что модель знает?» — это никогда не про модель, а целиком про то, что ты выбрал включить на этот раз.

call 1msg 1call 2msg 1reply 1msg 2call 3msg 1reply 1msg 2reply 2msg 3LLM — statelessstarts from a blank page on every callthe app re-sends the whole history every time — that is the "memory"
Stateless: в каждом вызове приложение заново шлёт всю историю. «Память» чат-бота живёт в твоём коде, а не в модели.
ConceptStateless Model· модель без состояния
Что это

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

Как работает

Чат «помнит» разговор только потому, что приложение заново отправляет всю историю в каждом вызове.

Пример

Третий вопрос в чате уходит в модель вместе с первыми двумя вопросами и двумя ответами.

Подвох

Ждать, что модель «помнит» правило из прошлой сессии, — если его нет в этом вызове, его нет.

Связи

Поэтому всё решает Context Window; растущая история ведёт к Context Budget и Context Rot.

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

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

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

Всё, о чём модель может рассуждать, она рассуждает из окна — что делает окно тем, что ты на самом деле инженеришь.

CONTEXT WINDOW · finite sizeSystem promptConversation historyData / retrieved factsToolsUser messageModelreasons only from thisold chatcompany wikiforgotten rule✗ not in the window → the model simply doesn't know it
Окно — это всё, что видит модель. То, что лежит снаружи (старый чат, вики компании, забытое правило), для неё не существует.
TermContext Window· окно контекста
Что это

Весь текст, который модель видит в одном вызове: инструкции, история, данные, инструменты.

Как работает

Модель рассуждает только из окна. У окна есть максимальный размер в токенах.

Пример

Бот поддержки не знает правил возврата, если их текст не положили в окно этого вызова.

Подвох

«Модель должна это знать» — нет: если этого нет в окне, для модели этого нет.

Связи

Окно собирают через Context Assembly; его размер — это Context Budget.

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

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

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

quality is decided before the model runsRight contextthe right folderSame modelGreat answerMissing contextthe wrong folderSame modelUseless answerbut confidentyou engineer the input, not the model
Та же модель: с нужным контекстом — отличный ответ, без него — уверенно бесполезный. Рычаг — вход, а не модель.

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

§ 02

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

Prompt Engineering vs Context Engineering — формулировка против сборки

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

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

По мере роста приложений формулировка значит меньше, а сборка — больше. Большинство моментов «AI дал плохой ответ» — это не плохая фраза, а модель, которой не хватило контекста, что ей ни разу не дали.

Prompt engineeringInstruction wordinghow you phrase itone part of the windowContext engineeringSystem promptRetrieved factsHistoryExamplesToolsInstructionall the inputs, assembled every call
Prompt engineering — одна часть окна (формулировка). Context engineering — все входы, собранные на каждый вызов.
ConceptContext Engineering· инженерия контекста (против prompt engineering)
Проблема

Качество «подкручивают» формулировкой промпта, а модели не хватает самих фактов.

Идея

Инженерить всё окно: системные правила, факты, историю, примеры, инструменты — на каждый вызов.

Пример

Вместо «ответь подробно и точно!» — положить в окно нужный документ и ключевое правило.

Цена
Нужен код, который собирает окно, и дисциплина решать, что входит.
Когда брать
Как только LLM-фича выходит за пределы одного демо-промпта.
Связи

Prompt engineering — его часть; на практике это Context Assembly и Deliberate Assembly.

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

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

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

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

Bad answerfrom the LLMReword the promptrarely the real causeinstinctCheck the windowwhat did it actually see?doc not retrievedkey rule not includedstale historyfix the context → fixes the bug
Плохой ответ? Инстинкт — переписать промпт. Правильный первый шаг — посмотреть, что было в окне: документ не извлёкся, правило не включили, история устарела.
ConceptMissing Context· нехватка или ошибка контекста
Проблема

Модель отвечает плохо, и команда переписывает промпт снова и снова — без толку.

Идея

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

Пример

Бот советует старый тариф: в окне лежала устаревшая история, а нового прайса не было.

Типичные причины

Документ не извлёкся, правило не включили, устаревшая история запутала.

Связи

Лечится Context Assembly и Curation; проверяется Context Evals.

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

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

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

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

§ 03

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

System Prompt — постоянное поведение против разового запроса

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

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

Положить персону, guardrails и постоянные правила в системный промпт держит их стабильными, пока вопросы пользователя меняются. Это разница между тем, кто модель есть в каждом вызове, и тем, о чём её просят в этот раз.

System promptrole · rules · tone · output formatthe same on every callUser: where's my order?User: can I get a refund?User: open on Sunday?changes every callwho the model IS vs what it is asked THIS time
Системный промпт одинаков в каждом вызове (роль, правила, тон, формат). Пользовательское сообщение меняется каждый раз.
TermSystem Prompt· системный промпт vs user message
Что это

Долговечные инструкции на всё взаимодействие: роль, правила, тон, формат вывода.

Против чего
User message — конкретный запрос этого раза.
Пример

Система: «Ты бот поддержки магазина, отвечай кратко, не обещай скидок». Пользователь: «Где мой заказ?»

Подвох

Смешать постоянные правила с запросом — и они будут «плавать» от вопроса к вопросу.

Связи

Первый кусок в Context Assembly; формат вывода часто лучше показать через Few-shot.

Few-shot Prompting — покажи, а не только скажи

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

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

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

Tell: instructions onlyDescribe the formata paragraph of rulesAlmost rightshape driftsShow: few-shot examplesinput 1ideal output 1input 2ideal output 2input 3ideal output 3new inputsame shape ✓
Слева — описать формат словами и получить «почти то». Справа — показать пары «вход → идеальный выход», и новый вход получает ту же форму.
PatternFew-shot Prompting· обучение на примерах в контексте
Проблема
Модель почти делает нужное, но форма вывода «плывёт».
Идея

Положить в окно 2–3 пары «вход → идеальный выход» — модель повторит шаблон.

Пример

Три примера «отзыв → JSON с тональностью и темой», потом новый отзыв — и ответ в том же JSON.

Цена
Примеры занимают токены в каждом вызове — это часть Context Budget.
Когда брать
Когда важна форма, а абзац инструкций не помогает.
Связи
Один из кусков Context Assembly; дополняет System Prompt.

Context Assembly — собирай окно из частей

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

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

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

System promptHistoryRetrieved factsExamplesToolsUser requestyour codepicks per callthis call's windowSystem promptHistoryRetrieved factsExamplesToolsUser request
Твой код на каждый вызов выбирает куски — системный промпт, историю, факты, примеры, инструменты, запрос — и собирает из них окно.
PracticeContext Assembly· сборка окна из частей
Проблема
Окно — это «просто промпт», и в нём оказывается что попало.
Идея

Собирать окно кодом из частей: system prompt, история, RAG-факты, примеры, инструменты, запрос.

Пример

Вопрос о заказе: правила бота + последние 3 сообщения + данные этого заказа + вопрос. Без всего каталога.

Цена
Каждую часть надо выбрать и обосновать — это работа, а не магия.
Связи

Части — System Prompt, Few-shot; фильтр — Curation; привычка — Deliberate Assembly.

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

§ 04

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

Relevance over Completeness — больше контекста не значит лучше

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

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

Навык — выбрать те немногие вещи, что важны, а не включить всё, что может.

Everything, just in casethe signalsignal diluted · slower · pricierOnly what this call needskey factthe one rulethe requestsharp answer
Слева — всё «на всякий случай»: сигнал тонет в шуме. Справа — только то, что нужно этому вызову: острый ответ.
PrincipleRelevance over Completeness· релевантность важнее полноты
Проблема
В окно кладут всё подряд «на всякий случай».
Идея
Цель — не дать модели всё, а дать ей ровно достаточно.
Пример

Вместо всей базы знаний — три абзаца, которые реально отвечают на этот вопрос.

Цена
Нужно уметь отбирать: хороший поиск, обрезка, решения «что выкинуть».
Связи

Почему — Context Dilution; как — Curation; ещё и экономит Context Budget.

Context Dilution — шум поднимает шанс неверного ответа

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

Длинный, набитый контекст не просто тратит место; он активно ухудшает качество. Это разбавление контекста (context dilution): погребённое в нерелевантном материале, внимание модели размазывается, и в длинных контекстах это измеримо поднимает долю галлюцинаций и ошибок — она уверенно использует то, что и не задумывалось ответом.

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

Modelattention spread thinnoisenoiseright factnoisenearby, wrongnoisemore noise → more chance it latches onto the wrong thing
Внимание модели размазано по шуму — и она цепляется за то, что рядом, но неверно, а не за нужный факт.
ConceptContext Dilution· разбавление контекста шумом
Что это
Нерелевантные токены разбавляют внимание модели к нужному сигналу.
Чем грозит

В длинных контекстах растёт доля галлюцинаций и ошибок: модель берёт не тот кусок.

Пример

В окне 20 похожих документов — модель цитирует соседний договор вместо нужного.

Подвох

Контекст «на всякий случай» кажется безвредным — а может быть самой причиной сбоя.

Связи

Лечится Curation; окно побольше (Long Context Windows) его не отменяет.

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

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

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

everything that might be relevantretrieve only top chunkstrim history to what mattersdrop finished contextExactly enough
Воронка курирования: из всего, что может пригодиться, — только верхние чанки, важная часть истории и ничего отработанного.
PracticeCuration· курирование контекста
Проблема
Окно растёт само: всё, что попало под руку, уходит в модель.
Идея

На каждый вызов: только самые релевантные чанки, обрезанная история, ничего отработанного.

Пример

Поиск находит 50 кусков, в окно идут лучшие 3; вывод инструмента, который уже разобран, — выбрасывается.

Цена
Можно отрезать нужное — поэтому изменения проверяют Context Evals.
Связи

Воплощает Relevance over Completeness; родня Trim & Summarize и Compaction.

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

§ 05

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

Context Budget — окно конечно, и каждый токен стоит

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

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

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

context windowhard capsystemhistoryretrievedrequestfreeLatencyevery call slowerMoneyevery call priciereach token you add is paid for on every single call
Окно имеет жёсткий потолок, а каждый токен в нём оплачивается задержкой и деньгами — в каждом вызове.
ConceptContext Budget· бюджет контекста
Что это

Окно — конечный и платный ресурс: потолок по размеру и цена за каждый токен.

Чем платишь
Задержкой и деньгами — на каждом вызове, умноженном на трафик.
Пример

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

Когда думать
С первого дня, как фича идёт к реальным пользователям.
Связи

Тратится с умом через Trim & Summarize; не отменяется Long Context Windows.

Trim & Summarize — трать окно на то, что отрабатывает место

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

Относиться к окну как к бюджету меняет то, как ты строишь: ты обрезаешь (trim) историю разговора, суммируешь (summarize) старые ходы вместо того, чтобы нести их дословно, и извлекаешь только релевантное сейчас, а не всё, что у тебя есть. Каждый токен должен заработать свой слот.

Это та же дисциплина, что производительность или кэширование, — трать скудный ресурс нарочно, на то, что реально двигает исход.

verbatim historyturn 1turn 2turn 3turn 4turn 5turn 6turn 7turn 8summarizewhat you sendSummaryturns 1–6 in a few linesturn 7turn 8fewer tokens, same meaning
Восемь ходов дословно → короткое резюме первых шести плюс два последних хода как есть. Меньше токенов, тот же смысл.
PracticeTrim & Summarize· обрезать и суммировать историю
Проблема
История разговора растёт, и каждый ход едет в окне дословно.
Идея

Старые ходы — коротким резюме, свежие — как есть; извлекать только то, что нужно сейчас.

Пример

Вместо 40 сообщений чата — резюме «клиент хочет вернуть заказ №…, уже прислал фото» + 2 последних сообщения.

Цена
Резюме может потерять деталь — проверяй на эвалах.
Связи

Тратит Context Budget с умом; в долгих задачах переходит в Compaction.

Long Context Windows — окно побольше не кончает дисциплину

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

Модели продолжают выпускать бо́льшие окна контекста (long context windows) — миллион токенов, больше, — и соблазнительно думать, что проблема бюджета уходит. Не уходит. Окно побольше всё равно стоит дороже и медленнее на токен, и, что критично, более полное окно всё равно разбавляет внимание и приглашает ошибки.

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

usefulusefulusefulsmall windowusefulusefuluseful1M tokens: more room, still costs, still dilutes
Полезного одинаково мало в обоих окнах. Большое окно просто даёт больше места для шума — и за каждый токен всё равно платишь.
TermLong Context Windows· большие окна, 1M+ токенов
Что это
Модели с окнами в миллион токенов и больше.
Соблазн
Думать, что раз всё влезает, курировать больше не нужно.
Пример

Залить весь репозиторий в окно «потому что влезает» — дорого, медленно, и модель путается.

Подвох

Полнее окно — сильнее Context Dilution и больше места для Context Rot.

Связи

Расширяет потолок Context Budget, но не отменяет Relevance over Completeness.

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

§ 06

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

Context Rot — длинные контексты копят устаревшее и противоречивое

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

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

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

goalstep 1goaltool outputfactstep 5goaltool outputfactstale facttool outputstep 10goaltool outputstale factfacttool outputcontradictiontool outputstale factstep 20sharpnoisy — reliability decays
С каждым шагом окно растёт: выводы инструментов, устаревшие факты, противоречия. Цель тонет внизу, надёжность падает.
ConceptContext Rot· гниение контекста, дрейф
Что это

Распад качества по мере того, как накопленный контекст становится шумнее.

Как выглядит

Устаревшие факты рядом со свежими, противоречия, исходная цель уплывает из фокуса.

Пример

Агент на 30-м шаге опирается на версию файла, которую сам же переписал на 10-м.

Подвох
Окно побольше делает хуже: даёт гнили больше места копиться.
Связи
Лечится Compaction и Goal Re-anchoring.

Compaction — сжимай по ходу

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

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

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

raw transcriptstep 1: reasoningtool outputstep 2: reasoningtool outputstep 3: reasoningtool outputstep 4: reasoningtool outputcompressRunning summarygoal + constraintsdecisions madeopen questionscurrent step
Сырой транскрипт (рассуждения + выводы инструментов) сжимается в рабочую сводку: цель, принятые решения, открытые вопросы, текущий шаг.
PracticeCompaction· сжатие контекста по ходу
Проблема
Долгий агент тащит за собой весь транскрипт и начинает путаться.
Идея

Завершённые шаги — в короткое текущее состояние; отработанные выводы инструментов — выбросить.

Пример

Вместо 200 строк лога тестов — «тесты падают в auth.ts, причина: истёкший токен».

Цена
Сжатие может выкинуть важное — сводку надо делать аккуратно.
Связи

Продолжение Trim & Summarize для агентов; в паре с Goal Re-anchoring против Context Rot.

Goal Re-anchoring — переякоривай цель

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

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

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

Taskgoal + limitsTargetwhat you meantrestate goalrestate goalrestate goalDriftedeach turn looks reasonable — the sum driftsre-anchoring: put the goal back in the window at every step
Без якоря каждый шаг выглядит разумно, а сумма уводит в сторону. С якорем цель заново кладётся в окно на каждом шаге.
PracticeGoal Re-anchoring· переякоривание цели
Проблема

За много шагов цель размывается, и модель дрейфует вместе с разговором.

Идея
Заново класть цель и ключевые ограничения в окно на каждом шаге.
Пример

Каждый шаг агента начинается с блока «Цель: перенести API на v2, не меняя публичных методов».

Цена
Пара строк токенов на шаг — дёшево по сравнению с дрейфом.
Связи

Работает вместе с Compaction; первая строка рабочей сводки — это цель.

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

§ 07

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

Deliberate Assembly — строй окно нарочно, а не случайно

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

Ключевая привычка — намеренная сборка (deliberate assembly): относиться к окну как к тому, что ты конструируешь нарочно. Реши, что держит системный промпт, какую историю оставить или суммировать, что извлечь, какие примеры показать, какие инструменты выставить.

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

By accidentfull historyrandom docall 40 toolsold logslast errorOn purpose✓ system prompt: what it holds✓ history: keep or summarize✓ retrieval: what to fetch✓ examples: which to show✓ tools: which to exposeflakyreliable
Случайно — что попало под руку (вся история, все инструменты, старые логи). Нарочно — у каждой части есть решение и причина.
PrincipleDeliberate Assembly· намеренная сборка окна
Проблема
Контекст собирается случайно — и фича работает через раз.
Идея

По каждой части принять решение: system prompt, история, извлечение, примеры, инструменты.

Пример

Агенту дают 5 нужных инструментов вместо всех 40 — и короткую сводку вместо всей истории.

Цена
Время на проектирование окна — окупается надёжностью.
Связи
Привычка поверх Context Assembly; проверяется Context Evals.

Context Evals — меряй контекст, как меряешь код

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

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

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

Change the contextwhat goes in the windowRun the evalsa fixed test setCompare the scorebetter or worse?Keep or revert✗ not: eyeball one output and hope
Цикл: поменял контекст → прогнал эвалы → сравнил счёт → оставил или откатил. А не «глянул на один ответ и понадеялся».
PracticeContext Evals· эвалы для изменений контекста
Проблема

Изменение окна «на глаз» выглядит лучше — а на деле тихо ухудшило качество.

Идея

Каждое изменение контекста — прогон на фиксированном наборе тестов и сравнение счёта.

Пример

Обрезали историю до 5 сообщений — прогнали 100 тестовых диалогов и увидели, стало лучше или хуже.

Цена
Нужно собрать набор тестов и гонять его — это работа.
Связи

Проверяет Curation, Trim & Summarize, Compaction; подробно — курс об эвалах.

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

Как всё связано

Схема метро целиком: теперь видно, где линии пересекаются.

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

Stateless modelContext windowContext engineeringwhat goes into the windowSystem promptFew-shotContext assemblymade ofthree forces that degrade itIrrelevancedilutionBudgetlatency · moneyContext rotdrift over timefixed byfixed byfixed byCurationrelevance firstTrim & summarizespend tokens wiselyCompaction+ re-anchoringContext evalsmeasure every change
Цепочка понятий курса: от модели без состояния к инженерии окна, три силы, что его портят, практики против них и эвалы как проверка.

Шпаргалка: все 18 понятий

Окно

Stateless Modelмодель без состояния

Ничего не помнит между вызовами; «память» чата — это переотправка истории.

Context Windowокно контекста

Весь текст вызова — единственная рабочая память модели. Нет в окне — нет вообще.

Сдвиг

Context Engineeringпротив prompt engineering

Не формулировка запроса, а сборка всей нужной информации в окно.

Missing Contextнехватка контекста

Большинство плохих ответов — не плохая фраза, а то, чего не было в окне.

Сборка окна

System Promptvs user message

Долговечные роль, правила, тон, формат — против разового запроса.

Few-shot Promptingпримеры в контексте

Покажи 2–3 пары «вход → выход» — модель повторит форму.

Context Assemblyсборка из частей

Окно собирается кодом на каждый вызов: правила, история, факты, примеры, инструменты, запрос.

Релевантность

Relevance over Completenessрелевантность важнее полноты

Дать модели не всё, а ровно достаточно.

Context Dilutionразбавление шумом

Нерелевантные токены размазывают внимание и поднимают галлюцинации.

Curationкурирование

Только лучшие чанки, обрезанная история, ничего отработанного.

Бюджет

Context Budgetбюджет контекста

Окно конечно; каждый токен стоит задержки и денег в каждом вызове.

Trim & Summarizeобрезать и суммировать

Старые ходы — резюме, свежие — как есть; каждый токен зарабатывает место.

Long Context Windowsокна 1M+ токенов

Больше места — не разрешение вываливать; шум и цена остаются.

Гниение и дрейф

Context Rotгниение контекста

Долгий контекст копит устаревшее и противоречивое — качество падает.

Compactionсжатие по ходу

Завершённые шаги — в короткую рабочую сводку вместо транскрипта.

Goal Re-anchoringпереякоривание цели

Заново класть цель и ограничения в окно на каждом шаге.

Практика

Deliberate Assemblyнамеренная сборка

У каждой части окна есть решение и причина — не «что попало под руку».

Context Evalsэвалы контекста

Каждое изменение окна проверяется тестами, а не на глаз.

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

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

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