Задача одна: сто счетов в день должны сами оказываться в 1С. Заказчик разослал одно и то же описание в три места и получил три цифры — 30 000, 200 000 и 700 000. Разброс в двадцать три раза. Первая мысль нормального человека: двое из троих врут.
Не врет никто. Три исполнителя прочитали одно письмо и увидели в нем три разных предмета. Первый — скрипт. Второй — работающий кусок производственного процесса. Третий — модель, обученную на ваших документах. Каждый честно назвал цену того, что собирается делать. Объяснить разницу не потрудился никто: для них она очевидна.
Разберу по уровням: что физически входит в каждый чек, чего в нем нет и как за один вечер понять, какой уровень нужен именно вам. Пример на распознавании документов, но арифметика та же в компьютерном зрении, чат-ботах и любой заказной автоматизации. Меняются слова, структура чека остается.
30 000 ₽: скрипт
За эти деньги делают ровно то, что обещали, и делают быстро. Берется готовое облачное API распознавания. Пишется сотня строк на Python: забрать файлы из папки, отправить, разобрать ответ, сложить результат в Excel. Полдня работы, из которых половина — чтение документации. Тридцать тысяч за полдня квалифицированного труда — адекватная цена. Обмана здесь нет.
Сложности начинаются не с качества кода. Они начинаются там, где скрипт впервые встречается с производственным процессом.
Сбой. Облачное API отвечает ошибкой: кончился лимит, моргнула сеть, у провайдера учения. Скрипт падает. Или, что гораздо хуже, не падает — проглатывает исключение и идет дальше. Двадцать документов из ста тихо исчезли. Узнаете вы об этом в конце месяца от бухгалтера, который не может закрыть период.
Повтор. Скрипт встал на середине, вы запустили его заново. Первые сорок документов прошли по второму разу, и в учет уехали сорок дублей. Защита от этого называется идемпотентностью, стоит примерно один рабочий день и в чек на тридцать тысяч не помещается физически.
Стык с 1С. Excel на выходе — это перенос ручного ввода в другое место. Бухгалтер по-прежнему сидит и вбивает цифры, только теперь из таблицы, а не со скана. Живой обмен с 1С — типовой формат, соответствие справочников, обработка отказа при проведении — отдельная работа, и объемом она больше самого распознавания.
Контур. Счета, паспорта сотрудников и договоры уезжают на чужой сервер. Юридически это передача персональных данных третьему лицу со всеми последствиями по 152-ФЗ. Технически вы не знаете, где эти файлы лежат и сколько хранятся. Для личного проекта безразлично. Для документов компании с живыми контрагентами вопрос перестает быть техническим.
Пятница, 19:40. Скрипт встал. Автор не отвечает: другой заказ, отпуск, закрытый ноутбук. Кода, кроме него, не читал никто. Тестов нет, документации нет, логов нет. Стоимость этого риска в КП не написана, но платить по нему будете вы.
Когда тридцать тысяч — правильный выбор: разово оцифровать коробку архива, проверить гипотезу перед большим проектом, собрать личную утилиту. Работа честная, результат честный. Беда в другом: изрядная доля заказчиков покупает этот уровень под задачу, где нужен следующий, и через три месяца платит второй раз — уже с разбором чужого кода в смете.
200 000 ₽: обвязка
Здесь главное, и вслух это проговаривают редко: модель та же самая. Тот же готовый движок, зачастую то же самое API. Ни строчки машинного обучения. Деньги идут за все, что вокруг него.
Звучит как переплата в семь раз за воздух. Посмотрите, из чего этот воздух состоит.
Очередь вместо цикла. Документ попадает в очередь, а не в переменную. Упало — задача вернулась и повторилась с задержкой. Упало пять раз — уехала в отдельную папку разбора, и вам про это написали. Ни один документ не пропадает молча: у каждого есть статус, и в любую минуту видно, сколько прошло, сколько висит, сколько ждет человека.
Идемпотентность. У каждого документа считается хеш. Пришел второй раз — система его узнает и повторно не проводит. Перезапуск конвейера перестает быть страшной операцией. Ровно та вещь, которой не видно на демо и без которой нельзя жить в проде.
Забор из реальных источников. Документы не лежат аккуратной стопкой в одной папке. Они падают на почту вперемешку с перепиской, приезжают в сетевую шару со сканера, приходят по ЭДО, кто-то фотографирует накладную телефоном и кидает в чат. Каждый источник — отдельный коннектор со своим набором странностей.
Валидация до записи. Распознанное сверяется со справочниками: ИНН ищется среди контрагентов, сумма проверяется на сходимость с позициями, дата — на вменяемость, номер — на дубль. Документ, не прошедший проверку, уходит к человеку с подсвеченным полем. Эта механика дешевле любой доработки модели и на типовой первичке дает прирост качества больше, чем месяц дообучения.
Раскладка в 1С. Через типовой обмен, с соответствием справочников и обработкой отказа. Проведение не прошло — документ ждет с понятной причиной, а не растворяется.
Журнал и мониторинг. Видно, что пришло, что распозналось, что ушло на доверку и почему. Поползла вверх доля ручного разбора — вы узнаете из алерта, а не из жалобы бухгалтерии через две недели.
Две-три недели работы, и это не «долго, потому что дорого». Неделя уходит на источники и стыки, неделя на валидацию и журнал, остаток — на приемку с вашими людьми на ваших документах. Подробнее, как это укладывается в проект по шагам, — в разборе услуги OCR-систем.
И теперь вещь, которая нам невыгодна на первый взгляд. Если вашу задачу закрывает этот уровень, вменяемый подрядчик так и скажет. Паспорта, ИНН, типовые счета из ЭДО готовый движок читает из коробки на 95 с лишним процентов. Учить его нечему. Продавать в такой ситуации пилот за полмиллиона бессмысленно: вы разберетесь на второй месяц, расскажете знакомым, и потеряем мы больше, чем заработали.
700 000 ₽: своя модель
Этот уровень включается тогда, когда готовый движок садится на ваших документах. Садится он не от плохого качества — он обучен на средних документах мира, а у вас свои.
Ведомственные бланки, которых нет ни в одном обучающем наборе. Гербовая печать поверх суммы. Рукописная пометка кладовщика на полях. Таблица без линеек, где колонки разъезжаются на второй странице. Скан с МФУ, которому давно пора на пенсию. На таком материале коробка честно дает 70–85% по полям: каждый третий документ уходит человеку, и автоматизация просто не состоялась.
Что появляется в смете на этом уровне.
Сбор и разметка данных. Самая дорогая и самая скучная часть — и именно ее вырезают первой, чтобы влезть в бюджет. Нужны 300–1000 ваших реальных документов, размеченных по полям руками. Это работа людей, а не алгоритмов, и она занимает заметную долю чека. Пропустить ее нельзя: модель учится на примерах.
Дообучение. Базовая модель на вашем домене дает field-level F1 около 0,85 — каждый седьмой документ на ручную доверку. Дообучение на размеченных образцах вытягивает ключевые поля до 0,96–0,98. На потоке в тысячу документов в день эта разница означает двух операторов вместо шести.
Приемка по числам. Порог F1 по каждому полю записывается в договор до начала работ, и сдача идет по этой таблице. Формулировка «нам все понравилось» на приемке модели не работает ни для одной из сторон.
Итерации. С первого захода пороги берутся редко. В смете должны быть заложены два-три круга: замер, разбор ошибок, добор данных на слабых типах, переобучение. Проект, где итерации не заложены, укладывается в срок только на бумаге.
Взамен вы получаете модель в собственность. Инференс крутится на вашем железе, лишний миллион страниц не стоит ничего. У коробочных вендоров тариф считается по числу распознаваний, и на потоке тысяча документов в день рента за полтора-два года перегоняет стоимость заказной разработки. Смотреть надо на стоимость владения за три года, а не на цену внедрения — там и живут все сюрпризы.
Как определить свой уровень за один вечер
Способ дешевый, честный и работает без единой встречи с подрядчиком.
- Возьмите 200 документов из реального потока. Не эталонных, не «вот эти хорошие» — подряд из папки за последнюю неделю.
- Прогоните через любой бесплатный движок: Tesseract, PaddleOCR, публичную демку вендора. Мы гоняли их на русских документах и выложили замеры, чтобы не гадать.
- Посчитайте документы, в которых все нужные поля распознаны верно. Именно поля целиком, а не проценты символов.
Дальше арифметика. Больше 90% — вам хватит второго уровня, заказная модель тут будет переплатой. От 70 до 90% — нужен пилот с дообучением, разрыв закрывается разметкой. Меньше 70% — тяжелый случай: рукопись, убитые сканы, экзотические формы, и разговор начинается с честной оценки, какую долю потока вообще имеет смысл автоматизировать.
Этот тест за вечер дает больше, чем три встречи с вендорами. И он отлично показывает, кто из подрядчиков готов обсуждать ваши числа, а кто продолжает показывать свои. Что еще спросить на демо, чтобы вендор поплыл, — собрано отдельным списком из 15 вопросов.
Три способа потерять деньги на этом выборе
Взять третий уровень под вторую задачу. Классика больших компаний: закупается проект с разметкой и дообучением там, где готовый движок и так читает 96%. Полмиллиона уходит на прирост в полтора процента, который на потоке не виден. Лечится тестом из предыдущего раздела за один вечер.
Взять первый уровень под второй. Классика компаний поменьше. Скрипт за тридцать тысяч работает месяц, потом приходит поставщик с нестандартным бланком, дальше сбой без уведомления, дальше дубли в учете. Итог: заплатили дважды, второй раз дороже — в смету добавляется разбор чужого кода и чистка последствий в базе.
Посчитать разработку и забыть эксплуатацию. Система живет годы. Появляются новые типы документов, меняются формы, обновляется 1С, у поставщика съезжает шаблон. Кто-то должен это подхватывать. В КП такой строки часто нет, и она всплывает через полгода отдельным счетом или отдельной болью.
Что с этим делать в понедельник
Разброс цен в двадцать раз перестает пугать, как только вы понимаете, что покупаете три разных предмета. Скрипт закрывает разовую задачу. Обвязка превращает готовую модель в часть процесса. Своя модель нужна там, где ваши документы слишком далеки от среднего.
Мы работаем со вторым и третьим уровнем: интеграция готового модуля идет от 200 000 ₽, пилот с разметкой и дообучением — от 500 000 ₽. Из чего складывается второй чек, разобрано по статьям сметы в отдельном материале, а прикинуть вилку под свои объемы можно на калькуляторе — это десять минут против недели переписки.
Если хотите проверить, а не поверить — пришлите 200 своих худших сканов. По ним за вечер видно реальный уровень задачи и честная вилка. Скажем прямо, если вам достаточно второго уровня: терять клиента на третий месяц дороже, чем не продать лишнее сегодня.