TL;DR
PoS — фреймворк для долгих агентных задач. На каждом шаге агент не просто копит историю действий, а переписывает короткий «паспорт ситуации»: что сейчас известно о мире, чего он ещё не знает и что ещё нужно сделать. Каждое обновление паспорта проверяет отдельный «контролёр». Отдельно система следит, не топчется ли агент на месте, и при застревании накладывает ограничения на следующие действия.
Главная боль длинных задач: агент к 50-му шагу уже не понимает, какие факты ещё актуальны. Он записал, что микроволновка открыта, потом закрыта, и в голове остались оба факта. Он повторяет одно и то же действие, ходит по кругу или собирает данные, которые ничему не помогают, пока бюджет шагов не кончится. Причина простая: история хранит что случилось, но не как всё выглядит сейчас. Сжатие истории часто делает хуже, потому что часть нужных деталей теряется.
Суть метода в трёх частях. Первая — паспорт ситуации: сущности, их состояния, связи, цель и два списка пробелов. Вторая — проверка каждого обновления паспорта на противоречия с самим собой и с последним наблюдением. Третья — диагностика застревания по двум осям и точечное «лекарство». Ось «как застрял»: стоит на месте, ходит по кругу или дрейфует в сторону. Ось «что заблокировано»: знание или действие.
Схема метода
ШАГ 1: Построить паспорт → Мир (сущности–состояния–связи, с уверенностью и источником)
+ Цель + Пробелы знания + Пробелы достижения
ШАГ 2: Выбрать ОДИН активный пробел → действие выбирается под него
ШАГ 3: Выполнить действие → получить наблюдение
ШАГ 4: Черновик нового паспорта → Контролёр ищет противоречия
(внутри паспорта и с наблюдением) → правка → фиксация
ШАГ 5: Здоровье: пробел не закрывается + нет прогресса / состояния повторяются?
→ если да, диагноз: Застыл / Круг / Дрейф × заблокировано знание / действие
ШАГ 6: Ограничение на следующий ход (по диагнозу), пока здоровье не восстановится
В оригинале это несколько отдельных вызовов модели плюс числовые метрики в коде. В чате или файле инструкций те же шаги можно описать словами (см. шаблон).
Пример применения
Задача: Интернет-магазин на Битрикс. С 03:00 ночи часть оплат через ЮKassa падает. Вы запускаете Claude Code с доступом к логам и репозиторию. Вручную такая диагностика часто превращается в хождение по кругу: перечитали тот же лог, опять проверили тот же webhook.
Промпт:
Ты расследуешь инцидент. Работай по протоколу «Паспорт ситуации».
Цель: найти причину, почему с 03:00 МСК часть оплат через ЮKassa
не доходит до статуса «оплачен» в нашем магазине, и предложить фикс.
Критерий готовности: названа причина с подтверждающим доказательством
из логов или кода + описан фикс.
Протокол — на КАЖДОМ шаге:
1. Покажи «Паспорт»: сущности, их состояния (с уверенностью
высокая/средняя/низкая и источником), связи, пробелы знания
(что ещё не выяснено) и пробелы достижения (что ещё сделать).
2. Выбери ОДИН активный пробел и объясни выбор в одну строку.
3. Сделай одно действие под этот пробел.
4. После наблюдения напиши черновик нового Паспорта и проверь его:
— нет ли двух несовместимых состояний у одной сущности;
— не противоречит ли что-то последнему выводу из логов.
Исправь и только потом зафиксируй.
5. Оцени здоровье: закрылся ли активный пробел или изменилась ли
уверенность хоть в чём-то? Если 3 шага подряд нет — это застревание.
Диагноз: Застыл / Круг / Дрейф; заблокировано: знание или действие.
6. При застревании следующий шаг подчиняется ограничению:
Застыл → запрещено повторять последнее действие;
Круг → запрещено повторять любое действие из цикла;
Дрейф → вернись к активному пробелу, действия вне него запрещены;
заблокировано знание → действие обязано дать новое различающее
свидетельство; заблокировано действие → действие обязано изменить
состояние хотя бы одной сущности.
Результат: Агент на каждом шаге будет выдавать компактный паспорт с двумя списками пробелов, одним выбранным пробелом и одним действием. Видна будет и строка с проверкой на противоречия. Если агент зациклится на одном логе, он сам напишет диагноз вроде «Круг, заблокировано знание» и сменит тактику, например пойдёт в другой источник данных. Итоговый ответ опирается на зафиксированные и подтверждённые записи паспорта, а не на смутную память о 40 предыдущих шагах.
Почему это работает
Слабость: длинная история смешивает старые факты, промежуточные догадки и устаревшие наблюдения. Модель каждый раз заново «выуживает» из неё текущую картину и может выудить неверную. Сжатие помогает не всегда: на сильных моделях с длинным контекстом пересказ часто теряет важное и бывает хуже сырой истории.
Сильная сторона: модель хорошо ведёт структурированные записи, сверяет два текста друг с другом и подчиняется явному ограничению («нельзя повторять X»). Если картина мира записана в одном месте и пересматривается на каждом шаге, ошибка видна сразу, а не копится.
Как метод это использует: паспорт заменяет «воспоминание» текущим состоянием. Разделение пробелов на «узнать» и «сделать» убирает смешение: агент не пытается действовать, пока не выяснил, и не копает бесконечно, когда пора действовать. Контролёр ловит собственные галлюцинации модели до того, как они попадут в решения. А диагноз застревания превращает расплывчатое «агент тупит» в конкретную команду.
Рычаги управления: - Окно застревания (в шаблоне «3 шага») → короче для дорогих действий, длиннее для шумных задач. - Один активный пробел → если агент разбрасывается, сузьте до одного. Если слишком узко, разрешите два. - Контролёр → пусть проверяет только добавленные и изменённые записи, это дешевле и в статье так и делается. - Уверенность и источник у каждого факта → убрав их, вы теряете возможность отличить проверенное от догадки. - Ограничения восстановления → можно добавлять свои под задачу, например «запрещено читать больше 200 строк лога за раз».
Шаблон промпта
Ты ведёшь долгую задачу по протоколу «Паспорт ситуации». Решения принимаешь
ТОЛЬКО на основе актуального паспорта, а не на основе пересказа истории.
{цель}
Критерий готовности: {критерий_готовности}
Сущности: {объекты и участники задачи}
Для каждой — Состояние (естественным языком), уверенность
(высокая/средняя/низкая), источник (шаг или наблюдение).
Связи: Сущность→Сущность, Состояние→Состояние, Сущность→Состояние.
Включай только то, что влияет на возможные действия,
оценку результата или достижение цели.
что ещё неизвестно или не подтверждено
чем текущее состояние отличается от цели
Для каждого шага:
1. Покажи актуальный Паспорт.
2. ActiveGap = один самый ценный пробел сейчас. Объясни выбор в одну строку.
3. Выбери одно действие под ActiveGap. Если действует — подчинись ему.
4. Получи наблюдение.
5. Составь ЧЕРНОВИК нового Паспорта. Затем -проверка.
Проверь только новые или изменённые записи:
— Внутреннее противоречие: у одной сущности несовместимые состояния?
— Внешнее противоречие: запись расходится с последним наблюдением
или другими свидетельствами?
— Есть ли у вывода источник? Выводы без источника помечай «низкая уверенность».
Перечисли найденные проблемы, исправь черновик по свидетельствам,
только потом зафиксируй Паспорт.
После каждого шага ответь:
— Закрылся ли ActiveGap или сильно изменилась уверенность в чём-то важном?
— Повторяются ли состояния мира, относящиеся к ActiveGap?
Если за последние {окно} шага(ов) прогресса нет — объяви «Застревание».
Диагноз по движению:
Застыл — мир не менялся → запрещено повторять последнее действие.
Круг — состояния и действия повторяются по циклу → запрещено повторять
действия из цикла.
Дрейф — мир меняется, но ActiveGap не продвигается → вернись к ActiveGap;
действия вне него запрещены.
Диагноз по пробелу (какой тип застрял больше):
Знание → следующее действие обязано дать НОВОЕ различающее свидетельство.
Действие → следующее действие обязано изменить состояние хотя бы одной
сущности, важной для цели.
Выбери один пункт из каждого диагноза и объедини ограничения.
ActiveGap не меняй. Ограничение снимается, когда прогресс возобновился.
Что подставлять: {цель} и {критерий_готовности} — чем конкретнее, тем лучше агент определяет пробелы. {окно} — обычно 3. В {объекты и участники задачи} пишите то, что реально есть в вашем домене: сервисы и логи для разработки, гипотезы и клиенты для расследования.
🚀 Быстрый старт — вставь в чат:
Вот шаблон протокола «Паспорт ситуации». Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про цель, критерий готовности, какие сущности участвуют и какие действия доступны агенту. Это нужно, чтобы паспорт был про реальные объекты задачи, а ограничения восстановления опирались на реально существующие действия.
Ограничения
⚠️ Нужна инженерия для полной версии: в оригинале паспорт, контролёр, подсчёт «здоровья» (расстояния между состояниями, пороги, окна) и ограничения реализованы кодом с несколькими вызовами модели на шаг. В чате или файле инструкций вы получаете словесную версию. Она проверена не так, как оригинал, и числовые пороги заменены вашим «на глаз».
⚠️ Цена: паспорт и проверка на каждом шаге — это больше токенов и времени. Для коротких задач в пять-десять шагов затея не окупится.
⚠️ Контролёр — та же модель: он проверяет работу модели, а не независимого эксперта. Если модель ошиблась и сама этого не видит, проверка может не сработать.
⚠️ Эффект неравномерный: проверка согласованности сильнее всего помогла в задачах с физическим миром и многими объектами. В диагностических задачах она добавила совсем мало, там важнее оказалось восстановление после застревания.
⚠️ Нет универсальной победы над сырой историей: несколько методов сжатия контекста часто проигрывали простой полной истории. Если задача короткая и модель держит длинный контекст, начните с простого.
Как исследовали
Команда проверила метод на четырёх бенчмарках двух типов. ALFWorld и LOCA-Bench — задачи на исполнение: нужно довести мир до нужного состояния. RCA-100 и ClinDiag — диагностика: нужно собирать улики и выбирать между гипотезами. Всё прогнали на трёх моделях при температуре 0. Сравнивали с пятью подходами: сырая история, ACON и PACE (разные способы сжатия истории), HiAgent (иерархическая память по подцелям) и LongHorizon-Harness (аудируемая запись состояния задачи).
Первая находка — для практики. Умная организация истории не гарантирует выигрыша у сырой. PACE на LOCA-Bench просел на 24–28 пунктов против полной истории, а на ClinDiag с одной из моделей ни один метод управления контекстом не обогнал её. Информация теряется при сжатии, а современные модели и так читают длинное.
Вторая: PoS оказался лучшим на всех четырёх бенчмарках со всеми тремя моделями. Относительный прирост над сильнейшим соперником доходил до 22,7% на ALFWorld и 37,9% на RCA-100, а на LOCA-Bench был скромнее, до 7,5%.
Третья — абляции, самая полезная для практики. Без проверки согласованности результат падает на 14,9 пункта на ALFWorld и 11,8 на LOCA-Bench: там много объектов и состояний, ошибки накапливаются. Без диагностики застревания и восстановления просадка 4,9–6,8 пункта на RCA-100 и 2,7–4,0 на ClinDiag. Логика такая: явный паспорт нужен, но без проверки и без выхода из ступора он не спасает. Часть анализа (паттерны застревания, рост контекста, расход токенов) в доступной версии текста обрезана, поэтому о ней не судим.
Адаптации и экстраполяции
🔧 Техника: паспорт в файл → переживает сессии и сжатие контекста
Добавьте в CLAUDE.md / AGENTS.md: «Паспорт ситуации хранится в файле
PASSPORT.md. После каждого значимого шага перезаписывай его целиком, а не дополняй. Перед любым действием читай его». Так паспорт не потеряется, если агент сожмёт или обнулит контекст. Это моё удобное применение метода, в статье паспорт хранится в контексте агента.
🔧 Техника: убрать «источник и уверенность» → короче паспорт
Для простых задач оставьте только состояние и цель. Вы теряете возможность отличать проверенное от догадки, зато экономите токены.
Экстраполяция: независимый контролёр. Это моя идея, в статье не проверялась: чтобы снять ограничение «контролёр — та же модель», отдайте проверку другой модели или новому чату.
Ты — аудитор. Ниже Паспорт ситуации, обновлённый агентом, и последнее
наблюдение. Найди: (1) несовместимые состояния у одной сущности,
(2) записи, противоречащие наблюдению, (3) выводы без источника.
Верни список проблем, ничего не исправляй.
Паспорт: {паспорт}
Наблюдение: {наблюдение}
Ресурсы
- Название работы: Beyond Memory: Harnessing Long-Horizon Agents with Explicit Belief States (PoS — Progression of States)
- Авторы: Yu Luo, Jiamin Jiang, Yimin Zuo, Xidao Wen, Rongchen Gao, Yongqian Sun, Shenglin Zhang, Guiyang Liu, Cheng Zhang, Fang Situ, Qi Zhou, Dan Pei
- Организации: Nankai University, Alibaba Group, Tsinghua University
- Проект: https://luoyu100.github.io/projects/progression-of-states/project/
- Код: https://github.com/luoyu100/PoS
- Связанные работы из статьи: ReAct, ACON, PACE, HiAgent, LongHorizon-Harness, ReflAct, StateAct; бенчмарки ALFWorld, LOCA-Bench, RCA-100, ClinDiag.
