Перейти к содержимому

Проверка документов

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

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

УровеньЧто делает системаРоль человека
ИзвлечениеДостаёт поля: сумма, срок, стороны, дата, номерПроверяет спорные значения
Проверка по правиламСверяет с чек-листом: каких условий не хватает, что расходитсяРазбирает найденные расхождения
ВердиктДаёт заключение: принять, отклонить, на доработкуПодписывает решение

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

  • Схема ответа. Требуйте структурированный вывод по полям (JSON schema), а не свободный текст. Это отсекает половину ошибок.
  • Цитаты обязательны. Каждое извлечённое значение сопровождается фрагментом документа, откуда оно взято. Без цитаты значение нельзя проверить, а значит нельзя использовать.
  • Правила кодом, интерпретация моделью. «Сумма договора не превышает лимит» — это сравнение чисел, а не вопрос к модели. Модель читает документ, код проверяет условие.
  • Явное «не найдено». Отсутствие поля — валидный результат. Иначе модель заполнит его правдоподобным значением.
  • Разделение типов документов. Договор поставки, NDA и трудовой договор проверяются разными правилами; смешанный промпт даёт среднее качество по всем.

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

flowchart LR
    D["Документ"] --> X["Извлечение<br/>полей"]
    X --> V["Проверка<br/>правилами"]
    V --> S{"Всё<br/>в порядке?"}
    S -- "да" --> A["Автопринятие<br/>по порогу"]
    S -- "нет" --> H["Ручной разбор<br/>исключения"]

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

Измерять надо по полям и по документам отдельно:

  • Точность поля (field-level accuracy) — совпало ли значение с эталоном.
  • Полнота — сколько обязательных полей заполнено.
  • Доля исключений — сколько документов ушло на ручной разбор.
  • Время обработки — на документ и на очередь.
  • Стоимость — токены и вызовы на документ; длинные договоры дороги.
  • Ошибки с последствиями — неверная сумма, пропущенное условие. Считаются отдельно и разбираются всегда.
  • Сканы и плохой OCR. Модель «дочитывает» неразборчивый текст; качество входа важнее модели.
  • Многостраничные таблицы. Приложения, спецификации и графики платежей теряют структуру при парсинге.
  • Длинные документы. Часть текста не попадает в контекст; нужен поиск по документу (см. RAG), а не «прочитай целиком».
  • Уверенность без оснований. Модель выдаёт значение там, где поля нет.
  • Изменения в правилах. Чек-лист обновили, промпт — нет. Правила должны жить в одном месте и версионироваться.
  • Есть ли набор эталонных документов с правильными ответами (20–50 штук достаточно для старта).
  • Сопровождается ли каждое значение цитатой.
  • Что происходит при низкой уверенности — и умеет ли система её выражать.
  • Логируются ли решения и правки человека: это датасет для улучшения.
  • Есть ли право на ошибку: кто отвечает, если автопринятие пропустило проблему.