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)
