Решения · Финансовые услуги
Агент, который классифицирует денежные движения, выбирая из закрытого списка, а не составляя предложение, которое затем кто-то интерпретирует.
В финансовой организации полезный агент не дает советов и ничего не одобряет: он читает документы и транзакции, относит их к категории из фиксированного набора, говорит, насколько он уверен, и может ответить «не знаю». Остальное — решение, одобрение, политика — остается за людьми.
Предложение с условиямиМы не пишем «поставлено», потому что у нас нет такого агента, выведенного в производство у клиента из финансового сектора. Что у нас есть, и что мы показываем именно так, — это собственная конвейерная система ingest, работающая на наших данных: пять Python-модулей, 1.526 строк, которые читают банковские уведомления из e-mail и выписки в PDF, классифицируют каждую транзакцию с помощью инструментов и записывают её в PostgreSQL с дедупликацией, плюс четыре потока автоматизации для webhookов от трёх платёжных процессоров. Реальное состояние, сказанное в той же фразе: репозиторий не под git, каталоги `tests/` и `webhook-server/` пусты, а приблизительное сопоставление имён контрагентов использует эвристику n-грамм, помеченную в коде как «заменить на сервис эмбеддингов перед продакшеном». Часть финансовой платформы в продакшене — поток заявки, договор, график платежей, аудит — это отдельная работа, со своими доказательствами, и там мы пишем «поставлено».
Запросы на AI-агентов в финансовых сервисах почти всегда приходят в форме «чтобы отвечал клиентам на вопросы о наших продуктах». Это законный запрос, но время там не выигрывается. Время теряется в другом месте: кто-то каждый день открывает десятки банковских уведомлений и выписок, смотрит на описание в виде строки из заглавных букв с кодом и решает, является ли это поступлением от клиента, зарплатой, налогом, платежом кредитору или операционным расходом. Эта работа повторяющаяся, скучная и, именно поэтому, полная ошибок.
Языковая модель хороша в этом, при одном условии: от неё нельзя требовать писать ответ в свободном тексте. Если вы просите предложение, его будете парсить вы, и парсинг вы ошибёте. В нашей проводке модель не пишет: она получает семь инструментов и должна вызвать ровно один — поступление от клиента, зарплата, налог, платёж кредитору, операционный расход, банковская комиссия или неизвестно. Каждый инструмент требует, помимо имени контрагента или категории, показатель уверенности от 0 до 1. «Неизвестно» требует письменную причину. Выход — структура, а не мнение.
Второе правило — ничто не попадает дважды. Каждая транзакция, извлечённая из уведомления или из выписки, получает внешний идентификатор, рассчитанный как префикс из 16 символов от SHA-256-хэша по её полям, столбец уникален в таблице, а вставка выполняется с `ON CONFLICT (external_id) DO NOTHING`. Практическое следствие: почтовый ящик можно перечитывать сколько угодно раз, а баланс не удваивается. Без этого правила любая финансовая ingest-проводка к третьей неделе начинает порождать дубликаты, которые кто-то чистит вручную.
Чего такой агент не делает и почему важно писать это на странице: он не утверждает платёж, не принимает кредитное решение, не даёт инвестиционные рекомендации и не отвечает клиенту от имени учреждения. Показатель уверенности, который он возвращает, — это оценка модели о самой себе, а не измерение точности, сделанное нами — это различие и есть разница между инструментом и иллюзией контроля.