TL;DR
VideoTapestry собирает составную память под конкретный вопрос. Исходный материал заранее разложен на три уровня: этапы (общая канва), события (середина) и мелкие факты. Три агента идут сверху вниз. Каждый видит только свой уровень, пересматривает нужные места заново и переписывает описания с учётом вопроса. Отдельный четвёртый агент отвечает по собранной памяти и сам ничего не ищет.
Главная находка: если просто дописывать найденные детали в конец (общий журнал), это хуже, чем переписывать нужные узлы памяти. Ещё важнее, что сжатая общая канва даёт больше, чем детали. Одни детали по выбранным веткам почти не лучше сырой памяти. Сжатый «скелет» всего материала с уточнениями по нужным местам даёт максимум. Одиночный агент, который делает всё сразу, заметно проигрывает трём агентам на разных масштабах.
Суть метода в четырёх шагах. Агент «Обзор» уточняет верхний уровень и выбирает нужные этапы. Агент «Просмотр» читает события внутри выбранных этапов и переписывает их под вопрос. Агент «Фокус» проверяет мелкие факты. Затем всё собирается обратно в дерево, и отдельный агент отвечает.
Схема метода
ПОДГОТОВКА: материал заранее разложен на 3 уровня (этапы → события → мелкие факты)
ШАГ 1 — Агент «Обзор» (этапы):
план → осмотр → обновление → решение
важные этапы + их соседей оставляет подробными, остальные сжимает
→ выбирает ветки + пишет инструкцию следующему агенту
ШАГ 2 — Агент «Просмотр» (события выбранных этапов):
получает инструкцию (не всю историю!) → пересматривает → переписывает описания под вопрос
→ выбирает события + инструкция дальше
ШАГ 3 — Агент «Фокус» (мелкие факты выбранных событий):
точная проверка → переписывает описания → останавливается
ШАГ 4 — Сборка: сжатая канва + уточнённые ветки под своими родителями + короткий след решений
ШАГ 5 — Агент «Ответ» (отдельный): отвечает только по собранной памяти, без новых поисков
Шаги выполняются отдельными вызовами модели.
Пример применения
В оригинале метод работает с видео и требует кода. Но принцип «каркас сверху, детали по нужным веткам, ответ отдельным вызовом» переносится на длинные тексты. Ниже ручная версия для чата (это мой перенос, авторы такое не проверяли).
Задача: есть расшифровка 2,5-часового выпуска подкаста с основателем интернет-магазина. Нужно ответить: «Какую цифру выручки гость назвал в момент, когда рассказывал о выходе на Ozon, и что он говорил непосредственно перед этим?» Если вставить всю расшифровку и спросить в лоб, модель часто теряет нужный фрагмент или путает цифры из разных частей.
Промпт (сообщение 1, агент «Обзор»):
Ты — агент «Обзор». Вопрос: «Какую цифру выручки гость назвал, когда
рассказывал о выходе на Ozon, и что он говорил непосредственно перед этим?»
Ниже расшифровка выпуска. Сделай:
1. План: какие нужны доказательства.
2. Раздели выпуск на 8–12 этапов (номер, примерные тайм-коды, 1 предложение).
3. Выбери этапы, где вероятно ответ, и ОБЯЗАТЕЛЬНО добавь по одному соседнему
этапу с каждой стороны. Для выбранных — перепиши описание подробнее под вопрос
и процитируй дословные фразы. Остальные сожми до одной строки.
4. Решение: STOP, если ответ уже найден, или ПЕРЕДАТЬ с инструкцией
следующему агенту (что именно проверить и что осталось неясным).
Расшифровка: {текст}
Результат: модель выдаст карту этапов с несколькими подробно расписанными (с цитатами) и остальными в одну строку. В конце будет решение: остановиться или передать инструкцию дальше. Следующий шаг — отдельное сообщение для «Просмотра» с текстом только выбранных этапов и этой инструкцией. Затем «Фокус», затем «Ответ» в новом чате, куда вставлено только итоговое дерево.
Почему это работает
Слабость. Если вставить всё и спросить, модель теряет детали из середины длинного материала. Если дать только найденные куски, она теряет контекст и не понимает, что было до и после. Если искать детали одним агентом, он путает масштабы: то ищет главу, то проверяет число, и то и другое делает хуже.
Сильная сторона. Модель хорошо работает в узком окне и хорошо переписывает текст под конкретный вопрос. Короткий сжатый обзор она тоже собирает легко.
Как метод это использует. Каждый агент работает в своём масштабе и не тащит чужой груз. Передаётся только короткая инструкция «что проверить дальше», а не вся история поисков. Сжатая канва сохраняет общую картину. Переписанные нужные ветки дают точные детали. Отдельный агент «Ответ» не отвлекается на поиск.
Рычаги управления: - Соседи выбранных этапов (по одному с каждой стороны) → защита от промаха в локализации. Если нужный кусок найден неточно, ответ может оказаться рядом. - Условие остановки → для общих вопросов («о чём выпуск в целом») можно остановиться на верхнем уровне. Для точечных обязательно спускаться вниз. Авторы в одной из конфигураций делали именно так. - Число уровней → для короткого материала хватит двух. - Инструкция следующему агенту → чем конкретнее («проверь цифру и единицы»), тем точнее проверка.
Шаблон промпта
Это повторяет протокол оригинала: Plan → Observe → Update → Decide, три агента по масштабам, передача инструкции и сборка.
<Роль>Ты — агент «{имя_агента}» уровня {уровень}. Ты видишь только свой уровень.Роль>
<Вопрос>{вопрос}Вопрос>
<Варианты>{варианты_если_есть}Варианты>
<Вход>
<ОбщееРезюме>{краткое_резюме_всего_материала}ОбщееРезюме>
<Кандидаты>{узлы_этого_уровня_с_id_и_описаниями}Кандидаты>
<ИнструкцияСверху>{инструкция_от_предыдущего_агента_или_«нет»}ИнструкцияСверху>
Вход>
<Протокол>
1. PLAN: какие доказательства нужны, чтобы ответить на вопрос.
2. OBSERVE: обратись к исходнику {текст_или_фрагменты}
и найди нужное в кандидатах.
3. UPDATE: для нужных узлов — перепиши описание: сохрани важные факты,
добавь найденные доказательства (с дословными цитатами), убери лишнее.
Для соседей нужных узлов (±1) — оставь исходное описание.
Остальные узлы — сожми до одной строки.
id, порядок и родительские связи не меняй.
Если обновить нечего — оставь исходный текст.
4. DECIDE:
- выбранные_id: [...]
- инструкция_вниз: что проверить, что ещё не ясно (кратко, без пересказа всего пути)
- стоп: true/false ({правило_остановки})
Протокол>
<Формат>JSON: {"обновлённые_узлы":[...], "выбранные_id":[...], "инструкция_вниз":"...", "стоп":false}Формат>
Для сборки и ответа отдельным вызовом:
<Роль>Ты — агент «Ответ». Новых поисков нет. Отвечай только по памяти ниже.Роль>
<Вопрос>{вопрос}Вопрос>
<Память>{сжатая_канва + уточнённые_ветки_под_родителями}Память>
<След>{кто_что_передал_и_где_остановился}След>
Дай ответ и укажи, на какой фрагмент памяти опираешься.
Что подставлять: вопрос, материал (расшифровка, документ, отчёт), правило остановки (например, «для общих вопросов можно остановиться на уровне этапов, для точечных нужно дойти до фактов») и уровни (этапы → события → факты).
🚀 Быстрый старт — вставь в чат:
Вот шаблон VideoTapestry (три агента по масштабам + отдельный агент «Ответ»).
Адаптируй под мою задачу: {твоя задача и материал}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какой у тебя материал, какие вопросы будешь задавать и сколько уровней нужно. Эти вводные нужны, чтобы правильно разделить материал по масштабам и задать правило остановки. Паттерн из шаблона она перенесёт на твою задачу.
Ограничения
⚠️ Нужна инженерная сборка: в оригинале заранее строится память (иерархия событий и графы фактов), есть инструменты просмотра видео по окнам, распознавание речи и поиск по эмбеддингам. В обычном чате это не повторить, только ручной перенос на текст, и такой перенос авторы не проверяли.
⚠️ Промптов в статье нет: в основном тексте описана только логика (протокол и поля). Готовых формулировок нет, шаблон выше — моя реконструкция.
⚠️ Стоимость и время не измерены: метод делает несколько вызовов модели на вопрос. Затраты и задержка в основном тексте не обсуждаются.
⚠️ Узкая область: проверено только на вопросах с выбором ответа по длинным видео. Как это работает на открытых вопросах или на текстах, не показано.
⚠️ Ошибка в начале убивает ветку: если верхний агент выберет не те этапы, нижние уровни туда не спустятся. Защита только в виде соседей и сжатой канвы.
⚠️ Абляции на малой выборке: разбор вклада компонентов сделан на 200 вопросах одного бенчмарка. Разницу в 1–2 пункта (например, между журналом и переписыванием) нельзя считать надёжной.
Как исследовали
Исследователи взяли готовую иерархическую память MemDreamer и поверх неё запустили трёх агентов. Проверяли на четырёх известных бенчмарках длинных видео. Главный противник — тот же GPT-5.5, но без всей схемы. Получили прирост от 7 до 17 пунктов точности, а на LVBench — 81,5% против 64,3%. Самый большой выигрыш пришёлся на поиск момента во времени (+40 пунктов): иерархия помогает находить нужное место в длинной записи.
Затем сделали абляции на 200 вопросах Video-MME Long. Убрали по очереди: просмотр кадров (−3,0), распознавание речи (−5,5), переписывание узлов (замена на журнал: −1,5) и разделение агентов (заменили на одного: −4,5). То есть больше всего дали речь и разделение по масштабам.
Самый интересный эксперимент касался состава памяти. Статичная память давала 79,5%. Только сжатая канва с уточнениями дала 85,0%, а только детальные ветки — 80,5%. Вместе — 87,0% при меньшем числе токенов, чем у статичной памяти (4 417 против 4 874). Это удивляет: «общая картина» оказалась полезнее «деталей». Для практики вывод такой: не выкидывай общий контекст, когда добавляешь детали, а сжимай его. Ещё проверили четыре модели (GPT и Qwen), прирост на всех от 7 до 9,5 пунктов.
Адаптации и экстраполяции
🔧 Техника: перепиши, а не допиши → меньше мусора
Вместо «вот что нашёл дополнительно» в конец ответа проси в каждом шаге переписывать описание узла:
Не добавляй найденное в конец. Перепиши описание этого раздела
с учётом вопроса: сохрани важное, вставь найденные факты, убери лишнее.
Так в абляции авторов работало лучше, чем журнал находок.
🔧 Техника: передавай инструкцию, а не историю → короче контекст
Между шагами в чате вставляй только «что проверить дальше», а не всю переписку.
Экстраполяция (не проверялось авторами): агент по большому репозиторию. В файле инструкций (CLAUDE.md) можно задать трёхуровневый обход: сначала карта модулей, затем файлы выбранных модулей, затем функции. Между уровнями передаётся только короткая инструкция. Ответ или правка выполняется отдельным шагом.
Работай в 3 прохода: (1) по карте модулей выбери релевантные + соседние;
(2) в выбранных файлах найди нужные функции; (3) проверь детали.
На каждом проходе пиши одну строку «что проверить дальше», а не пересказ всего пути.
Правки вноси только после третьего прохода.
Ресурсы
- VideoTapestry: Query-Adaptive Memory Refinement for Multi-Agent Long-Video Understanding
- Авторы: Yucheng Liu, Yufei Yin, Mingxiao Feng, Jiajun Deng, Wengang Zhou, Houqiang Li
- Организации: University of Science and Technology of China, Jilin University, Hangzhou Dianzi University, Institute of Artificial Intelligence (Hefei Comprehensive National Science Center)
- Основа памяти: MemDreamer (Chen et al., 2026). Бенчмарки: LVBench, LongVideoBench, Video-MME, EgoSchema
