Представьте: вы готовите техническое предложение на тендер. В техническом задании заказчика — 80 позиций товаров. У каждой — десяток характеристик: вес, размеры, ГОСТ, материал, допуски. Вы заполняете огромную таблицу, стараясь не ошибиться ни в одном параметре.
А потом — проверка. Строка за строкой. Параметр за параметром. «Масса не менее 20 кг» — у нас написано 20 кг, нормально. «Длина 97±3 мм» — у нас 100 мм, попадает ли в диапазон? «Диаметр не более 50 мм» — у нас 48 мм, окей. И так 80 раз по 10 параметров — 800 сравнений.
Человек устаёт. Глаз замыливается. Одно пропущенное несоответствие — и заявку отклоняют. Деньги потрачены на подготовку, время потеряно, тендер проигран. Не потому что предложение плохое, а потому что в строке 47 написали «49 мм» вместо «не более 48 мм».
Мы видели эту проблему у наших пользователей и решили: машина может делать это лучше.
Как вообще прочитать документ?
Казалось бы — загрузи файл, прочитай текст, сравни. Но в реальном мире тендерные документы — это зоопарк форматов. Заказчик присылает ТЗ в Excel. Поставщик готовит ТП в Word. Иногда приходят PDF — причём не электронные, а отсканированные: картинка вместо текста.
Первым делом нужно было научиться читать всё:
- Excel (XLSX, XLS) — самый частый формат. Но ячейки объединены, числа записаны как текст, а вместо точки — запятая.
- Word (DOCX, DOC) — таблицы внутри текстового документа с нестандартным форматированием.
- PDF — может быть электронным или отсканированным (просто картинка).
Для отсканированных PDF мы подключили OCR — систему распознавания текста. Сервис автоматически определяет: есть в файле текст или нет. Если текста нет — запускает распознавание, извлекает таблицы и возвращает структурированные данные.
Что оказалось сложнее всего: не чтение форматов, а понимание структуры. В одном Excel-файле может быть три таблицы. Система научилась отличать таблицу с товарами от остальных — по ключевым словам в заголовках, по наличию нумерации.
Проблема нумерации
Когда оба документа прочитаны, следующий шаг — сопоставить позиции. Позиция №1 из ТЗ должна сравниваться с позицией №1 из ТП. Звучит просто? На практике — нет.
Случай 1: нумерация совпадает. Идеальный сценарий, но встречается не всегда.
Случай 2: нумерация сбита. В ТЗ — 42 позиции, в ТП — 40. Две позиции где-то пропущены. Если сопоставлять по номеру строки, начиная с пропуска все позиции «съедут».
Случай 3: нумерация начинается заново. Сначала позиции 1–20, потом снова 1–15.
Случай 4: нумерации нет совсем.
Мы выстроили цепочку из трёх стратегий: сначала по номерам позиций, если номеров нет — по порядку строк, если результат подозрительный (больше 40% не совпадают) — по наименованию товара.
Понимание смысла важнее точного совпадения. «Не менее 20 кг» и «25 кг» — разные строки, но это соответствие. ИИ, обученный правилам предметной области, справляется с этим на порядок лучше, чем алгоритмическое сравнение.
Искусственный интеллект: не просто «найди отличия»
Самая интересная часть — сравнение параметров. Это не побуквенное сравнение строк. Это понимание смысла.
В ТЗ написано: «Масса: не менее 20 кг». В ТП: «Масса: 25 кг». Соответствует? Конечно — 25 больше 20. Но если сравнивать строки побуквенно — они различаются.
Другой пример. ТЗ: «Длина: 97±3 мм». ТП: «Длина: 100 мм». Соответствует? Да — 100 входит в диапазон от 94 до 100. Но для машины «97±3 мм» — просто набор символов.
Мы написали для ИИ набор из 13 специализированных правил сравнения:
- «Не менее X» — предложение должно быть ≥ X
- «Не более X» — предложение должно быть ≤ X
- «X ± Y» — предложение должно попадать в диапазон
- «X ± Y%» — допуск в процентах
- Многомерные размеры — «120x100x223 мм» по каждому измерению отдельно
- ГОСТы и стандарты — сопоставление ссылок на нормативные документы
- Идентичные значения — слово в слово = всегда совпадение
Каждая позиция анализируется по отдельным параметрам. Пользователь видит не просто «позиция не соответствует», а конкретно: какой параметр не совпал, что было в ТЗ, что в ТП, и почему это расхождение.
Масштаб: когда позиций не 10, а 200
Для 10 позиций всё работает отлично. Но что делать, когда в документе 200 позиций?
Отправить всё одним запросом нельзя — ИИ начнёт «забывать» начало документа. Отправлять по одной позиции — слишком медленно.
Решение: чанки по 10 позиций. Документ разбивается на группы, каждая отправляется отдельным запросом. При этом три запроса обрабатываются параллельно.
Для пользователя это выглядит так: после загрузки файлов запускается анализ. На экране — прогресс-бар, который обновляется каждые три секунды. 200 позиций обрабатываются за 3–5 минут. Вручную это заняло бы несколько часов.
Результат: не просто «красное/зелёное»
Результат сравнения — таблица, где каждая строка — позиция товара. У каждой — статус:
- Соответствует (зелёный) — все параметры в порядке
- Не соответствует (красный) — есть расхождения, нужно исправить
- Требует проверки (жёлтый) — неоднозначные моменты
- Не указано в ТП (серый) — позиция отсутствует в предложении
Кликните на любую строку — она раскрывается. Внутри — таблица параметров: что требовал заказчик, что вы предложили, совпадает ли это. Если не совпадает — комментарий, объясняющий почему.
Неочевидные сложности
Дублирование таблиц. В одном файле может быть две таблицы с одними и теми же товарами — коммерческая часть и техническая спецификация. Система научилась их объединять.
Строки-заголовки внутри таблиц. Между позициями товаров встречаются строки вроде «Требования к результатам работ». Это не товары — это заголовки разделов. Система отфильтровывает их автоматически.
Числа, записанные как текст. В старых Excel-файлах число 2 хранится как 2.0. Или «5,5» записано с запятой вместо точки. Нормализация данных — незаметная, но критически важная работа.
Противоречивые ответы ИИ. Иногда ИИ присваивал статус «не соответствует», а при этом все параметры отмечал как «совпадает». Мы добавили автоматическую перепроверку: итоговый статус пересчитывается из статусов параметров. Машина проверяет сама себя.
5 форматов файлов (XLSX, XLS, DOCX, DOC, PDF) включая сканы. Автоматическое распознавание структуры документа. Интеллектуальное сопоставление позиций по номерам или наименованиям. AI-анализ каждого параметра с учётом допусков, диапазонов, условий «не менее / не более». Наглядные результаты с попарным сравнением параметров. Прогресс в реальном времени. История сравнений. 800 параметров за 3 минуты. Ни одного пропущенного. С объяснением по каждому.
Уроки, которые мы вынесли
-
1
Форматы документов — это хаос
Нет «стандартного» формата тендерной документации. Каждый заказчик оформляет по-своему. Система должна быть гибкой и уметь работать с тем, что есть.
-
2
Понимание смысла важнее точного совпадения
Побуквенное сравнение бесполезно для тендерных документов. ИИ, обученный правилам предметной области, справляется на порядок лучше.
-
3
Прозрачность важнее скорости
Когда анализ длится три минуты — это нормально, но только если видно прогресс. Прогресс-бар с обновлением каждые три секунды кардинально улучшает ощущение.
-
4
Машина должна проверять сама себя
ИИ иногда ошибается. Слой автоматической перепроверки: пересчёт статусов, дедупликация, коррекция противоречий — это инженерная зрелость.
-
5
Детали на уровне параметров — главная ценность
Сказать «позиция не соответствует» — бесполезно. Показать, какой конкретно параметр не совпал и почему — бесценно.