TL;DR
E-Ledger — обвязка вокруг агента из четырёх частей. Перед каждым действием код сверяет его с политиками компании и разрешает, просит уточнить, пробует разведать или блокирует. Агент ведёт журнал состояния: что проверено и где это видно. Рядом лежит реестр скрытых правил: «если сделать X, незаметно изменится Y». WorldAbduct — способ пополнять этот реестр. Модель разбирает неудачные прогоны по четырём вопросам, выдвигает гипотезы о скрытых правилах и проверяет их отдельными пробными действиями. В реестр попадают только подтверждённые правила.
Главная боль: инструмент отвечает «успешно», а на деле поменялось что-то ещё. Например, после начисления суммы у клиента тихо вырос приоритет, и следующий перевод уже нарушает политику. Агент видит только ответ инструмента и считает мир таким, каким его описал ответ. Он не знает правил, которых нет ни в политике, ни в ответе. К тому же он забывает ранее подтверждённые факты и может обойти «известное» правило собственными рассуждениями.
Метод закрывает эти дыры тремя вещами. Политики принудительно проверяются кодом, а не «просьбой соблюдать». Факты живут в журнале с источниками. Скрытые правила сначала гипотезы, а в реестр попадают после пробы. На корпоративном бенчмарке доля безопасно выполненных задач выросла в 2–4 раза против обычного агента. Для читателя без кода переносимы идеи: журнал, ворота, проверка после записи и разбор логов по четырём вопросам.
Схема метода
Рантайм E-Ledger (на каждый шаг агента):
ШАГ 1: Task-агент предлагает действие + прогноз «что изменится» → действие + ожидаемое изменение
ШАГ 2: Policy-context-агент достаёт из журнала поля, нужные для проверки политики → факты для гейта
ШАГ 3: Код-гейт сверяет действие с политикой → execute / query / probe / block
(query и probe — не хватает данных; block — нарушение, действие заменить)
ШАГ 4: Действие выполняется, приходит ответ инструмента
ШАГ 5: State-tracking-агент обновляет журнал (с доказательствами) → динамическое состояние
+ реестр скрытых правил помогает прочитать косвенные эффекты
Эволюция WorldAbduct (после прогонов, отдельный цикл):
ШАГ 1: Разбор траектории по 4 взглядам:
• согласованность состояния (прогноз ↔ ответ инструмента ↔ журнал)
• «дыра наблюдения» (что изменилось, но инструмент об этом молчал)
• корректность ворот (почему действие не прошло гейт)
• оценка цели (рано остановился? нарушение прошло мимо гейта?)
ШАГ 2: Два типа выходов → прямая правка обвязки ИЛИ гипотеза о скрытом правиле
ШАГ 3: Абдукция-агент в свежей среде придумывает пробные действия для гипотезы
ШАГ 4: Решение: act (ещё проба) / revise (поправить гипотезу) / verified / unresolved
ШАГ 5: Только verified → в реестр скрытых правил (действие, условие, эффект, доказательство)
В оригинале это несколько агентов и код. Версия для чата описана ниже в шаблонах.
Пример применения
Задача: Вы настраиваете агента для Битрикс24, который двигает сделки по воронке. Политика: скидка больше 15% требует согласования РОПа. Агент прошёл десяток сделок, и в двух случаях что-то сломалось. После перевода в «Счёт выставлен» поле «Скидка» оказалось заблокировано, а договор ушёл клиенту. В ответе инструмента было просто «Сделка обновлена». Нужно понять, какие скрытые правила стоят за этим, и обновить инструкцию агента.
Промпт:
Ты — диагност прогонов агента. Разбери лог ниже по четырём взглядам, затем выдвини гипотезы о скрытых правилах и придумай безопасные пробы для их проверки.
<Политика>
1. Скидка > 15% — только после согласования РОПа.
2. Перевод сделки на «Счёт выставлен» возможен только при заполненных реквизитах.
Политика>
<Лог>
1. get_deal(4821) → стадия «Переговоры», скидка 12%, реквизиты есть
2. update_deal(4821, скидка=18%) → «Сделка обновлена»
3. move_deal(4821, «Счёт выставлен») → «Сделка обновлена»
4. update_deal(4821, скидка=10%) → ОШИБКА: поле недоступно
5. Агент отчитался: «Скидка 18% применена, сделка в работе»
Лог>
<Взгляды>
A. Согласованность состояния: где прогноз агента расходился с ответом инструмента? Что агент должен был записать в журнал, но не записал?
B. Дыра наблюдения: что изменилось, хотя инструмент об этом не сообщил? Какие шаги могли это вызвать? Сформулируй как гипотезу.
C. Ворота: какие действия должны были быть остановлены политикой? Почему не остановились? Каких данных не хватало гейту?
D. Цель: можно ли считать задачу выполненной безопасно? Есть ли нарушение, которое никто не поймал?
Взгляды>
<Выход>
1. Прямые правки инструкции агента (коротко, по пунктам).
2. Гипотезы о скрытых правилах в формате: (действие, условие) → эффект.
3. Для каждой гипотезы — план проб в тестовой копии портала: какие 2–4 действия, что ожидаешь увидеть, что опровергнет гипотезу.
Скрытые правила помечай «ГИПОТЕЗА», пока их не проверили. В «подтверждённые» ничего не переноси.
Выход>
Результат: Модель выдаст разбор по четырём блокам A–D. В нём будет видно, что скидка 18% прошла без согласования РОПа и что агент не проверил состояние после перевода в «Счёт выставлен». Дальше идут правки к инструкции и гипотезы вроде «перевод в „Счёт выставлен“ блокирует скидку и запускает отправку договора». К каждой гипотезе приложен план проб на тестовой копии портала. Какие правила окажутся реальными, станет ясно только после проб. Модель гипотезы лишь предлагает.
Почему это работает
Слабость. LLM-агент опирается на то, что видит: на ответ инструмента и на собственную историю. Если инструмент молчит о побочном эффекте, агент считает, что эффекта нет. «Соблюдай политику» в тексте промпта модель может обойти собственными рассуждениями: «действие же логично». А на длинных задачах она теряет подтверждённые факты и перепроверяет одно и то же либо останавливается раньше времени.
Сильная сторона. Модель хорошо делает три вещи. Она извлекает факты из шумного ответа в аккуратные поля. Она ищет в логе, какое прошлое действие могло вызвать странное изменение. И она придумывает целевые пробы для проверки гипотезы. Всё это абдукция: из наблюдаемого следствия выводится вероятная причина.
Как метод связывает одно с другим. Принуждение отдаётся коду, а модель делает то, что умеет. Гейт не зависит от рассуждений агента. Журнал держит факты вне контекста. Разбор по четырём взглядам даёт гипотезы, а проверка пробами отсекает выдумки. Выдуманное правило в реестре хуже, чем его отсутствие.
Рычаги управления:
- Решения гейта. Добавь probe/query вместо бинарного «да/нет», тогда агент собирает недостающие данные, а не гадает.
- Набор взглядов. В эксперименте у каждого взгляда свой профиль. Оценка цели даёт больше выполненных задач, но в одиночку вызывает небезопасные действия. «Дыра наблюдения» даёт максимум безопасности. Нужны все четыре вместе.
- Статус правила. Гипотеза → проверено → в реестр. Если убрать проверку, реестр засоряется ложными правилами.
- Доказательства в журнале. Каждая запись с источником. Конфликты и непроверенные поля помечаются отдельно.
Шаблон промпта
Оригинал опирается на код-гейт. Ниже версия для обычного агента с инструкциями: гейт сделан отдельным шагом проверки. Он слабее кода, но переносит саму структуру.
Шаблон 1. Системная инструкция агента (рантайм E-Ledger в тексте)
Ты — исполнитель задач в {система}. Ты работаешь по циклу: предложить → проверить → выполнить → обновить журнал.
{список политик: что запрещено, что требует согласования, какие предусловия}
{правила_или_пусто}
{состояние}
Перед КАЖДЫМ записывающим действием (создание, изменение, удаление, перевод, отправка):
1. PROPOSE: назови действие и предскажи, что изменится (включая побочные эффекты из StaticRules).
2. CONTEXT: выпиши из DynamicState поля, нужные для проверки политик. Если поля нет в журнале — не додумывай, пометь «нет данных».
3. GATE: сверь действие с каждой политикой и выбери ровно одно решение:
- execute — все предусловия подтверждены в журнале с источником;
- query — не хватает данных: сначала выполни читающий вызов;
- probe — непонятно, как политика применяется: проведи безопасную разведку;
- block — нарушение: замени действие, не выполняй.
Рассуждения вида «это логично, значит можно» не считаются основанием для execute.
4. ACT: выполни действие только при решении execute.
5. UPDATE: сравни ответ инструмента с прогнозом. Запиши в DynamicState только то, что подтверждено ответом. Расхождения и незакрытые поля пометь «ПРОВЕРИТЬ». Ответ «успешно» — не доказательство итогового состояния: прочитай запись читающим вызовом, если от неё зависит политика.
Не завершай задачу, пока: (а) все подцели закрыты по журналу; (б) нет полей «ПРОВЕРИТЬ», влияющих на политики. Если безопасно выполнить задачу нельзя — объясни и откажись.
Шаблон 2. Диагност прогонов (WorldAbduct)
Ты — диагност. Ты разбираешь лог работы агента и улучшаешь его инструкцию и реестр скрытых правил.
Задача: {задача}
Политики: {политики}
Текущая инструкция агента: {инструкция}
Лог (действия, ответы инструментов, прогнозы агента): {лог}
Оценка результата (если есть): {результат}
A. StateConsistency: прогноз агента vs ответ инструмента vs журнал. Что не записано, что записано без опоры на ответ?
B. WorldObservationGap: что в состоянии изменилось без сообщения от инструмента? Какие более ранние действия — кандидаты в причины? Сформулируй гипотезы.
C. PolicyGate: какие действия не прошли гейт или должны были не пройти? Почему? Как улучшить действие агента или данные для гейта?
D. GoalJudgment: достигнута ли цель? Была ли преждевременная остановка? Прошло ли мимо гейта нарушение? Возможно ли ещё безопасное завершение или обоснованный отказ?
Когда я пришлю результаты проб, для каждой гипотезы выбери одно:
- act: нужна ещё проба (назови какая);
- revise: данные говорят о другом правиле (дай новую формулировку);
- verified: выдай правило, условие применимости и доказательство;
- unresolved: данных недостаточно.
В реестр скрытых правил переноси только verified.
Что подставлять. Название системы (CRM, ITSM, ERP), политики дословно, текущую инструкцию агента, лог прогона вместе с ответами инструментов. Журнал и реестр сначала оставьте пустыми.
🚀 Быстрый старт — вставь в чат:
Вот шаблон E-Ledger (рантайм агента с журналом и воротами) и WorldAbduct (диагност прогонов). Адаптируй под мою задачу: [твоя система и что делает агент].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про систему, тип записывающих действий, политики и согласования, а также какие побочные эффекты вы уже замечали. Эти данные нужны для первых строк реестра скрытых правил и для условий гейта. Модель возьмёт структуру из шаблона и соберёт рабочую инструкцию под вашу систему.
Ограничения
⚠️ Гейт в тексте слабее гейта в коде: главный выигрыш по безопасности даёт код, который нельзя обойти рассуждением. Без кода модель может «согласиться сама с собой». Шаблон лишь снижает риск, но не гарантирует.
⚠️ Нужна среда для проб: гипотезу о скрытом правиле проверяют в свежей копии среды. Проверять на живой CRM или боевой базе нельзя: пробы сами что-то меняют.
⚠️ Дороже и длиннее: агенты делают больше шагов, а полный метод стоит заметно дороже обычного ReAct. Для простых задач без политик и побочных эффектов он избыточен.
⚠️ Малая выборка: тестовых задач было немного (результаты кратны 5 п.п.). Размеры эффекта лучше воспринимать как порядок, а не как точную цифру.
⚠️ Один взгляд — риск: оценка цели в одиночку повышает завершение, но вызывает небезопасные действия. Использовать нужно все четыре взгляда.
⚠️ Осторожные модели: некоторые модели при сомнении просто останавливаются, а не ищут безопасный обходной путь. Безопасность сохраняется, но выполненных задач меньше.
⚠️ Пока без журнала проверки скрытых правил: базовый E-Ledger без эволюции на одной из моделей не лучше обычного агента по безопасному выполнению. Журнал без знаний о скрытых правилах мало что даёт.
Как исследовали
Исследователи взяли корпоративный бенчмарк World of Workflows. Там агент работает с записями, правами и согласованиями, а часть последствий действий скрыта от него. Для проверки общности добавили две научные среды, ScienceWorld и DiscoveryWorld. Все задачи делили в пропорции 2:1:2: обучающие траектории запускают эволюцию, валидационные выбирают лучшую версию обвязки, тестовые остаются закрытыми для итоговой оценки.
Сравнивали четыре модели и три подхода. Первый — обычный ReAct без обвязки. Второй — MemoHarness, который правит шесть компонентов обвязки по разборам случаев. Третий — WorldEvolver, который строит библиотеку изменений состояния только из того, что видно в ответах инструментов. WorldEvolver не проверяет гипотезы пробами.
Результаты удивляют масштабом. На одной модели безопасное выполнение выросло с 25% (ReAct) до 80% (E-Ledger + WorldAbduct). На другой — с 20% до 70%. Лучший конкурент отставал на 5–15 п.п. На DeepSeek E-Ledger при той же доле выполненных задач удвоил долю безопасных: ошибки остались в основном «не дошёл», а не «нарушил».
Абляции показали, какая часть что даёт. Если убрать реестр скрытых правил, безопасное выполнение падает с 75% до 40%. Это самый тяжёлый удар. Без журнала состояния оно падает до 65%. Без код-гейта доля выполненных задач не меняется, а безопасность падает: модель всё равно может выполнить запрещённое действие ради цели. Ещё один неочевидный вывод: E-Ledger без эволюции на одной модели оказался не лучше обычного агента по безопасному выполнению (30% против 35%). Скелет «ворота + журнал» не заменяет знание о мире, его нужно накопить.
Адаптации и экстраполяции
🔧 Техника: «разбор через четыре вопроса» без многоагентности → быстрый аудит агента
Скармливаете любой лог агента (Claude Code, Cursor, n8n-сценарий) с короткой инструкцией:
Разбери этот лог по четырём вопросам: (1) где агент записал в память то, чего не было в ответах инструментов? (2) что изменилось в системе, о чём инструменты не сообщили? (3) какие действия должны были остановиться на проверке политики? (4) выполнена ли цель на самом деле или агент остановился рано? По каждому пункту дай правку в инструкцию агента.
Это самый лёгкий способ использовать идею из статьи.
🔧 Техника: «читающий вызов после записи» → правило в CLAUDE.md / AGENTS.md
Добавьте в файл инструкций строку: «После любого изменения данных, от которых зависят политики, перечитай запись и сверь с ожиданием. „Успешно“ в ответе — не доказательство итогового состояния».
Экстраполяция: файл
hidden-rules.mdдля вашего агента. Заведите в проекте файл с блоками «действие → побочный эффект → как проверено → дата». Добавляйте туда только то, что подтвердили вручную или тестовым прогоном. В CLAUDE.md сошлитесь на него: «Перед записывающим действием сверься с hidden-rules.md». Так вы получаете аналог реестра скрытых правил без кода.
Ресурсы
- Работа: Safe, Persistent, and Evolving Agent Harness for Understanding Partially Observable Worlds (E-Ledger и WorldAbduct), препринт
- Код: https://github.com/HKUST-KnowComp/ELEDGER-WorldAbduct
- Авторы: Yisen Gao, Yue Guo, Qing Zong, Yiwen Guo, Yangqiu Song — Hong Kong University of Science and Technology, LIGHTSPEED
- Бенчмарки: World of Workflows (Gupta et al., 2026), ScienceWorld (Wang et al., 2022), DiscoveryWorld (Jansen et al., 2024)
- Базовые методы: ReAct (Yao et al., 2022), MemoHarness (Huang et al., 2026), WorldEvolver (Zhang et al., 2026)
