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

Бухгалтерский учёт с AI-агентами

Дайте внешнему AI-агенту две задачи по ведению бухгалтерии: импорт банковского CSV с проверкой через предпросмотр и ответ на вопрос о балансе на основе BQL и вывода отчётов.

Поручите внешнему AI-агенту две задачи по ведению бухгалтерии, сохраняя контроль над каждым изменением в журнале: импорт банковского CSV с проверкой через предпросмотр, а затем ответ на вопрос о балансе на основе запроса и вывода отчёта.

Установите bea через краткое руководство по CLI. Локальные команды импорта, запросов и отчётов не требуют учётной записи Beancount.io. Вашему чат-агенту нужна только собственная подписка или API-ключ. Только встроенный помощник bea ask требует размещённые учётные данные, и эти рецепты его не используют.

Что делает агент и что делает bea

Агент предлагает категории и составляет черновики запросов. Bea проверяет структуру журнала и вычисляет итоги. Вы сами выполняете каждую команду ниже. Агент никогда не пишет напрямую в ваш журнал.

Рецепт 1: импорт выписки с категориями, предложенными агентом

Превратите выгрузку из банка в проверенные записи. Агент предлагает правила категоризации. Предпросмотр и проверка дубликатов решают, что будет записано.

Предварительные требования

Вам нужны bea и новая демонстрационная директория. Никакой учётной записи и никакого Python-импортёра не требуется.

Подготовка входных данных

Создайте директорию и журнал. Явные цели --file держат каждую команду направленной на демонстрационные книги.

mkdir ai-agent-demo && cd ai-agent-demo
bea --no-input init books --currency USD --date 2026-08-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-08-01 --account Expenses:Transport:Fuel -c USD

Сохраните этот пример как statement.csv:

Date,Payee,Narration,Amount
2026-08-02,Whole Foods,groceries,-20.00
2026-08-03,Shell,gas,-40.00
2026-08-04,Unknown Shop,mystery,-9.99

Сохраните эти правила категоризации как rules.toml:

[[rule]]
match = "whole foods|trader joe|corner market"
account = "Expenses:Groceries"
 
[[rule]]
match = "shell|chevron|exxon"
account = "Expenses:Transport:Fuel"

Скопируйте промпт для задачи

Вставьте этот промпт вашему внешнему агенту вместе с содержимым CSV:

Предложите правила категоризации Beancount для строк моего банковского CSV.
Предложите одно правило TOML для каждого продавца с шаблоном соответствия и
целевым счетом расходов. Никогда не меняйте даты, получателей или суммы.
Строки, которые вы не можете уверенно категоризировать, оставьте без соответствия:
они попадут на Expenses:Uncategorized с флагом ! для моей проверки. Я запускаю
предпросмотр bea import и применяю изменения локально. Вы не пишете в мой журнал.

Выполните эквиваленты CLI

Сначала предпросмотр, затем примените проверенные записи и проверьте результат:

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee,narration=Narration --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --apply
bea --file books/main.bean check
bea --file books/main.bean list transaction --flag '!'
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"

Проверьте ожидаемый вывод

Предпросмотр сообщает 3 ready, 0 exact duplicates, 0 possible duplicates и завершается с кодом 0. Он ничего не записывает. Запуск apply сообщает Wrote 3 entries. Проверка check не сообщает об ошибках. Очередь ! перечисляет одну несоответствующую строку от Unknown Shop на -9.99 USD. Запрос о балансе сообщает 930.01 USD на расчётном счёте. Повторный запуск apply сообщает 0 ready, 3 exact duplicates и записывает 0 записей.

Проверка и исправление

Перекатегоризируйте строку ! осознанно в вашем журнале после её прочтения. Успешная проверка check только доказывает, что журнал сбалансирован. Она ничего не говорит о том, является ли Expenses:Uncategorized правильным счётом. По вопросам политики дубликатов, обработки конфликтов и продвинутого пути через Python следуйте руководству по импорту банковских CSV.

Рецепт 2: ответ на вопрос о балансе без записи

Ответьте на один вопрос из демонстрационных книг: сколько было потрачено на продукты и топливо в августе 2026 года. Агент составляет черновик запроса. Только для чтения команды дают ответ.

Предварительные требования

Вам нужен демонстрационный журнал из рецепта 1 или ваши собственные книги. Каждая команда ниже доступна только для чтения.

Скопируйте промпт для задачи

Вставьте этот промпт вашему внешнему агенту:

Составьте запрос Beancount (BQL), который отвечает: сколько я потратил на
продукты и топливо в августе 2026 года. Используйте названия моих счетов точно
так, как они перечислены в bea list open. Предлагайте только команды для чтения:
bea query или bea report с явной целью --file. Не предлагайте правки журнала
для исправления удивительного итога. Удивительный итог означает, что запрос
или книги требуют проверки, а не компенсирующей записи.

Выполните эквиваленты CLI

Выполните составленный запрос с явной целью журнала, затем перепроверьте с помощью отчёта:

bea --file books/main.bean query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-08

Машинные потребители добавляют глобальный флаг --json перед подкомандой:

bea --file books/main.bean --json query "SELECT account, sum(position) WHERE account ~ 'Expenses' GROUP BY account"

JSON-конверты, коды выхода и размещение глобальных флагов описаны в справочнике CLI. Руководство по языку запросов документирует полный синтаксис BQL.

Проверьте ожидаемый вывод

Запрос сообщает 20.00 USD для Expenses:Groceries, 40.00 USD для Expenses:Transport:Fuel и 9.99 USD для Expenses:Uncategorized. Продукты плюс топливо — 60.00 USD. Отчёт о прибылях и убытках согласуется: 69.99 USD августовских расходов с чистой прибылью -69.99 USD. JSON-вариант возвращает те же строки внутри data.rows с метаданными столбцов в data.columns.

Проверка и исправление

Запрос с неправильным названием счёта выводит (no rows) в stderr и всё равно завершается с кодом 0. Сравните название с выводом bea list open и запустите запрос снова. Никогда не исправляйте удивительный итог, редактируя журнал, чтобы соответствовать ответу. Исправьте запрос или исправьте книги, затем повторно запустите bea check.

Первая задача: сбалансируйте три синтетические строки

Портативная первая задача с явными входными данными и независимо выведенным ответом. Скачайте три файла ниже, выполните импорт и проверьте два итога. Без учётной записи и без оформления заказа.

Откройте книги на 2026-09-01 в USD с 1000 USD на расчётном счёте. Проведите три сентябрьские строки: платёж клиента на 2000.00 USD, счёт за хостинг на 29.00 USD и посещение кафе на 12.50 USD. Расчётный счёт заканчивается на 2958.50 USD (1000 + 2000 - 29 - 12.50). Сентябрьская прибыль — 1958.50 USD (2000 - 29 - 12.50). Оба ожидания вытекают из этой арифметики, а не из вывода отчёта.

Подготовка входных данных

Создайте директорию и откройте два счёта, которых нет в шаблоне. Expenses:Dining уже присутствует в CLI-шаблоне.

mkdir agent-challenge && cd agent-challenge
bea --no-input init books --currency USD --date 2026-09-01 --opening-balance "Assets:Checking 1000"
bea --file books/main.bean add open --date 2026-09-01 --account Income:Consulting -c USD
bea --file books/main.bean add open --date 2026-09-01 --account Expenses:Software -c USD

Эти три команды создают журнал ниже. Скачайте его как main.bean вместо того, чтобы вводить вручную.

option "title" "Personal ledger"
option "operating_currency" "USD"
 
; Add more accounts with bea add open. Amounts on credit accounts are negative.
; bea import books rows it cannot categorize to Expenses:Uncategorized with flag '!'.
2026-09-01 open Assets:Checking USD
2026-09-01 open Assets:Savings USD
2026-09-01 open Assets:Cash USD
2026-09-01 open Liabilities:CreditCard USD
2026-09-01 open Income:Salary USD
2026-09-01 open Income:Interest USD
2026-09-01 open Expenses:Groceries USD
2026-09-01 open Expenses:Dining USD
2026-09-01 open Expenses:Rent USD
2026-09-01 open Expenses:Transport USD
2026-09-01 open Expenses:Utilities USD
2026-09-01 open Expenses:Fees USD
2026-09-01 open Expenses:Uncategorized USD
2026-09-01 open Equity:OpeningBalances USD
 
2026-09-01 * "Opening balances"
  Assets:Checking          1000 USD
  Equity:OpeningBalances  -1000 USD
 
2026-09-01 open Income:Consulting USD
 
2026-09-01 open Expenses:Software USD

Сохраните эту выписку как statement.csv или скачайте её как statement.csv:

Date,Payee,Amount
2026-09-02,Client,2000.00
2026-09-03,Hosting,-29.00
2026-09-04,Cafe,-12.50

Сохраните эти правила как rules.toml или скачайте их как rules.toml. Каждое правило называет счёт, открытый в стартовом журнале.

[[rule]]
match = "client"
account = "Income:Consulting"
 
[[rule]]
match = "hosting"
account = "Expenses:Software"
 
[[rule]]
match = "cafe"
account = "Expenses:Dining"

Выполните задачу

Сначала предпросмотр, затем примените и проверьте. Суммы, даты, названия полей и названия счетов идентичны в любой локали. Переведён только текст вокруг них.

bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml
bea --file books/main.bean import statement.csv --csv date=Date,amount=Amount,payee=Payee --account Assets:Checking --rules rules.toml --apply
bea --file books/main.bean check
bea --file books/main.bean query "SELECT account, sum(position) WHERE account = 'Assets:Checking' GROUP BY account"
bea --file books/main.bean report income-statement --time 2026-09

Проверьте ожидаемый вывод

Предпросмотр сообщает 3 ready, 0 exact duplicates, 0 possible duplicates и завершается с кодом 0. Запуск apply сообщает Wrote 3 entries. Проверка check не сообщает об ошибках. Запрос о балансе показывает 2958.50 USD на расчётном счёте. Отчёт о прибылях и убытках показывает 2000.00 USD дохода от консалтинга против 41.50 USD расходов, что даёт чистую прибыль 1958.50 USD. Повторный запуск apply сообщает 0 ready, 3 exact duplicates и записывает 0 записей.

Когда рецепт становится повторяющейся задачей

Промпты выше подходят для разовых задач, выполняемых вручную. Задачи, которые вы повторяете еженедельно, подходят для версионированных навыков в репозитории продукта. Каждая ссылка ниже открывает текущий исходник навыка, который несёт собственные инструкции по настройке и триггерам. Эта CMS не хранит копии этих файлов.

  • Начните свежий журнал из пустой директории с помощью beancount-init. Он создаёт файл журнала, раннер Fava и Python-проект.
  • Превратите банковскую выгрузку в категоризированные записи с помощью beancount-import. Он размещает каждую строку, предлагает категории из истории журнала, пропускает уже импортированные строки и записывает только после подтверждения. Рецепт 1 выше — это ручная форма этой задачи.
  • Докажите, что один счёт соответствует своей выписке, с помощью beancount-reconcile. Он сверяет журнал с выпиской и фиксирует проверку баланса на конец периода после подтверждения.
  • Ответьте на вопрос по книгам с помощью beancount-ask. Он выполняет запросы только для чтения и показывает каждый запрос рядом с его числом. Рецепт 2 выше — это ручная форма этой задачи.
  • Закройте месяц с помощью beancount-close. Он сверяет каждый активный счёт, проверяет повторяющиеся записи и флаги проверки и фиксирует закрытие как коммит.

Полная коллекция находится в каноническом дереве навыков.

Дайте агенту с доступом к оболочке bea или загрузите навык в клиент

Это два отдельных шага. Установка bea никогда не устанавливает и не настраивает навыки.

Агенту с доступом к оболочке нужна команда в его пути. Установите её через краткое руководство по CLI, затем агент выполняет те же команды bea, которые показаны в рецептах. Агент предлагает, вы проверяете, а bea проверяет.

Навык загружается в сам клиент агента через механизм навыков этого клиента. Репозиторий продукта предоставляет одно каноническое дерево обоим поддерживаемым клиентам: Claude Code читает его в .claude/skills, а Codex — в .agents/skills, как связанные директории в один и тот же исходник. Укажите местоположение навыков клиента на нужную папку навыка и продолжайте читать его текущий исходник для триггерных фраз и обновлений.

Вопросы в стиле ask без bea ask

Рецепт 2 отвечает на вопросы по журналу с помощью внешнего агента плюс команды bea query и bea report только для чтения. Этот путь локальный. Он не требует учётной записи и дополнительной установки.

bea ask — это отдельный встроенный помощник. Он не является ни рецептом выше, ни навыком beancount-ask. Он направляет вопрос через размещённый AI-сервис, поэтому ему нужен дополнительный пакет ask и размещённые учётные данные, как описано в справочнике CLI. Сначала установите базовый CLI, затем добавьте дополнительный пакет только когда вам нужны размещённые ответы.

Процитированные выводы и проверка CLI

Каждая команда выше была выполнена с опубликованным пакетом bea 0.1.0 в свежей директории. Процитированные количества, балансы и сообщения — это проверка CLI.

Один клиент завершил первую задачу на свежей копии загрузок без заранее предоставленных правил. Muse Code 1.1.1 (модель muse-spark-1.3-contributor) вывел свою собственную категоризацию, предпросмотрел 3 готовых без записи, применил 3 записи и сообщил 2958.50 USD на расчётном счёте с прибылью сентября 1958.50 USD — что соответствует ожиданиям выше. Его одна неудачная попытка apply (блокировка кэша в песочнице, восстановленная через XDG_CACHE_HOME) сохранена в записи. Прочитайте полный промпт, последовательность инструментов и проверку в транскрипте выполнения или воспроизведите рабочий путь с помощью демонстрационного скрипта и его захваченного вывода.

Этот запуск — проверка вывода CLI для одного выполнения, а не бенчмарк модели. Он ничего не утверждает о других клиентах, точности бухгалтерии в целом или неконтролируемом производственном использовании.

Полная история доказательства — входные данные, методология, наблюдаемые результаты, сбои, ограничения и загрузки — опубликована как Может ли ваш агент сбалансировать эти книги?.

Источник: https://beancount.io/ru/docs/Solutions/accounting-with-ai-agents

10 мин чтения

ИИ-агенты Intuit для расчёта зарплаты и налога с продаж: что на самом деле меняет бухгалтерия «под ключ»

Агент Intuit QuickBooks для расчёта зарплаты собирает и проверяет отработанные…

ai
automation
15 мин чтения

Агентная коммерция наступила: как учитывать и сверять продажи, совершённые ИИ-покупками

AI-агенты теперь совершают покупки от имени клиентов через те же карточные…

ai
e-commerce
4 мин чтения

AI-агенты Anthropic Claude для финансов: что малый бизнес получит на самом деле в 2026 году

Anthropic Claude для малого бизнеса и 10 финансовых агентов (KYC, сверка) — 15…

small-business
ai
9 мин чтения

Bitwave только что открыла исходный код «Agentic Finance»: что происходит, когда ИИ-агенты перестают пользоваться вашим бухгалтерским ПО, как человек

Bitwave открыла исходный код агентно-ориентированного бухгалтерского CLI и…

ai
accounting-software
8 мин чтения

ИИ-агенты по покупкам уже покупают: руководство для малого продавца по UCP, ACP и «земельному захвату» протоколов 2026 года

Четыре конкурирующих протокола агентной коммерции — UCP от Google, ACP от…

ai
e-commerce