3,583 papers
arXiv:2605.26788 74 26 мая 2026 г. FREE

SeDT: аннотирование истории диалога — способ вернуть потерянный контекст в многоходовых разговорах

КЛЮЧЕВАЯ СУТЬ
Трансформеры архитектурно слепы на середину разговора — хорошо помнят начало и конец, середину теряют. Поэтому когда вы собираете требования постепенно, ход за ходом, модель теряет до 40% качества по сравнению с тем, как если бы вы написали всё сразу. SeDT позволяет явно разметить каждое сообщение истории до финального запроса — и вернуть потерянный контекст. Фишка: добавь один шаг перед финальным вопросом — "разметь что критично" — и модель сначала называет вслух всё важное, а потом пишет ответ. Ошибки и пропущенные условия видны до финального результата, а не после.
Адаптировать под запрос

TL;DR

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

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

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


🔬

Схема метода

ШАГ 1: Оцени каждый ход по трём критериям (один промпт)
        → Смысловая близость к цели
        → Совпадение ключевых слов
        → Позиция в разговоре (средина важнее!)
        → Пометь как CONFIRMED / UNCERTAIN

ШАГ 2: Передай финальный запрос + аннотированную историю
        → Формат: [CONFIRMED: ход 1] [UNCERTAIN: ход 2]...
        → Финальный вопрос

(опционально) ШАГ 3: Если много UNCERTAIN — запроси проверку
        → Модель перечитывает и сравнивает с CONFIRMED-ограничениями

Оба шага выполняются в одном чате. Аннотация происходит в одном отдельном запросе перед финальным.


🚀

Пример применения

Задача: Вы три дня переписывали с Claude бриф для лендинга Яндекс Маркета. В разных сообщениях — разные условия: аудитория, тон, УТП, длина, запрет на скидочную риторику. Теперь хотите финальный текст.

Промпт:

Прочитай весь наш диалог выше.

Перед тем как писать текст — сделай следующее:

Для каждого моего сообщения укажи:
[КРИТИЧНО] — если оно содержит требование, ограничение или ключевое условие к тексту
[ФОНОВОЕ] — если это обсуждение, уточнение, одобрение без новых условий

Затем выпиши отдельно все [КРИТИЧНО]-условия единым списком.

После этого — напиши текст лендинга, строго соблюдая КАЖДОЕ [КРИТИЧНО]-условие.
Если какое-то [КРИТИЧНО]-условие противоречит другому — скажи об этом перед текстом.

Результат: Модель сначала явно разметит историю — вы увидите, что она «заметила» и что пометила критичным. Затем составит сводный список всех ограничений. Только потом напишет текст. Это ключевое: ошибки видны до финального результата. Если модель пропустила важное условие — вы видите это в разметке и можете поправить до ответа.


🧠

Почему это работает

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

Сильная сторона LLM: модель отлично следует явным инструкциям в тексте. Если написать «учти ТОЛЬКО [КРИТИЧНО]-условия» — она будет это делать. Ей не нужно угадывать важность. Достаточно сказать прямо.

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

Рычаги управления: - Метки (КРИТИЧНО / ФОНОВОЕ) — замените на любые свои: ОБЯЗАТЕЛЬНО / ЖЕЛАТЕЛЬНО / НЕТ - Дублирующий вопрос — добавьте «Если нашёл противоречия между критичными условиями — укажи их» → ловите конфликты до написания - Уточнение цели — чем точнее вы описываете финальный результат в начале, тем точнее модель оценивает важность каждого хода


📋

Шаблон промпта

Прочитай весь наш диалог выше.

Прежде чем выполнять {задача} — разметь историю:

Для каждого моего сообщения укажи:
[КРИТИЧНО] — содержит требование, ограничение или ключевое условие к {задача}
[ФОНОВОЕ] — обсуждение, уточнение, одобрение без новых условий

Затем выпиши все [КРИТИЧНО]-условия единым списком.

Если между [КРИТИЧНО]-условиями есть противоречия — укажи их отдельно.

После разметки выполни {задача}, строго соблюдая все [КРИТИЧНО]-условия.

Что подставлять: - {задача} — финальный результат который вам нужен: «напиши текст», «составь план», «сформулируй ТЗ»


🚀 Быстрый старт — вставь в чат:

Вот шаблон для разметки длинного диалога перед финальным ответом. 
Адаптируй под мою задачу: [твоя задача]. Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Субъективные задачи: Метод лучше всего работает там, где есть чёткие ограничения — технические требования, конкретные цифры, явные запреты. Для «сделай текст живым» или «хочу что-то интересное» разметка теряет точность — критерии размытые.

⚠️ Очень короткий диалог: Если у вас 2-3 сообщения, разметка избыточна. Техника для разговоров от 5+ ходов, где условия действительно распределены по времени.

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


🔍

Как исследовали

Команда опиралась на бенчмарк «Lost in Conversation» от Microsoft: 15 топовых LLM, 200 000 симулированных диалогов, шесть типов задач. В каждом сценарии одно и то же задание выдавалось двумя способами: всё сразу vs по кусочкам за несколько ходов. Разница — минус 39% при пошаговой подаче. Любопытная деталь: лучший результат (90й перцентиль) падал лишь на 16%, зато разброс результатов (ненадёжность) удваивался (+112%). Модель не тупела в целом — она становилась непредсказуемой.

Авторы SeDT проверили свой метод на трёх моделях — GPT-4o-mini, Gemini 2.5 Flash, Llama 3.3-70B — и трёх типах задач: математика, API-вызовы, код. Во всех девяти комбинациях SeDT обогнал плоскую историю. Самый впечатляющий результат у Gemini: в задачах с API-вызовами +37.7 процентных пункта — модель вернула больше половины «потерянной» производительности. Интересно, что позиционный сигнал (бустить средину) оказался сильнее семантического в одиночку — прямое подтверждение U-образной слепоты к середине.


💡

Адаптации и экстраполяции

🔧 Техника: Превентивный якорь в начале сессии → модель сама отмечает важное по ходу

Вместо того чтобы делать разметку в конце — попросите модель делать это в режиме реального времени:

Мы будем строить {задача} в несколько шагов. 
По ходу нашего разговора — после каждого моего сообщения добавляй в конце:
ЗАФИКСИРОВАНО: [перечисли все критичные условия от начала до сейчас]

В финальном ответе используй только зафиксированные условия.

Это превращает каждый ход в явную точку синхронизации. Вы видите что модель «запомнила» — прямо в процессе, а не только в конце.


🔧 Техника: Контраст-разметка для сложных ТЗ

Если у вас смешаны «обязательно», «желательно» и «нельзя» — трёхуровневая разметка работает точнее чем двухуровневая:

Разметь наш диалог на три категории:
[ОБЯЗАТЕЛЬНО] — нарушить нельзя ни при каких условиях
[ЖЕЛАТЕЛЬНО] — учти если не противоречит обязательному
[НЕЛЬЗЯ] — явные запреты

Затем выполни {задача}.

🔗

Ресурсы

SeDT: Sentence-Transformer Decision-Transformer Conditioning for Multi-Turn Conversation Reliability — Ramakrishna Vamsi Setti (Independent Researcher), Jagadeesh Rachapudi, Praful Hambarde, Amit Shukla (Drone Lab, IIT Mandi), Sachin Chaudhary (UPES, Dehradun)

Базовый бенчмарк, на котором строится исследование: Lost in Conversation (Laban et al., 2025) — microsoft/lost_in_conversation на HuggingFace

Метод аннотации истории заимствует концепцию return-to-go из Decision Transformer (Chen et al., 2021)

Встраивания вычислялись через all-mpnet-base-v2 — модель семейства Sentence Transformers (Reimers & Gurevych, 2019)


📋 Дайджест исследования

Ключевая суть

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

Принцип работы

Не один шаг, а два. Сначала разметка — потом задача. Каждое сообщение истории получает метку: КРИТИЧНО (содержит требование, ограничение или ключевое условие) или ФОНОВОЕ (обсуждение, уточнение, одобрение без новых условий). Затем модель выписывает все критичные условия единым списком и проверяет нет ли между ними противоречий. Только после этого пишет финальный результат. Принцип: заставь модель явно назвать что важно — она не сможет это молча проигнорировать. Это не магия — просто модель отлично следует явным инструкциям в тексте. Ей не нужно угадывать важность из плоской истории. Достаточно сказать прямо.

Почему работает

История диалога для модели — плоский текст без весов важности. «Тон — дружелюбный» из первого сообщения и «ладно, хорошо» из третьего получают одинаковый вес. Модель обрабатывает весь контекст разом, но с разным вниманием — и этим вниманием управляет позиция в тексте, а не смысловая важность для вас. Самое неприятное: это не баг конкретной модели. Трансформеры архитектурно слабее на середине — это особенность всего класса. Начало и конец разговора помнят хорошо, середина проседает. SeDT обходит это через явное называние: когда модель пишет [КРИТИЧНО] — она фиксирует своё внимание на этом элементе прямо сейчас. Второй шаг уже работает с явным списком условий, а не гадает по плоской истории кто важнее.

Когда применять

Длинные многоходовые разговоры от 5+ сообщений, где требования к финальному результату разбросаны по всей переписке. Особенно хорошо работает когда пишете бриф, техническое задание, план или текст через несколько итераций уточнений — и боитесь что модель в финале забудет что-то из середины. НЕ подходит для коротких диалогов (2-3 сообщения) — разметка избыточна. НЕ подходит для задач с размытыми критериями типа «сделай поживее» — там модели не из чего строить точные метки.

Мини-рецепт

1. Дай команду на разметку: перед финальным запросом попроси модель прочитать весь диалог и разметить каждое сообщение.
2. Задай метки: [КРИТИЧНО] — содержит требование, ограничение или ключевое условие к задаче. [ФОНОВОЕ] — обсуждение, уточнение, одобрение без новых условий.
3. Запроси сводный список: попроси выписать все [КРИТИЧНО]-условия единым списком.
4. Добавь ловушку на противоречия: Если между [КРИТИЧНО]-условиями есть противоречия — укажи их отдельно перед выполнением.
5. Финальный запрос: только после разметки и сводки — попроси выполнить задачу, строго соблюдая все [КРИТИЧНО]-условия.

Метки можно менять под себя: [ОБЯЗАТЕЛЬНО] / [ЖЕЛАТЕЛЬНО] / [ЗАПРЕЩЕНО] — модель подстроится под любые.

Примеры

[ПЛОХО] : Теперь напиши финальный текст лендинга на основе нашего разговора
[ХОРОШО] : Прочитай весь наш диалог выше. Прежде чем писать текст — разметь историю: [КРИТИЧНО] — сообщение содержит требование, ограничение или ключевое условие к тексту [ФОНОВОЕ] — обсуждение, уточнение или одобрение без новых условий Выпиши все [КРИТИЧНО]-условия единым списком. Если между ними есть противоречия — укажи отдельно. После этого напиши текст лендинга, строго соблюдая каждое [КРИТИЧНО]-условие. Результат: модель сначала покажет вам что она «заметила» как важное. Вы видите разметку до финального текста — и можете поправить если что-то пропустила.
Источник: SeDT: Sentence-Transformer Decision-Transformer Conditioning for Multi-Turn Conversation Reliability
ArXiv ID: 2605.26788 | Сгенерировано: 2026-05-27 07:35

Проблемы LLM

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

Методы

МетодСуть
Разметка истории перед финальным ответомПеред задачей добавь промпт-шаг: Для каждого моего сообщения укажи [КРИТИЧНО] или [ФОНОВОЕ]. Затем выпиши все [КРИТИЧНО]-условия списком. Если есть противоречия между ними — укажи. После разметки — выполни {задача}. Модель сначала явно называет что важно. Это само по себе фиксирует её внимание на этих элементах. Потом работает с финальным ответом уже с явными ориентирами. Ошибки видны до ответа: если модель пропустила условие в разметке — ты видишь это и поправляешь раньше. Когда да: диалог от 5+ ходов, условия распределены по разным сообщениям, есть чёткие ограничения. Когда не работает: 2-3 сообщения, размытые критерии вроде «сделай живо»
📖 Простыми словами

SeDT: Sentence-Transformer Decision-Transformer Conditioning for Multi-Turn Conversation Reliability

arXiv: 2605.26788

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

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

Метод SeDT (Sentence-Transformer Decision-Transformer) — это попытка дать модели тот самый чертеж. Вместо того чтобы просто читать историю диалога, нейронка использует Sentence-Transformer, чтобы превратить каждое твоё сообщение в четкий вектор смысла, и Decision-Transformer, чтобы оценить, насколько этот кусок текста критичен для итогового результата. Модель буквально расставляет веса важности на каждом этапе: «так, здесь клиент просил про тон, это важно на 90%, а здесь просто поздоровался — это мусор на 2%».

Хотя метод тестировали на диалогах, принцип динамического взвешивания контекста применим везде, где есть длинные цепочки данных. Это касается сложных ТЗ, многостраничных юридических документов или написания кода, где правки вносятся итерациями. Сейчас 40% качества теряется просто потому, что модель не понимает иерархию твоих слов. SeDT превращает хаотичную переписку в структурированную задачу, где каждое старое условие имеет такую же силу, как и свежее сообщение.

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

Работа с исследованием

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

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с