TL;DR
Когда ты просишь LLM "повтори с учётом всего, что мы обсудили" или копируешь последнее сообщение в новый чат, ты теряешь до половины информации, которая была в диалоге. Исследователи посчитали: последнее сообщение пользователя содержит в среднем только 35-36% уникальных слов всей беседы. Остальное — бюджеты, отсеянные варианты, требования — осталось в предыдущих репликах и не повторяется.
Проблема глубже, чем просто "короткое финальное сообщение". В половине диалогов хотя бы одно конкретное требование (бюджет, локация, срок, отвергнутая альтернатива) было явно названо раньше, но не повторено в последнем сообщении. При этом в 18-19% случаев финальное сообщение наоборот добавляет что-то совершенно новое, чего не было раньше. То есть последняя фраза — это не итог и не краткое резюме беседы, это очередное обновление состояния, которое одновременно и теряет старый контекст, и добавляет новый.
Метода-решения тут нет — это диагноз, а не лекарство. Но из него вытекает прямой практический вывод: если тебе нужно вынести суть диалога (перенести в новый чат, показать коллеге, протестировать промпт отдельно) — нельзя брать последнее сообщение как есть. Нужно явно собрать все constraints, отвергнутые варианты и критерии за весь разговор, иначе теряешь половину смысла.
Схема исследования (не метод, а находка)
НАБЛЮДЕНИЕ 1: Последнее сообщение = ~35% словаря всего диалога
НАБЛЮДЕНИЕ 2: В 50% диалогов — требования остались только в истории, не в финале
НАБЛЮДЕНИЕ 3: В 18-19% диалогов — финал добавляет НОВОЕ требование, которого не было раньше
НАБЛЮДЕНИЕ 4: Ни одно отдельное сообщение (включая лучшее) не содержит всей сути беседы — это подтверждено в 30-49% диалогов
НАБЛЮДЕНИЕ 5: Чем длиннее диалог, тем сильнее эффект — при 5+ сообщениях финал содержит только ~18% словаря
Пример применения
Задача: Ты обсуждал с ChatGPT выбор ноутбука для работы — сначала спросил "лёгкий ноутбук для командировок", потом добавил "до 90 тысяч рублей, чтобы Linux нормально шёл", потом отверг один вариант и попросил "сравни ещё с MacBook Air". Теперь хочешь скопировать финальный вопрос в другой чат (например, Perplexity) или показать другу — и просто копируешь последнюю фразу: "А сравни ещё с MacBook Air".
Проблема: Новый чат не увидит бюджет 90 тысяч, требование по Linux, отвергнутый вариант. Ответ будет мимо цели.
Что делать вместо этого — промпт для сборки состояния:
Собери полную сводку этого диалога для переноса в другой чат.
Включи:
- Все требования и ограничения, которые я называл (бюджет, характеристики, сроки)
- Варианты, которые я уже отверг, и почему
- Критерии сравнения, которые я упоминал
- Мой текущий вопрос
Не сокращай — лучше избыточно, чем потерять деталь.
Результат: Модель выдаст структурированную сводку — список требований, отвергнутых вариантов и текущий запрос. Эту сводку можно скопировать в новый чат целиком, вместо одной финальной фразы — и получить релевантный ответ, а не ответ "в вакууме".
Почему это работает
LLM отвечает не на изолированную фразу, а на фразу + всё, что накоплено в разговоре. Когда ты вырываешь последнее сообщение из контекста — теряешь то, что модель держала "в уме" по ходу диалога: бюджет, отвергнутые варианты, критерии.
Слабость тут не в модели, а в привычке человека думать, что последняя фраза — это и есть весь запрос. На самом деле каждое сообщение в диалоге — это прирост к общему состоянию задачи, а не замена предыдущих сообщений. Финальная фраза "какой лучше?" бессмысленна без знания, что сравнивают именно эти два ноутбука по этим критериям.
Метод обхода простой: явно проси модель собрать сводку всех constraints перед тем, как переносить диалог, тестировать промпт отдельно или показывать его коллеге. Это превращает скрытое состояние диалога в видимый текст.
Рычаги: - Если диалог короткий (2-3 сообщения) — сводка не так критична, потери контекста минимальны - Если диалог длинный (5+ сообщений) — сводка обязательна, иначе теряешь до 80% контекста - Можно попросить модель явно выделить "отвергнутые варианты" отдельным пунктом — это то, что чаще всего теряется
Ограничения
⚠️ Это не техника, а диагноз: Исследование не даёт готового метода решения — оно описывает проблему. Решение (сводка контекста) — это наша экстраполяция из выводов, не авторский промпт.
⚠️ Не про смысловой дрифт: Авторы отдельно проверили — короткое финальное сообщение это не потому что тема "уплыла", а просто потому что оно короче физически. Это не показатель того, что смысл поменялся, а показатель того, что часть текста просто осталась в истории.
⚠️ Не измеряет влияние на ответ: Исследование показывает, что история содержит информацию, которой нет в финальном сообщении. Оно НЕ показывает, насколько сильно ответ модели изменится, если эту историю убрать. Это отдельный, непроверенный вопрос.
Как исследовали
Команда взяла 8 133 реальных диалога человека с LLM: 670 коммерческих англоязычных многоходовых бесед (свой закрытый корпус) плюс 7 463 публичных диалога из датасета PRISM (1 389 участников, разные протоколы — от обсуждения ценностей до спорных тем). Смотрели только на сообщения пользователя, ответы модели не анализировали.
Логика простая: для каждого диалога считали, сколько уникальных слов из всего разговора попадает в последнее сообщение, и отдельно — сколько конкретных "требований" (бюджет, локация, отвергнутые варианты и т.д., по 9 заранее заданным правилам-паттернам) упомянуто раньше, но не повторено в финале.
Удивило, что результат устойчиво воспроизвёлся на двух совершенно разных корпусах (коммерческий и PRISM) и на разных протоколах внутри PRISM — расхождение в пределах нескольких процентных пунктов. Это говорит, что находка не случайность одного датасета, а общее свойство того, как люди ведут диалог с LLM: постепенно наращивают контекст, а не переформулируют весь запрос заново.
Ресурсы
The Prompt Is Not the Query: How Request State Evolves Across Multi-Turn AI Conversations, Benjamin Tannenbaum, Aiso (Тель-Авив). Использованы данные PRISM (Kirk et al., 2024) и собственный закрытый коммерческий корпус диалогов.
