Перейти к основному содержимому
Beancount.io Logo

Сможет ли ваш агент свести эти книги?

Опубликовано 5 мин чтенияMike ThriftMike Thrift
Сможет ли ваш агент свести эти книги?

Один задокументированный запуск агента провёл синтетический ledger из трёх строк от банковского CSV до сведённых книг. Начальный остаток был 1000 USD, в выписке было три строки, а ожидаемые ответы были выведены арифметически до любого отчёта: проверка сходится на 2958.50 USD, прибыль за сентябрь — 1958.50 USD. Запуск точно попал в эти числа, после одной реальной ошибки, которую агент сам диагностировал.

Входные данные

Задача состоит из трёх опубликованных файлов в каталоге /downloads/agent-accounting/, полный сценарий описан в руководстве по ведению учёта с ИИ-агентами. Книги открываются 2026-09-01 в долларах США с 1000 USD на счёте Assets:Checking. В выписке три строки за сентябрь: платеж клиента 2000.00 USD от 2026-09-02, счёт за хостинг -29.00 USD от 2026-09-03 и посещение кафе -12.50 USD от 2026-09-04. Правила относят клиента к Income:Consulting, хостинг — к Expenses:Software, кафе — к Expenses:Dining, и каждый счёт, упомянутый в правилах, открыт в стартовом ledger на требуемую дату.

Ожидания вытекают из строк плюс начального остатка, независимо от вывода любого отчёта: 1000 + 2000 - 29 - 12.50 даёт 2958.50 USD на checking, а 2000 - 29 - 12.50 даёт 1958.50 USD прибыли за сентябрь. Изменённый вход или неверное ожидание приводят к провалу проверки, а не к печати правдоподобного отчёта.

Методология

Два слоя, разделённые между собой. Во-первых, установленный проверочный CLI-скрипт (scripts/check-agent-accounting.py, привязанный к bea 0.1.0) выполняет запросы preview, apply, повторный apply, check, balance и income-statement в свежей временной директории с изолированной конфигурацией. Он утверждает, что preview сообщает о 3 готовых и ничего не записывает, первый apply записывает 3 записи, повторный apply сообщает о 0 готовых с 3 точными дубликатами и ничего не записывает, побайтовая идентичность сохраняется после preview и отклонённых записей, check чист, и обе суммы совпадают с приведённой выше арифметикой. Он также пытается выполнить несбалансированную транзакцию (Assets:Checking -5 USD против Expenses:Dining 4 USD), требует код выхода 1 и проверяет, что байты ledger не изменились.

Во-вторых, один реальный запуск агента на свежей копии файлов для скачивания. Клиент — muse 1.1.1 (Muse Code) с моделью muse-spark-1.3-contributor, запущенный без головы с инструментами shell и записи файлов внутри рабочей директории, веб-инструменты отключены, вмешательства человека во время запуска не было. Важно: файл rules.toml не предоставлялся — агент сам вывел свою категоризацию из открытых счетов ledger.

Наблюдаемые результаты

Агент совершил 22 вызова инструментов (21 shell плюс 1 запись файла) и завершился с кодом 0. Он изучил CSV и 16 открытых счетов, прочитал справку CLI, написал собственный rules.toml (буквальные совпадения с заглавными буквами, эквивалентные каноническим шаблонам, поскольку сравнение регистронезависимо), предварительно просмотрел 3 готовых без записи, применил 3 записи и выполнил чистый check. Его сообщённые суммы составили 2958.50 USD на checking и 1958.50 USD прибыли за сентябрь. Оператор после этого повторно выполнил оба запроса только для чтения против ledger агента и подтвердил те же цифры относительно независимых ожидаемых значений.

Короткая демонстрация ниже детерминированно воспроизводит этот рабочий путь из канонических файлов для скачивания. Это повтор, а не живой запуск:

$ bea --version
bea 0.1.0
$ bea import (preview)
csv → Assets:Checking: 3 ready, 0 exact duplicates, 0 possible duplicates
$ bea import --apply
Wrote 3 entries to $WORK/books/main.bean.
$ bea check
$WORK/books/main.bean: no errors
$ bea balance Assets:Checking
    Checking                                      2,958.50 USD
$ bea report income-statement -t 2026-09
Net Profit: 1,958.50 USD
checking: 2958.50 USD (expected)
profit: 1958.50 USD (expected)
REPLAY OK: preview 3/0, applied 3, check clean, 2958.50 / 1958.50 USD.

Ошибки и вмешательства

В транскрипте сохранена исходная последовательность, включая ошибки. Два исследовательских вызова завершились безвредно (pip не был установлен; проверка пути для устанавливаемой версии нашла источники вне site-packages), и агент двинулся дальше. Одна ошибка была реальной: первый --apply завершился с Operation not permitted на блокировке кэша вне рабочей области, потому что песочница блокировала файлы блокировки в домашнем кэше. Агент изучил исходники продукта, обнаружил, что каталог кэша учитывает XDG_CACHE_HOME, повторно запустил с указанием на рабочую директорию, записал те же 3 записи, которые показывал предпросмотр, и удалил временный кэш после. Ни один ledger никогда не редактировался вручную; каждая запись появилась через bea import --apply. Вмешательства во время запуска: нет — он работал без головы с отключённым подтверждением, и человек просмотрел журнал событий только после факта.

Ограничения

Это проверка вывода CLI одного запуска одного клиента на синтетических данных — не бенчмарк модели. Он ничего не утверждает о других клиентах, о точности учёта в целом или о неконтролируемом производственном использовании. Важны два различия. Во-первых, суждение о категориях против структурной валидации: агент выбирал, к какому счёту относится каждая строка, и это суждение настолько же хорошо, насколько хорошо его чтение трёх однозначных строк. Всё, что bea проверял после — баланс, структура нулевой суммы, обнаружение дубликатов — является структурным: прохождение проверки доказывает, что ledger сбалансирован, но никогда не доказывает, что Expenses:Dining был правильным счётом для кафе. Во-вторых, ledger — игрушечный: три строки, одна валюта, нет неоднозначности категоризации, нет конфликтующей истории. Более сложная выписка проверила бы суждение; эта проверяет цикл.

Файлы для скачивания

Все входные данные задачи и полная запись запуска, как статические файлы, общие для всех локалей:

  • main.bean — стартовый ledger, проходит валидацию как опубликованный
  • statement.csv — три синтетические строки
  • rules.toml — детерминированные категории
  • agent-run.transcript.md — фактический промпт, полная последовательность инструментов с сохранёнными ошибками и независимая проверка
  • demo-replay.sh — маркированный детерминированный повтор рабочего пути (требуется bea 0.1.0 в PATH)
  • demo-replay.txt — захваченный вывод повтора с подписью, текстовая альтернатива просмотру демонстрации

Воспроизведите: скачайте три входных файла, сначала предпросмотр, затем apply, и проверьте две суммы против 1000 + 2000 - 29 - 12.50. В руководстве по агентам те же шаги выполняются вручную.

Поделиться этой статьёй

Источник: https://beancount.io/ru/bean-labs/research-logs/2026/09/10/can-your-agent-balance-these-books

Опубликовано: 10 сентября 2026 г.