§ БЛОГ

Распознавание документов в workflow: новая нода Staqflow — PDF и скан в заполненные поля

В Staqflow появился узел «Извлечение из документа»: на входе PDF или скан, на выходе — заполненные поля, а не свободный текст. Семь провайдеров, свои типы для суммы и даты, JSON-схема для строк таблицы — и счета, чеки и анкеты уезжают в 1С, CRM или таблицу без перебивки руками.

Распознавание документов в workflow: новая нода Staqflow — PDF и скан в заполненные поля

Счета, накладные, акты, анкеты, чеки из авансового отчёта — всё это приходит картинкой или PDF, а нужно в виде полей: номер, дата, сумма, контрагент. Обычно между одним и другим сидит человек и перебивает цифры в учётную систему. Это самая скучная работа в компании и самая дорогая по ошибкам: перепутанная цифра в сумме всплывает через месяц.

В Staqflow появился узел «Извлечение из документа». На входе PDF или скан, на выходе — заполненные поля, которые следующий шаг кладёт в 1С, CRM или таблицу.

Извлечение из документа — это шаг процесса, который читает приложенный файл и возвращает не свободный текст, а строго заданную форму: вы перечисляете нужные поля, а узел отдаёт их значениями из документа.

Чем это отличается от анализа изображения

Узел анализа картинки отвечает словами: «на фото накладная №такая-то от такого-то числа». Это удобно человеку и неудобно процессу — дальше такой ответ нужно разбирать.

Узел извлечения отвечает структурой. Вы говорите: нужны number, date, total, supplier — и получаете именно их, в нужных типах. Плюс он берёт не только картинку, но и PDF.

Семь провайдеров и три повадки

ПровайдерКак читает документ
OpenAIчитает файл сам
OpenRouterчитает файл сам, моделями разных вендоров
Свой серверчитает сам, если говорит на протоколе OpenAI
xAI (Grok)читает сам, но только отдельной ручкой: обычный чат файла не берёт
Google Geminiчитает своим протоколом и требует схему в своём диалекте
Mistralраспознаёт и заполняет форму одним запросом
Yandex Visionотдаёт текст, а поля из него достаёт второй вызов языковой модели на том же ключе

Разницу узел прячет: панель одна и та же, а перевод в протокол конкретного сервиса — его забота. Для Yandex отдельное подключение заводить не нужно, хватает того же ключа.

Честно про тех, кого нет: у Qwen в сообщении бывают только текст, картинка и видео, у Groq — строка или картинка, а у GigaChat файл загружается, но работа с ним идёт за отдельным тарифом.

Как настроить

  1. Добавьте подключение к сервису в учётных данных пространства.
  2. Поставьте узел «Извлечение из документа» и выберите провайдера и модель.
  3. Укажите поле с документом — бинарное поле элемента, куда предыдущий шаг положил файл: вложение из почты, файл из Telegram, скан из хранилища.
  4. Перечислите поля, которые нужно достать.

Для каждого поля задаются четыре вещи: название (оно же станет ключом в ответе), что искать — подсказка модели своими словами, тип и обязательность.

Типы: текст, число, дата, «да или нет» и список строк. Тип — это не украшение: сумма приходит числом, а не строкой с пробелами, и её сразу можно сравнить с лимитом в условии.

Своя JSON-схема

Если форма сложнее плоского списка — например, нужны строки таблицы с наименованием, количеством и ценой в каждой, — переключите «Что достаём» на свою JSON-схему и опишите вложенность как надо.

Почему необязательное поле — это тип с null

Деталь, которая объясняет качество результата. Строгий режим провайдеров требует, чтобы в ответе присутствовали все свойства схемы. Если «необязательность» выражать отсутствием поля в списке обязательных, модель всё равно обязана его заполнить — и заполняет выдумкой. Поэтому узел выражает необязательное поле типом, который допускает null: модель имеет право честно ответить «этого в документе нет».

Той же цели служит и просьба, которую узел добавляет к запросу сам: брать значения только из документа и не придумывать то, чего в нём нет.

Уточнение для сложных бланков

Когда бланк нестандартный, помогает поле «Уточнение» — несколько слов своими словами о том, где что искать: «номер счёта стоит в шапке справа, не путать с номером договора», «суммы указаны без НДС, итог в последней строке таблицы». Это дописывается к просьбе и заметно улучшает результат на тех документах, где одинаковых по смыслу чисел несколько.

Форматы и проверка файла

Принимаются PDF, PNG, JPEG, WebP и GIF. Тип определяется по первым байтам файла, а не по тому, что записано в его свойствах: в бинарном поле лежит то, что положил предыдущий шаг, и заявленный тип там бывает любой.

Отдельная история — TIFF со сканера: его узел отсекает до запроса и говорит, какие форматы годятся, вместо невнятного отказа провайдера через полминуты и за ваши деньги.

Что приходит на выход

  • fields — те самые поля со значениями;
  • provider и model — кто читал и чем;
  • text — распознанный текст целиком, если включить «Оставлять распознанный текст». Так умеют только Mistral и Yandex: остальные читают документ, но текст не возвращают;
  • pages — сколько страниц обработано, когда провайдер это сообщает;
  • tokens — расход.

Включите «Сохранять поля входа», и рядом останутся данные исходного элемента: идентификатор письма, имя файла, отправитель.

Сценарии автоматизации

Счета и накладные в учётную систему

Письмо с вложением приходит на почту → узел достаёт номер, дату, сумму, ИНН и контрагента → процесс находит поставщика в 1С и создаёт документ. Спорные случаи — сумма выше лимита или контрагент не найден — уходят в чат бухгалтерии на ручное подтверждение.

Чеки в авансовый отчёт

Сотрудник присылает фото чека в Telegram-бот → достаются дата, сумма, магазин и категория → строка добавляется в отчёт, а сотрудник получает подтверждение в том же чате.

Заявки и анкеты из PDF

Заполненная форма приходит файлом → поля превращаются в карточку CRM без перебивки руками.

Договоры и акты

Из подписанного скана достаются номер, дата, стороны, сумма и срок — и ложатся в реестр договоров, который дальше сам напоминает о продлении.

Первичка из архива

Папка сканов обрабатывается разом: каждый файл отдельным элементом, ошибки складываются в отдельную ветку, а не роняют весь прогон.

Что стоит проверять

Модель читает документ лучше человека по скорости, но хуже по ответственности. Несколько правил, которые экономят нервы:

  • Считайте контрольные значения сами. Если в документе есть сумма и построчные позиции, сверьте их узлом «Код» — расхождение означает, что читать нужно внимательнее.
  • Ставьте условие на сомнительное. Пустое обязательное поле или сумма выше порога — повод отправить документ человеку, а не в учётную систему.
  • Не смешивайте типы документов в одном узле. Накладной и анкете нужны разные формы; проще развести их условием по отправителю или по теме письма.
  • Помните про персональные данные. Паспорта и медицинские справки уезжают во внешний сервис вместе с файлом. Если так нельзя — собственный контур и локальная модель на протоколе OpenAI.

Сколько это стоит

Провайдеры считают по токенам, а страница документа — это много токенов, особенно скан. Поэтому дешевле отправлять нужные страницы, а не весь договор на сорок листов, и не гонять один и тот же файл дважды.

В Staqflow оплачивается только работа процесса — токены за CPU-секунды, а ожидание ответа провайдера процессор почти не грузит. Тарифы — на странице цен.

Частые вопросы

Чем это отличается от обычного OCR?

OCR возвращает текст, и дальше его надо разбирать регулярками, которые ломаются на каждом новом бланке. Здесь вы описываете поля, а не формат, — и один и тот же узел справляется со счетами разных поставщиков.

Нужен ли отдельный сервис распознавания?

Нет. Шесть из семи провайдеров читают документ сами. Yandex Vision распознаёт текст, а поля из него достаёт языковая модель на том же ключе — отдельное подключение не нужно.

Что будет, если поля нет в документе?

Необязательное поле придёт пустым — ровно для этого оно и описывается типом, допускающим пустоту. Обязательное пустым быть не должно, и это удобный признак: пустота значит, что документ не тот или скан нечитаемый.

Можно ли достать строки таблицы?

Да, через свою JSON-схему: описываете массив объектов с нужными полями и получаете позиции накладной списком.

Скан плохого качества — что делать?

Сначала проверьте формат: TIFF узел не примет и скажет об этом сразу. Дальше помогает «Уточнение» — подсказка своими словами, например что документ повёрнут или что печать перекрывает номер.

Можно ли обработать сразу пачку файлов?

Да: каждый файл приходит отдельным элементом и обрабатывается своим запросом. Сбой на одном документе можно увести в отдельную ветку, чтобы он не ронял остальные.

Попробуйте

  1. Создайте аккаунт — карта не нужна.
  2. Соберите процесс из трёх узлов: почта с вложением, «Извлечение из документа» с пятью полями и запись в таблицу.
  3. Или опишите задачу ИИ-клиенту через MCP: «Забирай счета из почты, доставай номер, дату и сумму и клади в таблицу».

Куда отправить готовые поля — смотрите в каталоге интеграций.