3,583 papers
arXiv:2604.21139 71 22 апр. 2026 г. FREE

Двойные слоты: как LLM отслеживают персонажей — и почему одно предложение с двумя героями их ломает

КЛЮЧЕВАЯ СУТЬ
Парадокс: модель хранит правильный ответ в памяти — и всё равно отвечает неверно. GPT-4o, Claude Sonnet 3.5, Gemini 2.5 Flash знают атрибуты каждого персонажа в контексте. Но на вопрос 'кто высокий?' плывут — даже когда ответ буквально в тексте. Структурные правила slot binding позволяют писать промпты с несколькими участниками так, чтобы модель корректно извлекала атрибут нужного человека. Фишка: каждый токен держит лишь два слота — 'кто я сейчас' и 'кто был прямо передо мной'. Пишешь 'Алиса готовит, а Боб ест' — одно предложение, два субъекта — нужный слот не активируется, и модель путает кто что делает, хотя данные никуда не делись.
Адаптировать под запрос

TL;DR

Большинство современных LLM теряются на предложениях типа «Алиса готовит, а Боб ест еду». Не потому что задача сложная — а потому что такое предложение требует одновременно двух привязок (кто → что делает) на одном токене. Это выше возможностей архитектуры большинства моделей. Провалились GPT-4o, Claude Sonnet-3.5, Gemini-2.5 Flash, Qwen3-235B, DeepSeek-V3.2. Справились только самые новые: Claude Opus-4.5 и Gemini-3-Pro.

Главная находка: LLM внутри хранят информацию о персонажах в двух независимых «слотах» — текущий (кто описывается прямо сейчас) и предыдущий (кто был перед ним). Эти слоты работают в разных направлениях внутри модели и не мешают друг другу. Предыдущий слот используется для сравнений соседних персонажей: кто шёл после Алисы, есть ли противоречие между соседними. Но для прямых фактических вопросов («Кто высокий?», «Как зовут весёлого?») модель использует только текущий слот — даже когда нужная информация в предыдущем тоже есть.

Это практическая карта ошибок: если промпт требует от модели отследить двух персонажей через одно предложение — ждите сбоев. Решение простое: одно предложение = один персонаж = одна привязка. Описывайте каждого отдельно, используйте явные простые конструкции. Это не стилистика — это работа в рамках архитектурного ограничения модели.


📌

Схема: что работает и что ломается

❌ ЛОМАЕТСЯ (двойная привязка на одном токене):
  "Алиса готовит, а Боб ест еду." 
   → Одно предложение, два субъекта, один объект
   → Модель не может одновременно хранить оба binding'а

✅ РАБОТАЕТ (одна привязка на предложение):
  "Алиса готовит еду."
  "Боб ест еду."
   → Каждый персонаж в своём предложении → надёжная привязка

✅ РАБОТАЕТ (сравнение соседних):
  "Кто шёл в списке после Алисы?"
  "Есть ли противоречие между соседними персонажами?"
   → Задействует prior-entity slot → работает хорошо

❌ НЕНАДЁЖНО (явное извлечение из прошлого):
  Длинный список → затем "Кто из первых трёх был смелым?"
   → Первый персонаж держится дольше других, остальные угасают

Все шаги — в одном чате, структурируются на этапе написания промпта.


🚀

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

Задача: Пишешь промпт для разбора питч-дека — просишь Claude сыграть роль сразу нескольких «персонажей»: Артёма Сенаторова (контент-стратег), Фёдора Овчинникова (предприниматель-практик), Ги Кавасаки (венчурный взгляд). Нужно, чтобы каждый оценил идею по-своему, и модель не путала их позиции.

Промпт:

Ты разыгрываешь мозговой штурм с тремя экспертами. Они дают оценку по очереди.

Эксперт 1 — Артём Сенаторов.
Его фокус: насколько идея производит контент сама по себе, есть ли вирусный потенциал.
Его слабость: может недооценивать операционные сложности.

Эксперт 2 — Фёдор Овчинников.
Его фокус: реальность исполнения, юнит-экономика, первые 100 клиентов.
Его слабость: скептик, занижает рыночный потенциал.

Эксперт 3 — Ги Кавасаки.
Его фокус: масштаб рынка, простота питча, «10x улучшение».
Его слабость: игнорирует локальную специфику.

Идея: [Опиши свою идею в 2–3 предложениях.]

Пусть каждый эксперт по очереди скажет ровно 3 предложения — своим голосом, со своей позицией. 
После — одно итоговое расхождение: в чём главное противоречие между их оценками?

Результат: Модель выдаст три чётких блока — по одному от каждого эксперта — в стиле каждого персонажа. Финал: явное указание на ключевое противоречие во мнениях. Каждый персонаж описан отдельным блоком → модель не смешивает их позиции и атрибуты.


🧠

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

LLM не хранит «базу данных» персонажей с произвольным доступом. Это скорее скользящее окно: хорошо видно текущего персонажа и предыдущего. Дальше — размыто, кроме самого первого (он обычно держится дольше остальных).

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

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


📋

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

Вот {число} участников / персонажей / ролей.

{Имя 1}: {Одно-два предложения — кто это, что его отличает. Только об этом персонаже.}

{Имя 2}: {Одно-два предложения — кто это, что его отличает. Только об этом персонаже.}

{Имя 3}: {Одно-два предложения — кто это, что его отличает. Только об этом персонаже.}

Задача: {Что нужно сделать — оценить / сравнить / обсудить}.

Правило: каждый говорит от своего имени, своим голосом. Не смешивай позиции.

Плейсхолдеры: - {число} — сколько персонажей/ролей - {Имя N} — имя или роль - Описание каждого — отдельным блоком, без соединительных «а также», «и» - {Задача} — что ты хочешь получить от взаимодействия персонажей

Ключевой принцип: никаких конструкций «X делает одно, а Y — другое с тем же объектом» в одном предложении. Всегда разбивай.


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

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

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

LLM спросит: сколько персонажей, кто они, какая задача — потому что шаблон структурирован под чёткое описание каждого отдельно. Она возьмёт паттерн из шаблона и адаптирует под твой контекст.


🧠

Почему это работает — механика

LLM не «думает» о персонажах как людях. Она генерирует текст, опираясь на паттерны в активациях токенов. Каждый токен несёт в себе «сжатую память» о пройденном контексте — но не равномерно.

Ключевое открытие: в активациях выделяются два специализированных направления — одно для текущего, другое для предыдущего персонажа. Они почти не пересекаются (корреляция ~0.11), то есть это действительно разные каналы хранения. Предыдущий канал работает хорошо для относительных задач (кто шёл после кого, есть ли противоречие между соседними). Но для прямых вопросов о конкретных атрибутах модель игнорирует предыдущий канал — даже когда там есть ответ.

Рычаги управления: - 🔧 Количество персонажей: чем меньше, тем надёжнее. 4–5 хорошо, 8+ — начинают размываться средние - 🔧 Порядок: самый важный персонаж — первый (держится дольше) или последний (текущий слот, самый сильный) - 🔧 Разбивка предложений: дроби сложные предложения о двух персонажах на простые — это не стилистика, это надёжность - 🔧 Кто описывает: описывай персонажей сам в своих сообщениях, не проси модель — твои сообщения дольше сохраняются в её представлении


⚠️

Ограничения

⚠️ Только граничные модели: Принцип о двойных привязках актуален для большинства моделей. Claude Opus-4.5 и Gemini-3-Pro уже справляются с такими предложениями — возможно, у них другие механизмы. Проверяй на своей версии.

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

⚠️ Соседние vs. далёкие: Сравнивать двух соседних персонажей — надёжно. Сравнивать первого и пятого в длинном списке — уже сложнее.

⚠️ Явное извлечение атрибутов: «Кто из всех был смелым?» — ненадёжно при большом списке. Лучше задавать вопрос сразу после описания персонажа, пока он ещё «текущий».


🔍

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

Команда из программы Anthropic Fellows взяла 10 000 промптов с описанием восьми персонажей — каждый с одной из 15 черт характера (смелый, аналитичный, творческий и т. д.). Описания генерировал Claude Sonnet-4.5, по четыре предложения на персонажа. Затем авторы вытащили внутренние активации токенов (состояние нейросети в момент обработки) и обучили специальный зонд — детектор, который принимает на вход одно состояние токена и пытается угадать черты сразу нескольких персонажей одновременно.

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

Самый неожиданный результат: информация о предыдущем персонаже физически присутствует в активациях — зонд её легко читает. Но когда задаёшь прямой вопрос («Как зовут высокого?»), модель к этой информации не обращается. Информация есть — доступа нет. Это как если бы книга лежала на полке, но библиотекарь о ней не знает и не выдаёт. Авторы также провели патчинг-эксперименты — подменяли активации одного промпта активациями другого, чтобы проследить причинно-следственные связи, а не просто корреляции.


💡

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

🔧 Техника: Явное «закрепление» атрибутов → надёжнее при явном извлечении

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

[После длинного описания всех персонажей]

Напоминание: Игорь — смелый. Лена — аналитичная. Саша — творческий.

Вопрос: Кто из них лучше подойдёт для роли лидера в кризисной ситуации?

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


🔧 Техника: Первый персонаж = «якорь» длинного контекста

Поскольку первый персонаж сохраняется наиболее устойчиво, используй это при структурировании:

Главный критерий/принцип (назовём его "Принцип Федора"):
[Опиши главный стандарт оценки или ключевой контекст]

Далее список для анализа через этот принцип:
1. ...
2. ...

«Принцип Федора» в начале будет устойчиво удерживаться в представлениях модели на протяжении всей беседы.


🔗

Ресурсы

Slot Machines: How LLMs Keep Track of Multiple Entities Paul C. Bogdan, Jack Lindsey Anthropic Fellows Program, Anthropic Контакт: paulcbogdan@gmail.com

Связанные концепции упомянутые в работе: linear probes (линейные зонды для интерпретации активаций), induction heads (механизм предсказания по паттерну [A][B]→[B]), activation steering (управление поведением модели через модификацию активаций), residual stream (поток активаций через слои трансформера).


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

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

Парадокс: модель хранит правильный ответ в памяти — и всё равно отвечает неверно. GPT-4o, Claude Sonnet 3.5, Gemini 2.5 Flash знают атрибуты каждого персонажа в контексте. Но на вопрос 'кто высокий?' плывут — даже когда ответ буквально в тексте. Структурные правила slot binding позволяют писать промпты с несколькими участниками так, чтобы модель корректно извлекала атрибут нужного человека. Фишка: каждый токен держит лишь два слота — 'кто я сейчас' и 'кто был прямо передо мной'. Пишешь 'Алиса готовит, а Боб ест' — одно предложение, два субъекта — нужный слот не активируется, и модель путает кто что делает, хотя данные никуда не делись.

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

Не смешивай субъектов в одном предложении — каждый участник получает свой блок строк, где его имя стоит в начале каждой строки. Слот текущей сущности срабатывает только когда субъект один на предложение. В вопросах называй имя явно: 'что делает Катя?' работает точнее, чем 'кто занимается корпоратами?' — второй вариант заставляет модель искать по всем слотам и она мажет. Самого важного участника ставь первым в списке — первая сущность хранится надёжнее всех остальных на протяжении всего контекста. Для сравнения двух конкретных участников — поставь их блоки рядом: реляционный слот ('кто был передо мной') там как раз сильный.

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

Модель не держит персонажей как таблицу в оперативной памяти. Она обрабатывает текст потоком, и каждый токен несёт лишь два слота: текущей и предыдущей сущности. Когда задаёшь вопрос 'кто высокий?' — модель ищет только в слоте текущей сущности. Слот предыдущей для прямого фактического вопроса попросту игнорируется. Ключевой инсайт: наличие информации в памяти модели не равно её использованию. Модель физически хранит атрибуты всех персонажей в активациях — но достаёт только те, для которых правильный слот активировался в момент вопроса. Разбивка на блоки и явные имена в вопросах гарантируют активацию нужного слота.

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

Любые задачи с несколькими участниками — разбор переговоров, сравнение кандидатов, анализ персонажей в тексте, структурирование питч-сессий, ролевые сценарии. Особенно критично когда атрибуты участников нужно точно извлекать на фоне других — 'кто ищет инвестиции', 'у кого какой продукт', 'есть ли пересечение по рынку'. НЕ спасает при списках из 8+ участников без дополнительного переструктурирования — средние позиции проседают даже при правильной разбивке, первый и последний надёжнее всего.

Мини-рецепт

1. Разбей на блоки: каждый участник — отдельный абзац, каждый атрибут — отдельная строка с именем в начале. Не 'Алиса ищет инвестиции и работает в edtech', а две строки: 'Алиса ищет инвестиции. Алиса работает в edtech.'
2. Поставь главного первым: участник, о котором чаще всего будут вопросы — в начало списка. Первая сущность хранится стабильнее всех.
3. Сравниваешь двух — ставь рядом: если нужно сравнить Диму и Катю, их блоки должны идти подряд, не через третьего участника.
4. В вопросах называй имя явно: 'что делает Саша?' вместо 'кто работает с малым бизнесом?'. Явное имя активирует прямой путь извлечения.
5. Важные условия — в своё сообщение: ключевые ограничения и данные пиши в блоке пользователя, не в ответе ассистента — они хранятся глубже и надёжнее.

Примеры

[ПЛОХО] : Алиса ищет инвестиции на масштабирование, Боб закрыл раунд и не привлекает внешние деньги, Катя фокусируется на корпоративном сегменте. Кто из них сейчас привлекает деньги и чем занимается Боб?
[ХОРОШО] : Расскажу о трёх основателях. Отвечай строго по описаниям. Алиса основала платформу онлайн-репетиторства. Алиса ищет инвестиции на масштабирование в регионы. Алиса открыта к партнёрствам с образовательными платформами. Боб основал корпоративный сервис обучения для крупных компаний. Боб закрыл раунд и сейчас не привлекает внешние деньги. Боб работает с HR-директорами. Катя основала маркетплейс фриланс-дизайнеров. Катя ищет первые стартовые инвестиции. Катя работает с малым бизнесом. 1. Кто из трёх сейчас привлекает инвестиции? 2. Чем занимается Боб? 3. Есть ли пересечение по рынку между Алисой и Бобом?
Источник: Slot Machines: How LLMs Keep Track of Multiple Entities
ArXiv ID: 2604.21139 | Сгенерировано: 2026-04-24 05:35

Проблемы LLM

ПроблемаСутьКак обойти
Модель хранит данные о персонаже, но не достаёт их при вопросеТы написал про Алису и Бориса. Спрашиваешь: "кто высокий?" Модель технически содержит ответ в своих активациях. Но при ответе на вопрос она ищет только в "слоте текущей сущности". Всё что лежит в "слоте предыдущей сущности" — игнорируется. Наличие информации не гарантирует её использование. Это работает так для всех многоперсонажных задач: кейсы, интервью, сравнение вариантов, разбор участниковЗадавай вопрос с явным именем. "Что делает Катя?" работает лучше чем "кто занимается корпоратами?". Явное имя активирует прямой путь к нужному слоту

Методы

МетодСуть
Один субъект — одно предложениеКаждое связывание "персонаж + свойство" пиши отдельной строкой. Алиса ищет инвестиции. Борис закрыл раунд. — а не Алиса ищет инвестиции, а Борис закрыл раунд. Почему: Каждый токен несёт два слота — текущая и предыдущая сущность. Одно предложение с двумя субъектами требует держать оба одновременно в одном токене. Большинство моделей это ломает. Отдельное предложение даёт каждому связыванию свой чистый слот. Когда применять: любой промпт с 2+ участниками, объектами, вариантами. Когда не поможет: frontier-задачи с двойным связыванием в одной конструкции — там только Claude Opus 4.5 и Gemini 3 Pro

Тезисы

ТезисКомментарий
Первая сущность в списке хранится надёжнее всех остальныхМодель обрабатывает текст линейно. Первый персонаж или объект оставляет наиболее устойчивый след на протяжении всего контекста. Второй и дальше — слабее, средние позиции в длинном списке (8+) теряются сильнее всего. Применяй: самого важного участника, ключевое ограничение или главный критерий — на первое место в блоке описаний
📖 Простыми словами

Slot Machines: HowLLMsKeep Track of Multiple Entities

arXiv: 2604.21139

Внутри нейросетей нет никакой «базы данных» или таблицы, где аккуратно разложены свойства персонажей. На самом деле LLM воспринимает информацию как узкий конвейер, где каждый токен (кусочек слова) может удержать в памяти одновременно только две сущности: текущую и предыдущую. Это фундаментальное ограничение архитектуры: модель буквально видит мир через замочную скважину, в которую пролезают максимум двое. Если в твоей истории появляются Алиса, Боб и Чарли, у модели начинается когнитивный перегруз, потому что третий лишний просто не влезает в активные «слоты» памяти внутри одного шага вычислений.

Это как пытаться жонглировать тремя арбузами, имея всего две руки. Пока ты держишь Алису и Боба, Чарли неизбежно падает на пол. Формально модель прочитала текст, но когда дело доходит до связки «кто что делал», она начинает путаться в показаниях и приписывать действия Боба бедному Чарли. Это не баг конкретной модели, а структурный потолок того, как трансформеры обрабатывают последовательности. Большинство современных систем, включая хваленые GPT-4o и DeepSeek-V3, на этом просто «плывут», выдавая уверенную, но полную чушь.

Механика проста: в каждом токене есть два «слота» для хранения связей между субъектом и его атрибутом. Работает это так: субъект-атрибутное связывание (например, «Дима — edtech») требует места, а когда участников становится трое или четверо, модель начинает затирать старые связи новыми. Исследование показало, что даже топовые нейронки лажают в элементарных задачах на логику, если там больше двух активных сущностей. Только самые свежие тяжеловесы вроде Claude Opus или Gemini 3 Pro научились кое-как пропихивать эти данные через слои, но и они работают на пределе.

Этот принцип универсален: он касается не только персонажей в рассказе, но и параметров в коде, условий в юридическом договоре или стартапов в питч-сессии. Если ты просишь AI сравнить Диму, Катю и Сашу, помни — для модели это критическая нагрузка. Как только количество объектов в одном контекстном узле превышает два, точность ответов падает по экспоненте. SEO для мозгов AI теперь заключается в том, чтобы не перегружать один абзац кучей действующих лиц, иначе нейронка превратит твой структурированный запрос в кашу из случайных фактов.

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

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

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

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