Към основното съдържание

Дайте на своя AI агент Beancount регистър с bea

Дайте на AI агент две счетоводни задачи с bea: импортиране на банков CSV с преглед преди потвърждение и отговор на въпрос за баланс от BQL и отчет.

Дайте на външен AI агент две счетоводни задачи и дръжте всяка промяна в ledger-а под ваш контрол: импортирайте банков CSV с проверка преди запис, след това отговорете на въпрос за баланс от заявка и отчетен изход.

Инсталирайте bea с CLI бърз старт. Локалните команди за импорт, заявки и отчети не изискват акаунт в Beancount.io. Вашият чат агент се нуждае само от собствен абонамент или API ключ. Само вграденият помощник bea ask изисква хоствани идентификационни данни, и тези рецепти не го използват.

Избирате между инструменти? Пет счетоводни инструмента за AI агенти сравнява Beancount.io, hledger, Xero, QuickBooks Online и Puzzle на същите критерии за агентски работни потоци, с датирани източници.

Какво прави агентът и какво прави bea​

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

Рецепта 1: импортиране на извлечение с предложени от агента категории​

Превърнете банков експорт във валидирани записи. Агентът предлага правилата за категоризация. Прегледът и проверката за дубликати решават какво се записва.

Предпоставки​

Нужни са ви bea и свежа демо директория. Без акаунт и без Python импортер.

Подготовка на входните данни​

Създайте директорията и ledger-а. Изричните --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 съдържанието:

Propose Beancount categorization rules for my bank CSV rows.
Suggest one TOML rule per merchant with a match pattern and a
destination expense account. Never change dates, payees, or amounts.
Leave rows you cannot categorize confidently unmatched: they post to
Expenses:Uncategorized with flag ! for my review. I run bea import
preview and apply locally. You do not write my ledger.

Изпълнете 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 готови, 0 точни дубликата, 0 възможни дубликата и излиза с 0. Той не записва нищо. Прилагането отчита Записани 3 записа. Проверката отчита без грешки. Опашката ! изброява единния несъпоставен ред от Unknown Shop на -9.99 USD. Заявката за баланс отчита 930.01 USD в разплащателната сметка. Повтарянето на прилагането отчита 0 готови, 3 точни дубликата и записва 0 записа.

Преглед и корекция​

Прекатегоризирайте реда ! умишлено във вашия ledger, след като го прочетете. Успешна проверка доказва само че ledger-ът е балансиран. Тя не казва нищо за това дали Expenses:Uncategorized е правилната сметка. За политиката за дубликати, обработката на конфликти и разширения Python път, следвайте ръководството за банков CSV импорт.

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

Отговорете на един въпрос от демо книгите: колко е отишло за хранителни стоки и гориво през август 2026. Агентът изготвя заявката. Само за четене команди произвеждат отговора.

Предпоставки​

Нужен ви е демо ledger-ът от рецепта 1 или вашите собствени книги. Всяка команда по-долу е само за четене.

Копирайте подканата за задачата​

Поставете тази подкана на вашия външен агент:

Draft a Beancount query (BQL) that answers: how much did I spend on
groceries and fuel in August 2026. Use my account names exactly as
listed by bea list open. Propose read-only commands only: bea query
or bea report with an explicit --file target. Do not propose ledger
edits to fix a surprising total. A surprising total means the query
or the books need review, not a compensating entry.

Изпълнете CLI еквивалентите​

Изпълнете изготвената заявка срещу изрична ledger цел, след това проверете с отчет:

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.

Преглед и корекция​

Заявка срещу грешно име на сметка отпечатва (няма редове) на stderr и все пак излиза с 0. Сравнете името с изхода от bea list open и изпълнете заявката отново. Никога не коригирайте изненадваща сума, като редактирате ledger-а, за да съответства на отговора. Поправете заявката или поправете книгите, след това стартирайте отново 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

Тези три команди произвеждат ledger-а по-долу. Изтеглете го като 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. Всяко правило назовава сметка, която началният ledger отваря.

[[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 готови, 0 точни дубликата, 0 възможни дубликата и излиза с 0. Прилагането отчита Записани 3 записа. Проверката отчита без грешки. Заявката за баланс държи 2958.50 USD в разплащателната сметка. Отчетът за приходите и разходите показва 2000.00 USD от консултантски приходи срещу 41.50 USD от разходи, за нетна печалба от 1958.50 USD. Повтарянето на прилагането отчита 0 готови, 3 точни дубликата и записва 0 записа.

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

Подканите по-горе подхождат за еднократни задачи, управлявани ръчно. Задачи, които повтаряте седмично, подхождат на версионираните умения в продуктовото хранилище. Всяка връзка по-долу отваря текущия източник на умението, който носи свои собствени инструкции за настройка и задействане. Тази CMS не пази копия от тези файлове.

  • Започнете свеж ledger от празна директория с beancount-init. Той създава ledger файла, Fava runner и Python проект.
  • Превърнете банков експорт в категоризирани записи с beancount-import. Той поставя на етап всеки ред, предлага категории от ledger историята, пропуска вече импортирани редове и записва само след потвърждение. Рецепта 1 по-горе е ръчната форма на тази задача.
  • Докажете, че една сметка съответства на извлечението си с beancount-reconcile. Той сравнява ledger-а с извлечението и поставя assertion за краен баланс след потвърждение.
  • Отговорете на въпрос от книгите с beancount-ask. Той изпълнява само за четене заявки и показва всяка заявка до нейната цифра. Рецепта 2 по-горе е ръчната форма на тази задача.
  • Приключете месец с beancount-close. Той реконсилира всяка активна сметка, проверява повтарящи се записи и флагове за преглед, и записва приключването като commit.

Пълната колекция живее в каноничното дърво на уменията.

Дайте bea на агент с шел възможности, или заредете умение в клиент​

Това са две отделни стъпки. Инсталирането на bea никога не инсталира или конфигурира умения.

Агент с шел възможности се нуждае от командата в своя път. Инсталирайте я с CLI бърз старт, след това агентът изпълнява същите bea команди, които рецептите показват. Агентът предлага, вие преглеждате, и bea валидира.

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

bea ask зарежда своите собствени умения отделно, от SKILL.md до вашия ledger — вижте Разширяване на bea ask с умения.

Въпроси от типа ask без bea ask​

Рецепта 2 отговаря на ledger въпроси с външен агент плюс само за четене 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 септемврийска печалба — съответстващи на очакванията по-горе. Единственият му неуспешен опит за прилагане (заключена sandbox кеш памет, възстановена чрез XDG_CACHE_HOME) е запазен в записа. Прочетете пълната подкана, последователността от инструменти и проверката в транскрипта на изпълнението, или преиграйте работния път с демо скрипта и неговия записан изход.

Това изпълнение е CLI-изходна проверка на единично изпълнение, не бенчмарк на модели. То не твърди нищо за други клиенти, счетоводна точност като цяло, или неконтролирана производствена употреба.

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

Разгледайте по-широкото изследване зад тези работни потоци в Bean Labs, изследователския център за счетоводна автоматизация на Beancount.io.

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