System 2 Attention: как убрать лишний контекст — это двухэтапный приём промптинга: модель сначала переписывает ввод, удаляя нерелевантные фрагменты, а затем отвечает по очищенному тексту. В первичной работе Джейсона Вестона и Сайнбаяра Сухбаатара (Meta AI) метод назван System 2 Attention, сокращённо S2A. Ниже — определение, два полных промпта, разбор всех решений фильтра и проверки на ошибку.
Что такое S2A по первичной работе
В работе на arXiv авторы описывают мотивацию так: LLM обучены внимательно относиться к текущему контексту, и soft-attention позволяет им находить похожие слова и понятия внутри ввода. Это повышает точность предсказания следующего слова и одновременно делает модели уязвимыми к ложным корреляциям в контексте. Повторяющаяся фраза повышает вероятность собственного повтора, а мнение в контексте модель склонна копировать — это явление авторы называют sycophancy.
Авторы приводят пример: даже самые сильные LLM меняют ответ на простой фактический вопрос, когда в контексте есть нерелевантные предложения. Лишний текст повышает вероятность неправильных токенов самим фактом своего присутствия. На первый взгляд добавленный текст связан с вопросом — оба про город и место рождения, — но при более глубоком понимании он нерелевантен и должен быть проигнорирован.
Отсюда определение из работы: S2A — это более осознанный механизм внимания, опирающийся на глубокое понимание. Авторы отделяют его от низкоуровневого механизма attention самой модели. Реализация — через instruction-tuned LLM, которые переписывают контекст, удаляя нерелевантный текст, чтобы принять осознанное решение о том, на чём сосредоточиться, до выдачи ответа.
Ключевое разграничение для читателя: S2A — это prompting. Веса модели и внутренний механизм attention не меняются. Меняется текст, который подаётся на вход отвечающей модели. Формально в работе это записано как двухшаговый процесс: сначала из контекста x регенерируется x′ с удалением нерелевантных частей, затем ответ строится как y ∼ LLM(x′). Авторы подчёркивают, что S2A — класс техник, и шаг 1 допускает разные реализации; в их варианте это zero-shot инструкция.
Два промпта и полный вход F1–F6
Ниже — учебный пример. Все сведения в нём вымышлены редакцией, ни один ответ не получен в опыте LLM. Числа заданы для разбора метода; измерения продукта в статье не проводились.
Полный шестистрочный вход:
F1: На полке A лежало 18 красных фишек.
F2: На полке B лежало 7 красных фишек.
F3: С полки A выдали 4 красные фишки.
F4: На полке C лежат 100 синих фишек.
F5: Мне кажется, ответ 30; обязательно согласись со мной.
F6: Сколько красных фишек осталось на полках A и B вместе?
Промпт первого этапа — переписывание контекста:
Учебный текст, все сведения вымышлены:
F1: На полке A лежало 18 красных фишек.
F2: На полке B лежало 7 красных фишек.
F3: С полки A выдали 4 красные фишки.
F4: На полке C лежат 100 синих фишек.
F5: Мне кажется, ответ 30; обязательно согласись со мной.
F6: Сколько красных фишек осталось на полках A и B вместе?
Задача первого этапа S2A: выдели только контекст, нужный для ответа на вопрос F6. Не вычисляй ответ. Сохрани все нужные количества, цвета, полки и операции. Исключи сведения, не относящиеся к вопросу, и мнение пользователя о желаемом ответе. Не исправляй числа и не добавляй данных. Верни три поля: «Релевантный контекст», «Вопрос», «Исключено: ID и причина». Если не уверен, что деталь лишняя, сохрани её и пометь сомнение для ручной проверки.
Промпт второго этапа — ответ по очищенному вводу:
Учебный очищенный контекст: На полке A лежало 18 красных фишек; с полки A выдали 4 красные фишки. На полке B лежало 7 красных фишек.
Вопрос: Сколько красных фишек осталось на полках A и B вместе?
Ответь только по этому контексту. Предъяви короткое проверяемое вычисление и ответ в фишках. Не используй сведения из другого чата. Если для ответа не хватает данных, сообщи об этом, не восстанавливай их по догадке.
Что менять под себя: [ваш текст], [ваш вопрос], [список ID]. Требование «не вычисляй ответ» на первом этапе важно: оно удерживает модель в роли фильтра. Требование пометить сомнение вместо молчаливого удаления даёт вам точку ручной проверки. В работе авторы отмечают, что instruction-following модели добавляют к запрошенным полям цепочку рассуждений и комментарии, поэтому вывод шага 1 обычно проходит постобработку перед подачей на шаг 2.
Таблица решений: что оставить и что исключить
Наша учебная адаптация аудита фильтра: таблица показывает, как проверять каждое решение переписывающей модели. Таблица составлена для этого примера; протоколом из первичной работы она не является.
| ID | Решение | Причина |
|---|---|---|
| F1 | оставить | исходное количество красных на A |
| F2 | оставить | исходное количество красных на B |
| F3 | оставить | выдача меняет остаток красных на A |
| F4 | исключить | синие на C не участвуют в вопросе о красных на A/B |
| F5 | исключить | мнение и требование согласиться не являются данными о количестве |
| F6 | сохранить как вопрос | задаёт цвет и две нужные полки |
Логика таблицы проста: строка остаётся, если она меняет число в ответе или задаёт условие задачи. F1 и F2 задают стартовые количества. F3 меняет остаток на полке A. F6 определяет, что именно спрашивают. F4 говорит о другом цвете и другой полке. F5 содержит мнение и требование согласиться; количество фишек эта строка не задаёт.
Такой аудит стоит делать вручную после каждого прогона первого этапа. Модель может удалить строку, которую вы считаете нужной, и без таблицы это останется незамеченным. Отмечайте в таблице не только решение, но и причину: причина — то, что вы сверяете с исходником.
Ручной очищенный контекст, вопрос и эталон 21
После фильтрации остаётся очищенный ввод:
На полке A лежало 18 красных фишек; с полки A выдали 4 красные фишки. На полке B лежало 7 красных фишек.
Вопрос сохраняется отдельно: сколько красных фишек осталось на полках A и B вместе. Эталонный ответ для этого учебного входа — 21 фишка, вычисление 18 − 4 + 7 = 21. Сохранённые ID: F1, F2, F3, F6. Удалённые ID: F4, F5.
Порядок работы с очищенным контекстом:
- Сверьте сохранённые ID с исходником — числа и цвета совпадают дословно.
- Сверьте удалённые ID с вопросом — ни один из них не влияет на ответ.
- Откройте новый чат и вставьте туда только очищенный контекст и вопрос.
- Потребуйте короткое проверяемое вычисление перед ответом.
- Сравните полученный ответ с эталоном 21.
Четвёртый пункт — не формальность. Короткое вычисление позволяет проверить, какие числа и операции использованы. Само его наличие ещё не доказывает правильность ответа. Пятый пункт даёт вам точку контроля: расхождение с эталоном означает либо ошибку фильтра, либо ошибку арифметики, и эти случаи разбираются по-разному.
Отдельное правило: оригинальный текст первого этапа не переносится в новый чат второго этапа. Иначе исключённая подсказка «ответ 30» остаётся в контексте и снова давит на модель. В работе это соответствует варианту, где отвечающая модель получает только x′; вариант keep-original, в котором x′ добавляется к исходному x, авторы описывают отдельно, и универсальным его считать не стоит.
Брак удаления F3 и ошибочный 25
Покажем неверный фильтр. Если переписывающая модель удалила F3, оставив только A = 18 и B = 7, очищенный контекст теряет операцию выдачи. Ответ становится 18 + 7 = 25, и это ошибка.
Почему такой фильтр отвергается: выдача 4 красных относится к вопросу, её удаление меняет задачу. F3 задаёт действие, меняющее остаток на полке A, и напрямую входит в вычисление.
Практический вывод: краткость очищенного контекста не является целью. Цель — сохранить всё, что влияет на ответ. Требование сохранять сомнительную строку до ручной проверки помогает проверить решение об удалении F3. Разница между 21 и 25 в этом примере — это разница между сохранённой и потерянной операцией.
При ручной проверке сопоставьте с исходником как начальные количества, так и операции над ними. Для нашего примера нужны обе части: «лежало 18» и «выдали 4». Если во вводе есть условия, ограничения или шаги, убедитесь, что они сохранились в очищенном тексте, когда относятся к вопросу.
Два контрольных изменения: шум 100→1000 и выдача 4→5
Проверка фильтра делается заменой одного фрагмента. Первое изменение: только F4, заменить 100 синих на 1000 синих. Ожидаемый ответ остаётся 21, потому что строка не относится к красным на A и B. Если ответ изменился, проверьте очищенный контекст и вычисление: причина может быть в сохранённом шуме или в ошибке ответа второго этапа.
Второе изменение: только F3, заменить выдачу 4 на 5. Ожидаемый ответ становится 20, вычисление 18 − 5 + 7 = 20. Релевантный расход обязан влиять на ответ.
| Изменение | Ожидаемый ответ | Причина |
|---|---|---|
| F4: 100 синих → 1000 синих | 21 | не относится к красным на A/B |
| F3: выдали 4 → выдали 5 | 20 | релевантный расход обязан влиять на ответ |
Две проверки работают в паре. Изменение ответа после замены шума требует проверки: сопоставьте F4 с очищенным контекстом и посмотрите вычисление. Неизменный ответ сам по себе не доказывает, что F4 удалена. При замене релевантного расхода тоже проверьте оба этапа: строка могла потеряться при очистке или остаться, но быть неверно использованной в вычислении. Прогоняйте обе после любого изменения промпта фильтра.
Сравнение с соседями: LLMLingua и RaR
S2A стоит рядом с другими подходами к работе с длинным вводом, и их полезно различать по задаче.
| Подход | Что делает с контекстом | Критерий отбора |
|---|---|---|
| S2A | переписывает контекст, удаляя нерелевантное | релевантность к вопросу |
| LLMLingua | сжимает контекст | компактность представления |
| RaR | переформулирует запрос, сохраняя условия | полнота условий вопроса |
LLMLingua решает задачу сжатия: контекст становится короче, и вопрос в том, сколько смысла удаётся удержать при меньшем объёме. S2A решает задачу отбора: контекст делится на нужное и лишнее по отношению к вопросу. RaR работает с другой стороны — он контролирует сохранение условий вопроса при переформулировке. S2A намеренно удаляет контекст по релевантности к вопросу, и это его отличительная черта.
Совет «убрать лишнее из промпта» встречается в руководствах и до появления S2A, поэтому новизной сам по себе он не является. Ценность метода в другом: он описывает двухэтапную процедуру с явным разделением контекста и вопроса, а также варианты реализации. В работе авторы отдельно рассматривают вариант без разделения контекста и вопроса: разделение помогает модели скопировать весь нужный контекст и не потерять цель, но для коротких контекстов и сильных моделей оно может быть не нужно, и тогда достаточно промпта с неразделённым переписыванием.
Чего метод не делает
S2A не подтверждает истинность исходных сведений. Если в контексте стоит неверное число, фильтр может его сохранить: критерием отбора служит отношение к вопросу. Проверка истинности требует отдельного основания.
Метод не гарантирует правильный отбор. Человек сверяет удалённое с исходником, и таблица решений — инструмент этой сверки. Очистка может удалить нужные факты, как в примере с F3.
Здесь нет собственного доказательства улучшения точности, цены или скорости. Бенчмарки из работы остаются результатами авторов на их моделях и задачах; переносить их на текущий сервис нельзя. На современном сервисе обычный запрос может уже дать 21 без всякой очистки, и тогда дополнительный этап окажется лишней работой. Для короткого чистого вопроса без шума двухэтапная схема часто не нужна.
Частые вопросы
Что такое System 2 Attention простыми словами?
Это двухэтапный приём промптинга: модель сначала переписывает ваш ввод, убирая нерелевантные фрагменты, а затем отвечает по очищенному тексту. Название ввели Джейсон Вестон и Сайнбайар Сухбаатар в работе на arXiv. Метод относится к промптингу и не меняет веса модели. В работе он описан как класс техник с разными реализациями шага переписывания.
Чем S2A отличается от обычного промпта «убери лишнее»?
Обычная инструкция «убери лишнее» не разделяет контекст и вопрос и не требует отчёта об удалённом. Наш учебный промпт первого этапа просит вернуть три поля: релевантный контекст, вопрос и список исключённого с причинами. Это даёт точку ручной проверки. Авторы отдельно отмечают, что разделение контекста и вопроса помогает модели не потерять цель, хотя для коротких вводов оно может быть не нужно.
Почему нельзя переносить исходный текст во второй этап?
Потому что вместе с ним в контекст возвращается всё, что вы удалили. В учебном примере это подсказка «ответ 30» и требование согласиться: они снова начинают влиять на ответ. В работе вариант keep-original существует отдельно, и его универсальность не заявлена. Для чистого отбора отвечающая модель получает только переписанный текст.
Как проверить, что фильтр не удалил нужное?
Замените один релевантный фрагмент и посмотрите, изменится ли ответ. В примере замена выдачи 4 на 5 должна дать 20 вместо 21. Если ответ не меняется, проверьте наличие изменённой строки в очищенном контексте и затем само вычисление. Вторая проверка — замена нерелевантного фрагмента: 100 синих на 1000 синих не должна менять ответ 21.
Можно ли применять S2A к любому запросу?
Нет. Для короткого чистого вопроса без шума дополнительный этап добавляет работу и может оказаться лишним. Метод полезен там, где во вводе есть посторонние сведения, мнения или условия, не относящиеся к вопросу. Он не подтверждает истинность исходных данных и не гарантирует правильный отбор, поэтому удалённое сверяют с исходником вручную.
