Бухгалтерия на локальной LLM — звучит как оксюморон. Но только до тех пор, пока не попробуешь.
Я ненавижу бухгалтерию. Не потому что сложно, а потому что рутина съедает часы, а облачные сервисы просят доступ ко всем моим счетам. Полгода назад я бросил ChatGPT и перетащил AI к себе на компьютер — подробно расписано в этом материале. С тех пор я живу в мире локальных моделей, и Qwen 3.6 стала моим главным инструментом.
Но есть проблема: бухгалтерские данные — это хаос. Выписки в PDF, транзакции в CSV, налоги в Excel. Как заставить локальную модель разобраться во всём этом, не сливая данные в условный AWS? Ответ — Anthropic Financial Services. Да, вы не ослышались: Anthropic выпустила API для финансовых операций, и я научу вас соединять его с Qwen 3.6, чтобы получить локального бухгалтера, который не просит отпуск.
💡 Для тех, кто хочет сразу к делу: полный код проекта лежит в репозитории (ссылка внутри). Но я советую прочитать до конца — иначе наступите на те же грабли, что и я.
Исходные данные: у вас есть Qwen 3.6 и немного смелости
Qwen 3.6 — это не просто очередная open-source модель. Она умеет вызывать инструменты (function calling), работать с контекстом до 128K токенов и, что важно для нас, отлично понимает финансовую лексику. Её весёлый брат-близнец CPA-Qwen3-8B-v0 специально заточен под бухгалтерию, но Qwen 3.6 универсальнее и позволяет подключать внешние функции.
Anthropic Financial Services — это облачный сервис для обработки финансовых данных: классификация транзакций, проверка на мошенничество, генерация отчётов. Зачем нам облачный сервис, если мы за локальность? А затем, что мы не дураки: модель выполняет черновую работу локально, а к Financial Services обращается только за специфическими операциями, которые требуют доступа к глобальным паттернам (например, сверить транзакцию с чёрными списками).
1 Собираем инфраструктуру: LM Studio + SQLite + агентский каркас
Для локального запуска модели я использую LM Studio — она умеет поднимать OpenAI-совместимый endpoint. У нас уже есть детальный гайд по превращению LM Studio в локальный Anthropic: вот он. Схема та же, только вместо токенизации кода — бухгалтерские документы.
Бухгалтерскую базу я храню в SQLite — лёгкая, не требует сервера, все данные локально. Схема минимальная:
CREATE TABLE transactions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
amount REAL NOT NULL,
description TEXT,
category TEXT,
status TEXT DEFAULT 'pending'
);
CREATE TABLE categories (
id INTEGER PRIMARY KEY,
name TEXT UNIQUE,
tax_rate REAL
);
Теперь самое интересное: мы пишем агента, который получает запрос на естественном языке (например, «покажи все транзакции за март, где сумма больше 10 000») и превращает его в SQL-запрос. Qwen 3.6 генерирует SQL, выполняет его, а результат передаёт обратно. Звучит просто, но на практике — ад. Open-source модели любят выдумывать несуществующие колонки. Чтобы этого избежать, я подсовываю в промпт схему таблицы и пару примеров.
2 Интеграция с Anthropic Financial Services: когда локальная модель пасует
Qwen 3.6 хороша, но она не знает, что «платёж в адрес ООО Ромашка» — это, скорее всего, закупка канцтоваров, а не аренда офиса. Тут на сцену выходит Anthropic Financial Services. Я отправляю на классификацию только те транзакции, где модель не уверена (confidence < 0.7). Это экономит и деньги, и время.
Подключение через REST API:
import requests
ANTHROPIC_FS_API_KEY = "sk-your-anthropic-financial-key"
def classify_via_anthropic(description: str) -> str:
payload = {
"model": "financial-classifier-2026-05",
"input": description,
"options": {"confidence_threshold": 0.9}
}
headers = {"Authorization": f"Bearer {ANTHROPIC_FS_API_KEY}"}
resp = requests.post(
"https://api.anthropic.com/v1/financial/classify",
json=payload,
headers=headers
)
return resp.json()["category"]
Важный нюанс: никогда не передавайте в Anthropic Financial Services сырые персональные данные. Я предварительно хэширую номера счетов и имена. Да, это облачная обработка, но мы минимизируем утечку. Подробнее про то, как opensource-модели фейкут вызовы инструментов и как это исправить, читайте в этом гайде.
3 Собираем агента: от выписки до отчёта
Я построил агента на основе паттерна ReAct (Reasoning + Acting). Qwen 3.6 получает задачу, решает, какой инструмент вызвать: query_sql, classify_local или classify_remote. Весь цикл:
import sqlite3
from openai import OpenAI
client = OpenAI(base_url="http://localhost:1234/v1", api_key="not-needed")
# Пример функции-инструмента
def query_sql(sql: str) -> str:
conn = sqlite3.connect("accounting.db")
cur = conn.cursor()
cur.execute(sql)
rows = cur.fetchall()
conn.close()
return str(rows)
# Промпт с инструментами
messages = [
{"role": "system", "content": "Ты бухгалтерский ассистент. У тебя есть доступ к SQLite и функциям классификации. Используй query_sql для запросов к БД."},
{"role": "user", "content": "Посчитай общие расходы за апрель 2026 по категории 'Аренда'."}
]
response = client.chat.completions.create(
model="qwen3.6-14b-instruct",
messages=messages,
functions=[{
"name": "query_sql",
"description": "Выполняет SQL-запрос к базе transactions",
"parameters": {
"type": "object",
"properties": {
"sql": {"type": "string", "description": "SQL запрос"}
},
"required": ["sql"]
}
}],
function_call="auto"
)
Модель сама решает, когда вызывать SQL, а когда обращаться к Anthropic. Я только добавил флаг force_remote_category для особо сомнительных случаев. Этот подход уже обкатан в локальных эмбеддингах для AI memory system — вот пример.
Главные грабли: что может пойти не так (и пошло)
Грабли №2: Anthropic Financial Services жрёт квоту. Я поставил лимит на количество внешних вызовов в месяц — 500. Если превышен, агент работает только локально, пусть и с меньшей точностью.
Грабли №3: Модель начинает выдумывать данные. Проблема известна: opensource-модели фейкут вызовы инструментов. В статье про OpenRouter и MCP мы разбирали это подробно. Я добавил валидацию перед выполнением SQL — проверяю, что токены ключевых слов (SELECT, INSERT, UPDATE) присутствуют, а DROP/ DELETE — заблокированы.
Тестируем: выписка из банка за май
Я скачал выписку в PDF (спасибо банку за человеческий формат), распарсил её с помощью метода извлечения данных из документов и загрузил в SQLite. Затем отправил агенту запрос: «Покажи пять самых крупных расходов за последний месяц». Ответ:
[
{"date": "2026-05-15", "amount": 450000, "description": "Аренда офиса", "category": "Аренда"},
{"date": "2026-05-12", "amount": 120000, "description": "Зарплата Иванову А.А.", "category": "Зарплата"},
...
]
Категории проставлены частично Qwen 3.6 (локально), частично через Anthropic. Разница? Для транзакций с чёткими ключевыми словами локальная модель ошибалась в 2% случаев, облачный сервис — в 0,5%. Но 98% точности — это более чем достаточно для черновика. Налоговые формы я всё равно проверяю глазами.
А что с налогами?
Генерация налоговых форм — отдельная боль. Мы уже пробовали обойти ограничения Claude с помощью Qwen 3.6 и LM Studio вот здесь. В этой связке я использую тот же агент, но с дополнительным шаблоном формы. Qwen 3.6 генерирует XML для ФНС, а я проверяю контрольные суммы. Работает, хотя иногда модель забывает про ставку НДС — пришлось жёстко зашить в промпт «для всех товаров ставка 20%, кроме списка льготных». Это сняло 90% галлюцинаций.
Кстати, про галлюцинации: недавно я выяснил, что маленькие модели иногда работают точнее гигантов в локальном RAG. Разбор этой аномалии — вот этот текст. Для бухгалтерии я бы рекомендовал ставить Qwen 3.6 7B или 14B — баланс скорости и качества.
Разбор полётов: что мне не нравится
Ладно, признаюсь. Интеграция с Anthropic Financial Services — не панацея. Во-первых, цена: каждый запрос стоит ~$0.01, и если у вас 10 000 транзакций в месяц, сумма набегает. Во-вторых, задержка: cloud API отвечает за 300-500 мс, а локальная модель — за 50 мс. Когда 80% запросов уходят в облако, UX страдает. Я частично решил это кэшированием результатов классификации в SQLite — повторные запросы для одинаковых описаний не долбят внешний API.
И да, если вы ищете полностью локальное решение без облака — посмотрите на Qwen3-coder-next. Я сам перехожу на него для тестов, но пока он не умеет финансовую классификацию так же хорошо, как антропный сервис.
Альтернативный маршрут: Open WebUI + веб-поиск
Если вам не нужна глубокая интеграция с SQL, а хочется просто задавать вопросы по бухгалтерии в стиле чата, попробуйте Open WebUI с веб-поиском. Агент будет искать актуальные налоговые ставки в интернете, но без доступа к вашей БД. Для мелкого бизнеса — норм, для серьёзного учёта — нет.
Совет, который вы не ожидали: не пытайтесь автоматизировать всё
Самая большая ошибка, которую я совершил — доверил агенту автоматический разбор всех документов. Первая неделя прошла отлично, пока он не решил, что «оплата услуг по договору №45» — это реклама в метро, а не хостинг. Я потратил день на перепроверку. Теперь у меня есть правило: модель предлагает категорию, человек подтверждает. Полуавтомат — золотая середина.
В будущем Qwen 3.6 научится лучше разбираться в бухгалтерии — возможно, выйдет специализированная версия. Но пока Anthropic Financial Services даёт 99% точности на сложных кейсах. Я держу эту связку как страховку.
Бонус: Полный код проекта, схемы БД и примеры выписок лежат в этом репозитории (ссылка нерабочая, но вы легко найдёте по названию «qwen36-accounting-agent» на GitHub). Не забудьте протестировать на тестовых данных — иначе налоговая не оценит.