Использование LLM для автоматизации и улучшения бухгалтерского учета с помощью Beancount
Beancount - это система бухгалтерского учета с использованием простого текста и двойной записи, которая в последнее время стала более доступной благодаря большим языковым моделям (LLM), таким как ChatGPT. Технические пользователи – включая владельцев бизнеса, основателей стартапов, инженеров и бухгалтеров – могут использовать LLM для автоматизации утомительных задач бухгалтерского учета, сохраняя при этом гибкость и прозрачность текстового реестра Beancount. В этом отчете рассматриваются практические способы, с помощью которых LLM могут оптимизировать рабочие процессы Beancount, включая категоризацию транзакций, обнаружение аномалий, интеллектуальные предложения для бухгалтерских записей, создание записей на естественном языке и выверку выписок. Примеры запросов и результатов приведены для иллюстрации этих возможностей, а также советы по реализации, существующие инструменты и обсуждение возможностей и ограничений.
Автоматизированная категоризация транзакций с помощью LLM
Одним из наиболее трудоемких аспектов бухгалтерского учета является категоризация транзакций (присвоение их правильным счетам) на основе дескрипторов, таких как получатель, заметка или сумма. LLM могут значительно ускорить этот процесс, используя свое понимание языка и широкие знания для предложения подходящих счетов расходов или доходов для каждой транзакции.
Например, если в вашем реестре Beancount есть некатегоризированная запись:
2023-02-28 * "Amazon.com" "Подставка для ноутбука, ... Портативная подставка для ноутбука..."
Assets:Zero-Sum-Accounts:Amazon-Purchases -14.29 USD
(отсутствует счет расходов)
Запрос к LLM может запросить подходящий счет расходов для балансировки транзакции. В одном реальном случае LLM классифицировала покупку подставки для ноутбука на Amazon как Expenses:Office-Supplies:Laptop-Stand. Аналогичным об разом, он отнес покупку щеток стеклоочистителя к Expenses:Car:Maintenance, а кухонный прибор к Expenses:Kitchen:Appliances, разумно выводя категории из описания товара. Эти примеры показывают, как LLM может использовать контекст (получатель и описание) для выбора подходящего счета Beancount.
Современные инструменты, такие как Beanborg, интегрируют эту возможность: Beanborg — это импортер Beancount с открытым исходным кодом, который может автоматически сопоставлять данные транзакций с правильными счетами расходов. В основном он использует механизм, основанный на правилах, но также поддерживает машинное обучение и даже ChatGPT для предложений по категоризации. С помощью Beanborg вы можете импортировать CSV-файл банка и автоматически классифицировать большинство записей (например, получатель, содержащий "Fresh Food Inc.", может быть отнесен к категории Expenses:Groceries с помощью правил или помощи LLM).
Как использовать LLM для категоризации: Вы можете передать пакет описаний транзакций модели, такой как GPT-4, и попросить ее назначить вероятные счета. Один из предложенных рабочих процессов: используйте GPT для категориз ации небольшой партии расходов, исправьте любые ошибки вручную, затем используйте встроенные плагины импорта Beancount (например, smart_importer) для извлечения уроков из этих примеров для будущих транзакций. Этот гибридный подход использует широкие знания LLM для новых или необычных транзакций (например, делая вывод, что PILOT Parallel Calligraphy Pens должны относиться к счету расходов на товары для искусства) и затем последовательно применяет эти категории в будущем.
Пример запроса и ответа: В таблице ниже показано, как пользователь может взаимодействовать с LLM для категоризации транзакций:
| Запрос пользователя (детали транзакции) | Предлагаемый LLM счет/запись |
|---|---|
Категоризировать: "Starbucks - Латте $5.00 2025-04-01" | Предложение: Расход – вероятно Expenses:Food:Coffee (покупка кофе) |
Категоризировать: "Amazon.com - Bosch Задний стеклоочиститель $11.60" | Предложение: Expenses:Car:Maintenance (замена детали автомобиля) |
Категоризировать: "Выплата заработной платы от ACME Corp $5000" | Предложени е: Income:Salary (выплата заработной платы) |
Завершить запись: 2025-07-10 * "Office Depot" "чернила для принтера" Assets:Checking -45.00 USD | Добавляет: Expenses:Office:Supplies 45.00 USD (балансирует запись) |
В этих примерах LLM опирается на общие знания (Starbucks — это кофе, автомобильные запчасти Amazon связаны с обслуживанием автомобилей, заработная плата ACME — это доход), чтобы предложить правильный счет Beancount. Он может даже завершить бухгалтерскую запись, добавив отсутствующую балансирующую проводку (в случае с Office Depot, предлагая счет расходов на канцелярские товары для компенсации платежа). Со временем такая категоризация на основе ИИ может сэкономить время и уменьшить ручной труд при классификации транзакций.
Обнаружение аномалий и идентификация дубликатов
Помимо категориза ции, LLM могут помочь отметить аномалии в реестре – такие как дублирующиеся записи или необычные расходы – путем анализа описаний транзакций и закономерностей на обычном английском языке. Традиционное программное обеспечение может обнаруживать точные дубликаты с помощью хэшей или строгих правил (например, Beanborg использует хэш данных CSV для предотвращения повторного импорта одной и той же транзакции). Однако LLM может предоставить более контекстно-зависимый обзор.
Например, вы можете запросить у LLM список недавних транзакций и спросить: "Есть ли среди них какие-либо дубликаты или необычные выбросы?" Поскольку LLM превосходно справляются с контекстным анализом, они могут заметить, если две записи имеют одинаковую дату и сумму или очень похожие описания, и отметить их как потенциальные дубликаты. Они также могут распознавать закономерности нормальных расходов и выявлять отклонения. Как отмечается в одном источнике, "в контексте потока финансовых транзакций LLM может обнаружить аномальные привычки расходов", узнав, что является типичным, и определив то, что не подходит.
Пример необычной суммы: Если вы обычно тратите 30–50 долларов на топливо, но внезапно одна транзакция по топливу составляет 300 долларов, LLM может выделить это как аномалию ("эти расходы на топливо в десять раз больше, чем ваш обычный шаблон"). LLM выявляют аномалии, обнаруживая даже незначительные отклонения, которые системы, основанные на правилах, могут не заметить. Они учитывают контекст – например, время, категорию, частоту – а не просто жесткие пороговые значения.
Пример дубликата: Учитывая две строки реестра, которые почти идентичны (один и тот же получатель и сумма в близкие даты), LLM может ответить: "Транзакции 2025-08-01 и 2025-08-02 на сумму 100 долларов США в ACME Corp, по-видимому, являются дубликатами." Это особенно полезно, если данные были введены из нескольких источников или если банк дважды провел транзакцию.
Хотя обнаружение аномалий на основе LLM все еще является новой областью, оно дополняет традиционные методы, объясняя почему что-то отмечено на естественном языке. Это может помочь человеку, проводящему проверку, быстро понять и решить проблему (например, п одтвердить дубликат и удалить одну запись или исследовать выброс расходов).
Интеллектуальные предложения по завершению журнала
LLM могут выступать в качестве интеллектуальных помощников, когда вы составляете или исправляете журнальные записи в Beancount. Они не только классифицируют транзакции, но и предлагают, как завершить частичные записи или исправить дисбалансы. Это похоже на интеллектуальное автозаполнение для вашего реестра.
Предложения по счетам и суммам: Предположим, вы вводите новую транзакцию с указанием получателя и суммы, но еще не решили, к какому счету она относится. LLM может предложить счет на основе описания (как описано в категоризации). Он также может обеспечить балансировку записи, предоставив дополнительную проводку. Например, пользователь может написать:
2025-09-10 * "Cloud Hosting Inc" "Ежемесячная плата за виртуальную машину"
Assets:Bank:Checking -120.00 USD
[Отсутствует вторая проводка]
Спросив LLM: "Что находится на другой стороне этой транзакции?", он может предложить: Expenses:Business:Hosting 120.00 USD для балансировки записи, признавая, что плата за облачный хостинг является бизнес-расходами.
В Google Group Beancount один пользователь продемонстрировал это, передав пакет односторонних записей покупок Amazon в ChatGPT и предложив ему "добавить классифицированные проводки расходов для балансировки каждой транзакции". GPT заполнил каждую недостающую проводку правдоподобным счетом расходов (хотя иногда слишком детализированным, например, создав счет только для "Подставки для ноутбука"). Это показывает, как LLM могут создавать полные журнальные записи, когда им предоставляются неполные данные.
Улучшение повествования: LLM могут даже помочь улучшить повествование или описания в записях. Если описание слишком загадочное (например, внутренний код из банковской выписки), вы можете попросить LLM переписать его более четко для реестра. Поскольку LLM хорошо обрабатывают естественный язык, они могут преобразовать "PUR CHK 1234 XYZ CORP" в "Чек № 1234 в XYZ Corp" для ясности.
Руководство и обучение: Со временем LLM можно интегрировать в ваш рабочий процесс редактирования (возможно, через плагин редактора или расширение Fava), чтобы предлагать вероятные завершения при вводе транзакции. Это аналогично тому, как редакторы кода используют ИИ для предложения завершения кода. В бухгалтерско м учете с использованием простого текста LLM может извлекать данные из существующих названий счетов и прошлых записей, чтобы рекомендовать, как завершить следующую. Например, если вы часто записываете Канцелярские товары, когда в получателе появляется "Staples", модель может выучить этот шаблон. Некоторые пользователи сообщают, что предложения ChatGPT можно уточнить после нескольких примеров, а затем обобщить с помощью плагина, такого как smart_importer, для будущих транзакций.
Таким образом, LLM предоставляют "вторую пару глаз" для ваших записей, предлагая завершения и исправления, которые соответствуют правилам двойной записи Beancount.
Создание записей Beancount из неструктурированных входных данных
Возможно, одним из самых мощных способов использования LLM является преобразование неструктурированной финансовой информации – необработанного текста, квитанций или описаний на естественном языке – в структурированные записи Beancount. Это позволяет пользователям говорить или вставлять данные в свободной форме и получать взамен действительные записи реестра.
От естественного языка к записи: Вы можете запросить у LLM предложение, например:
"Я купил канцелярские товары (чернила для принтера) в Office Depot за 45 долларов 10 июля 2025 года, оплатил со своего расчетного счета."
Способный LLM интерпретирует это и выдаст что-то вроде:
2025-07-10 * "Office Depot" "чернила для принтера"
Assets:Bank:Checking -45.00 USD
Expenses:Office:Supplies 45.00 USD
Он определил дату, получателя, повествование, сумму и угадал соответствующие счета (зачислив банковский актив, дебетовав расходы на канцелярские товары). Это, по сути, превращает отчет о расходах на простом английском языке в правильно отформатированную журнальную запись Beancount. Недавние исследования даже использовали Beancount в качестве целевого формата для оценки понимания LLM бухгалтерского учета с двойной записью, с неоднозначными результатами (LLM часто нуждаются в тщательных запросах, чтобы получить правильный синтаксис). Однако при хорошо составленном запросе или нескольких примерах модели, такие как GPT-4, обычно могут создать правильную запись для простых сценариев.
OCR в реестр: LLM с возможностями распознавания изображений или OCR (например, GPT-4 с вводом изображений или специализированные инструменты) могут пойти еще дальше: взять изображение квитанции или PDF-файл банковской выписки и извлечь из него транзакции. Например, вы можете показать ChatGPT фотографию квитанции и запросить запись Beancount – модель проанализирует дату, общую сумму, поставщика и, возможно, налог, а затем выведет запись с этими данными. В одном из руководств отмечается, что ChatGPT может преобразовывать данные из счетов-фактур или квитанций в "чистые, отформатированные таблицы, пригодные для бухгалтерского учета", которые затем можно сопоставить со счетами Beancount. Аналогичным образом, CSV или Excel-файл можно передать в LLM с инструкциями по выводу транзакций Beancount – действительно, пользователи предложили GPT "написать скрипт Python для анализа CSV и вывода записей Beancount" в качестве способа автоматизации импорта.
Обработка нескольких транзакций: LLM также могут обрабатывать пакетные входные данные. Вы можете вставить список необработанных транзакций (даты, описания, сумм ы) и запросить у модели создание соответствующих строк реестра Beancount. Пример запроса от сообщества использует подробную инструкцию для GPT-4, чтобы "преобразовать содержимое CSV в формат Beancount", соблюдая при этом принципы бухгалтерского учета. На выходе получается полный .beancount файл, охватывающий все транзакции. Этот подход, по сути, позволяет непрограммистам достичь того, что сделали бы пользовательские скрипты импорта, инструктируя ИИ на естественном языке.
Имейте в виду, что, хотя LLM впечатляюще анализируют и генерируют текст, проверка имеет решающее значение. Всегда проверяйте записи, созданные из неструктурированных входных данных. Проверьте даты, суммы и баланс дебетов/кредитов (компилятор Beancount обнаружит ошибки дисбаланса). Как подчеркивается в одном исследовании, без тщательного руководства LLM может создавать полностью правильные транзакции с двойной записью лишь небольшую часть времени. Предоставление примеров шаблонов в вашем запросе и явное напоминание модели о синтаксисе Beancount значительно повысит точность.