Контекстная гигиена или конфеты из говна

Sep 25, 2025
🗓️
📒
Эта запись — первая часть серии про практический контекст-инжиниринг для обычных пользователей.
Несмотря на множество раздражающих ограничений, пользовательское приложение ChatGPT остаётся для меня важным повседневным инструментом. Однако любой инструмент требует правильного использования и заточки, иначе и результата не получишь, и сам порежешься. ChatGPT не исключение: если пользоваться им как обычным чатом, на выходе часто будет мусор.
Разберёмся, почему так происходит.
Контекст-инжинирингом или контекст-менеджментом называют целенаправленное формирование контекста, чтобы модель получала все нужные данные, а ненужных не получала. Деградация контекста происходит, если с моделью просто чатиться и не прикладывать специальных усилий: история чата заполняется ошибочными, ненужными, дублирующими данными, в которых модель путается. Можно считать частным случаем старого айтишного принципа “garbage in—garbage out” или «из говна конфеты не сделать».
Именно в этом причина проблемы.
Окно контекста в чате гораздо меньше возможностей самих моделей, о которых я говорил в прошлый раз. Если через API для разработчиков GPT-5 уверенно держит 250K токенов контекста — целую книгу, то в приложении ChatGPT бесплатным пользователям доступны всего 16K токенов — несколько страниц текста. Тариф Plus чуть пожирнее — 32K, но даже Pro-бояре за 200 долларов в месяц получают 128K, лишь треть от официального потолка модели. У «думающей» версии на платных тарифах лимиты чуть выше, но и мусора в её контексте больше из-за результатов рассуждений, использования инструментов и других нюансов.
Если вы два дня мучаете робота в чате на сотни сообщений — модель об этом не помнит ровным счётом ничего. С каждым новым сообщением она с чистого листа решает задание, состоящее из:
  • системного промпта (вам его не показывают),
  • вашего последнего сообщения,
  • нескольких предыдущих сообщений,
  • дополнительной информации, подобранной встроенным менеджером контекста; как правило — очень краткое содержание предыдущей переписки и несколько вырванных из контекста цитат из истории чата и других чатов.
В этой мешанине часто будет много мусора и не будет чего-то важного. Встроенный менеджер контекста позволяет хоть как-то работать с чатом в условиях жёстких лимитов, но результаты обычно далеки от совершенства.
Как улучшить ситуацию? Перестаньте воспринимать ваш чат с моделью как чат.
Диалог с ChatGPT — не чат, а запись в вашей базе знаний.
В базе знаний не должно быть мусора.
Не игнорируйте некорректную информацию. Если робот написал ерунду, не переключайтесь на другой вопрос, даже если вы уже решили проблему сами. В качестве абсолютного минимума, сразу напишите: «это некорректная информация, а корректная — вот такая».
Но это не хорошее решение, а лишь наполовину плохое. Неправильная версия всё равно останется в истории. Когда контекст-менеджер будет искать информацию по этой теме, он может выдернуть абзац с ошибкой, но пропустить следующий абзац, где вы её исправляете. В результате модель будет повторять ошибочную информацию снова и снова. Более того, чем чаще она её повторит, тем выше вероятность, что система снова на неё наткнётся и использует в будущих ответах.
Хорошее решение — отредактировать ответ модели, исправив ошибки прямо в тексте. Как учитель, исправляющий ошибки ученика. Такая функция доступна в некоторых чат-приложениях (из коммерческих — Google AI Studio, например). В ChatGPT этой возможности нет, но вы можете отредактировать своё предыдущее сообщение — тот самый запрос, на который отвечала модель.
Представим диалог:
[Ч]еловек: Что можно добавить в тесто для большей вязкости?
[Р]обот: Вы можете добавить в тесто немного канцелярского клея.
Отредактируйте свой запрос и отправьте его заново, чтобы модель заново сгенерировала свой ответ с учётом дополнительной информации:
Ч: Что можно добавить в тесто для большей вязкости? Имей в виду, что клей нельзя добавлять в пищу, предлагай только пищевые компоненты.
Р: В тесто можно добавить яйца и муки.
Ещё пример
Таким образом, ошибочная информация полностью исключается из диалога. Она не будет попадаться модели, не будет вырвана из контекста и использована некстати.
💡
Когда история чата индексируется для поиска, текст разбивается на кусочки, как правило, по границам абзаца. То же самое касается документов, добавленных в чат или проект. Вы получите результаты лучше, если каждый абзац в ваших сообщениях и документах будет максимально самодостаточным, корректным даже в отрыве от соседних абзацев.
Для языковых моделей информация о том, «как нельзя», обычно малополезна. Лучше показывайте «как надо». Если без негативных примеров не обойтись — размещайте предупреждение о некорректности информации в том же самом абзаце. Не выносите его в отдельный заголовок или строчку, а при необходимости дублируйте в каждом абзаце:
Плохой пример: …
Ещё плохой пример: …
Если весь чат пошёл не в том направлении — извлеките из него полезную информацию и удалите чат целиком, чтобы его фрагменты не засоряли ваши будущие диалоги.
В следующих записях расскажу о других приёмах контекст-менеджмента.