TL;DR
LedgerMind — способ заставить LLM работать с фактами как со списком пронумерованных доказательств, а не как со свободным текстом. Модель заносит каждый источник (скрин, поиск, документ) в отдельную запись со статусом «активна/устарела/в конфликте», и любой вывод может ссылаться только на активные записи — а потом отдельно проверяется, что имена и числа в выводе реально есть в процитированном источнике, а не просто рядом стоит ссылка.
Главная находка: модель может сослаться на правильный источник, но подменить в выводе имя или цифру — ссылка выглядит честно, а факт внутри неё выдуман. Авторы называют это «фантомным обоснованием» (Phantom Grounding). Хуже того: когда модели говорят «проверь и исправь свой ответ» без ограничений, она чаще чинит одну ошибку и попутно вносит новую — свободная самопроверка сама плодит хаос.
Метод решает это тремя вещами: 1) факты и выводы разделены — факты неизменны, выводы должны на них ссылаться; 2) проверка не «есть ли ссылка», а «совпадают ли имена/числа буквально»; 3) когда проверка проваливается, модели разрешено только выбрать одно из фиксированных действий (удалить утверждение, перепроверить источник, отказаться отвечать) — свободно переписывать ответ нельзя.
Схема метода
ШАГ 1: Оценка сложности вопроса → простой путь (прямой ответ) ИЛИ полный путь (сбор доказательств)
ШАГ 2: Сбор доказательств → каждый источник заносится в журнал: номер, факт, тип, статус (активно/устарело/в конфликте)
ШАГ 3: Формирование вывода → каждое утверждение ссылается только на активные записи журнала
ШАГ 4: Проверка вывода:
а) есть ли пересечение слов с процитированными записями
б) все ли имена/сущности из вывода есть в этих записях
в) все ли числа совпадают (с допуском для измерений, без допуска для дат/количеств)
ШАГ 5 (если проверка не пройдена) → исправление ТОЛЬКО через фиксированный список действий:
удалить утверждение / обновить источник / попробовать другой способ / запросить больше данных / остановиться и ответить как есть / отказаться отвечать
Всё это — один непрерывный процесс внутри работы агента; в чате можно воспроизвести это как один структурированный промпт.
Пример применения
Задача: Аналитик готовит для инвестора справку о раунде финансирования стартапа. У него есть три скрина: пресс-релиз на сайте компании, пост в Telegram-канале с цифрами, и статья в РБК. Цифры местами расходятся, и нужен ответ, который не смешает их произвольно.
Промпт:
Тебе нужно собрать точную справку по вопросу:
"Сколько привлёк стартап N в последнем раунде и когда?"
Источники (вставь текст/скрины):
[Источник 1: пресс-релиз]
[Источник 2: пост в Telegram]
[Источник 3: статья РБК]
Работай по протоколу:
1. ЖУРНАЛ ДОКАЗАТЕЛЬСТВ
Для каждого источника создай запись:
- Номер (E1, E2, E3...)
- Точная цитата или цифра (без перефразирования)
- Статус: АКТИВНО
2. ВЫВОД
Составь ответ, где каждое утверждение ссылается на номер записи,
например: "Раунд составил $5М (E2)".
Не используй ни одного числа или имени, если его нет в записях журнала.
3. ПРОВЕРКА
Для каждого утверждения проверь:
- Все имена/названия есть в процитированной записи? (да/нет)
- Все числа совпадают буквально с записью? (да/нет)
Если проверка не пройдена — не переписывай свободно, а выбери одно:
- удалить утверждение
- явно указать "источники расходятся: E1 говорит X, E3 говорит Y"
- написать "недостаточно данных"
4. Если между источниками есть конфликт — не выбирай "более убедительную"
цифру сам, покажи расхождение читателю.
Результат: Модель сначала выдаст таблицу из 3 записей с точными цитатами, потом — справку с пометками (E1), (E2), (E3) на каждое число, а в конце — явное указание, если цифры в источниках не совпадают, вместо того чтобы тихо выбрать одну версию.
Почему это работает
LLM легко подделывает доказательства не потому что «врёт специально», а потому что языковая привычка сильнее проверки фактов: модель ставит правдоподобную ссылку на источник, а конкретное число или имя в самом утверждении достаёт из общих знаний или домысливает. Наличие ссылки создаёт иллюзию, что всё проверено — хотя проверялась только структура цитирования, а не содержание.
Свободная самопроверка («проверь и исправь себя») тоже подводит: у модели нет границ, что можно менять, поэтому, исправляя одну неточность, она может ввести новую — просто потому что переписывает текст целиком, а не точечно.
Метод использует то, что LLM отлично соблюдает явно заданный формат — таблицы, нумерацию, жёсткие списки допустимых действий. Разделив «сырые факты» и «выводы» и ограничив исправление конкретным меню действий, вы убираете у модели свободу тихо на ходу менять содержание.
Рычаги управления: - Список допустимых действий при ошибке → сократи до «удалить / отказаться» для простых задач, не нужен весь набор из семи операций. - Допуск на числа → для дат и количеств требуй точное совпадение, для визуальных измерений (рост, вес на фото) — разреши небольшой разброс. - Классификатор сложности → для простых однофакторных вопросов пропускай журнал целиком, экономия времени и токенов.
Шаблон промпта
Собери точный ответ на вопрос: {вопрос}.
Источники: {список источников — тексты, скрины, документы}
1. ЖУРНАЛ ДОКАЗАТЕЛЬСТВ
Занеси каждый источник как запись:
- Номер (E1, E2...)
- Точный факт/цитата (без пересказа)
- Статус: АКТИВНО
2. ВЫВОД
Каждое утверждение — со ссылкой на номер записи.
Не используй имена, названия, числа, которых нет в журнале.
3. ПРОВЕРКА
Для каждого утверждения:
- Все сущности есть в процитированной записи?
- Все числа совпадают буквально (с учётом допуска {допуск})?
Если нет — выбери одно из:
- удалить утверждение
- показать расхождение между источниками
- написать "недостаточно данных"
Не переписывай утверждение свободно.
4. Если вопрос простой и источник один — пропусти журнал, ответь прямо.
Подставь: {вопрос} — что нужно узнать, {список источников} — что у тебя есть на входе, {допуск} — точное совпадение или разброс (для дат — точное, для визуальных оценок — ±10%).
🚀 Быстрый старт — вставь в чат:
Вот шаблон LedgerMind для проверяемых ответов на основе источников.
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, какие источники у тебя есть и насколько строгой должна быть проверка чисел — потому что без этого журнал доказательств не построить.
Ограничения
⚠️ Нужны реальные источники: если в диалоге нет вставленных документов/скринов, журнал нечего заполнять — метод бесполезен для вопросов «из головы».
⚠️ Не лечит ошибки в самих источниках: если исходный документ содержит неверную цифру, журнал зафиксирует её как «подтверждённую» — метод проверяет соответствие выводов источникам, а не правдивость источников.
⚠️ Требует дисциплины в ручном режиме: без автоматизации нужно следить, чтобы модель не пропускала шаг проверки в длинном диалоге — она может «забыть» протокол через несколько сообщений.
⚠️ Оригинал завязан на инструменты: в исследовании доказательства собираются автоматически (OCR, обрезка фото, поиск) через реальных агентов и проверяются отдельной судьёй-моделью. В чате «доказательства» — это только то, что вставил сам пользователь.
Ресурсы
LedgerMind: A Structured Evidence Runtime for Auditable Multimodal Agent Trajectories — Enjun Du, Hange Zhou, Chenxu Du, Siyi Liu, Zirong Chen, Ziyu Zheng, Yongqi Zhang (The Hong Kong University of Science and Technology, Guangzhou; The University of Hong Kong; Tsinghua University; University of Sussex).
