Excel от клиента всегда разный: как я собрал ИИ-агента вместо кучи регулярок

Excel от клиента всегда разный: как я собрал ИИ-агента вместо кучи регулярок

Почему регулярки сдают позиции

Знакомая история: прилетает файл, первая строка — название прайса, вторая пустая, заголовки где-то на седьмой. Колонки называются то «Кол-во», то «qty», то вообще «шт». Плюс рукописные пометки в ячейках. Я начинал с маппинга и пары десятков правил. Пару недель работало, потом приходил файл с объединёнными ячейками или артикулом, склеенным через дефис, и всё разваливалось. Правила росли до сотни и начинали конфликтовать.

В какой-то момент стало ясно: задача требует понимания структуры, а не просто сопоставления строк. Вот тут и нужны модели.

Что я называю ИИ-агентом

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

В моём случае агент сам ищет строку заголовков, маппит колонки к внутренней онтологии, проверяет артикулы по базе и, если что-то непонятно, отправляет строку человеку.

Начинал не с промпта, а с онтологии

Сначала я вместе с клиентом выписал все нужные поля: артикул, код, наименование, количество, единица, цены, скидка, срок. Получилось около пятнадцати сущностей и куча вариантов названий.

Агент не угадывает, а сопоставляет с этим списком. Если колонка не подходит ни под одну сущность — она «неизвестна» и дальше не идёт.

Пайплайн вышел простой:

  1. Разбиваем файл на листы, модель ищет прямоугольник данных.
  2. Берём заголовки и маппим к онтологии.
  3. Валидируем строки обычным кодом: артикул в справочнике, количество — число и т.д.
  4. Всё подозрительное — в отдельный лист для человека.

Модель трогает только два шага. Остальное — обычный Python. Чем меньше решений на модели, тем меньше ошибок.

Где споткнулся и что поправил

  • Объединённые ячейки. Пришлось разъединять и копировать значения вниз.
  • Единицы измерения. Добавил few-shot примеры в промпт, модель стала нормально нормализовать «шт», «pcs», «упак.».
  • Комментарии в числовых колонках. Если в ячейке количества есть текст — вся строка уходит человеку. Ошибка здесь стоит дорого.
  • Выбор модели. Для маппинга хватило компактной, для поиска шапки взял посильнее. Разные модели на разных шагах — нормально.

Что изменилось

Раньше младший менеджер тратил целый день на пачку новых прайсов. Сейчас файл падает в папку, через пару минут строки загружены, а спорные — в отдельном листе. Менеджер только добивает остальное. Голова освободилась: он не сверяет глазами, а принимает решения.

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

Главный вывод

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