Извлечение данных из документов с помощью ИИ

Как модель превращает счета, договоры и бланки в поля: путь от письма до записи, восемь видов документов с проверками, схема и проверка кодом, правила и ошибки.

Искусственный интеллект Обновлено

Коротко

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

Как это устроено: от письма до записи

  1. Документ приходит

    Почтой, через форму, в мессенджере или со сканера — в одну очередь.

  2. Модель его читает

    PDF с текстом, скан или фото — современные модели читают изображение напрямую.

  3. Поля по схеме

    Ответ — строго поля схемы, ничего лишнего и ничего в свободной форме.

  4. Код проверяет

    Арифметику, даты, контрольные цифры, известного поставщика, дубль уже загруженного документа.

  5. Запись или человек

    Нет замечаний — запись уходит в систему; есть — человек видит документ и список.

  6. Учёба на исправлениях

    Каждое исправление человека становится примером для инструкции и случаем для проверочного набора.

Какие документы и что проверять

Восемь типичных видов документов — с полями, которые обычно берут, и проверками, которые ловят большинство ошибок.

ДокументПоляПроверки
Счёт номер, дата, поставщик, позиции, итог арифметика, ИНН, дубль
Акт или накладная позиции, количества, подписи сверка с заказом
Договор стороны, предмет, сроки, сумма, штрафы рискованные пункты смотрит юрист
Заявка клиента контакты, товар, количество, адрес формат телефона и почты, товар в каталоге
Резюме опыт, навыки, контакты даты работы по порядку
Чек или авансовый отчёт дата, сумма, продавец, категория лимиты по категориям
Прайс поставщика артикулы, названия, цены резкое изменение цены
Анкета или бланк на бумаге все поля бланка обязательные поля заполнены

Счёт: схема и проверка

Схема говорит модели, что вернуть; проверка говорит системе, можно ли этому верить.

Схема счёта

Все поля обязательные: если модель не нашла поле, документ уходит человеку, а не пустое значение — в учёт.

invoice.schema.json
{
  "type": "object",
  "properties": {
    "number":   { "type": "string" },
    "date":     { "type": "string", "description": "YYYY-MM-DD" },
    "supplier": { "type": "string" },
    "tax_id":   { "type": "string" },
    "total":    { "type": "number" },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name":  { "type": "string" },
          "qty":   { "type": "number" },
          "price": { "type": "number" },
          "sum":   { "type": "number" }
        },
        "required": ["name", "qty", "price", "sum"],
        "additionalProperties": false
      }
    }
  },
  "required": ["number", "date", "supplier", "tax_id", "total", "items"],
  "additionalProperties": false
}

Проверка кодом

Арифметику и формат проверяет код, а не модель: три проверки ловят большую часть ошибок чтения.

check.ts
// Модель читает документ; код ей не доверяет и проверяет арифметику
type Invoice = {
  number: string;
  date: string;
  supplier: string;
  tax_id: string;
  total: number;
  items: { name: string; qty: number; price: number; sum: number }[];
};

export function problems(inv: Invoice): string[] {
  const out: string[] = [];
  inv.items.forEach((it, i) => {
    if (Math.abs(it.qty * it.price - it.sum) > 0.01) out.push(`строка ${i + 1}: количество × цена ≠ сумма`);
  });
  const lines = inv.items.reduce((s, it) => s + it.sum, 0);
  if (Math.abs(lines - inv.total) > 0.01) out.push('строки не сходятся с итогом');
  if (!/^\d{4}-\d{2}-\d{2}$/.test(inv.date)) out.push('дата не в формате ГГГГ-ММ-ДД');
  return out; // пусто — сразу в учёт; иначе — человеку со списком
}

7 правил надёжного извлечения

  1. 01

    Строгая схема

    Поля, типы и форматы заданы; модель не может добавить свои.

  2. 02

    Каждое число проверяется

    Суммы, количества и даты пересчитываются кодом.

  3. 03

    Сверка с вашими данными

    Поставщик — из справочника, заказ — из системы, цена — из договора.

  4. 04

    Исключения — человеку

    С документом и списком замечаний рядом.

  5. 05

    Оригинал хранится

    Каждая запись ссылается на документ, из которого взята.

  6. 06

    Дубли ловятся

    Один и тот же счёт, присланный дважды, не оплачивается дважды.

  7. 07

    Проверочный набор из настоящих документов

    Включая плохие сканы, рукописные пометки и необычные макеты.

Частые ошибки в извлечении

  1. Доверять итогам модели

    Модель может прочитать 8 как 3 — без пересчёта ошибка уходит в учёт.

  2. Пусто вместо «не нашёл»

    Отсутствующее поле молча превращается в ноль или пустую строку.

  3. Шаблоны под каждого поставщика

    Старый подход ломается на первом новом макете; схема от макета не зависит.

  4. Полная автоматика с первого дня

    Сначала человек подтверждает всё, потом — только исключения.

  5. Нет ссылки на оригинал

    Ошибку в записи невозможно проследить до документа.

  6. Проверка на чистых PDF

    Настоящие документы — кривые сканы и фото, сделанные на ходу.

Вопросы об извлечении данных из документов

Читает ли ИИ сканы и фотографии?

Да, современные модели читают изображения напрямую; очень плохие сканы всё равно уходят человеку.

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

OCR даёт текст; модель понимает, какое число итог, а какое дата, на любом макете.

Насколько это точно?

Это меряют на ваших документах; проверки кодом не дают ошибкам незаметно дойти до учёта.

Можно ли отправлять данные сразу в учёт?

Да, через обмен с 1С или CRM — документы, прошедшие все проверки.

А рукописные документы?

Аккуратный почерк читается; сомнительные поля помечаются для человека.

Безопасно ли отправлять документы модели?

Через деловой доступ данные не идут в обучение; для самых строгих случаев есть локальные модели.

Форма

Документы
без ручного ввода

Делаю извлечение данных из ваших документов с проверками кодом и обменом с учётом или CRM — людям остаются только исключения. Расскажите о задаче — отвечу в течение рабочего дня.

Или пишите на [email protected]