Локальный CSV-санитайзер: проверка таблицы до ИИ
CSV выглядит простым форматом, пока его не нужно передать модели. В одном файле оказываются разные разделители, даты в нескольких вариантах, номера с потерянными нулями и столбцы, которые вообще не относятся к задаче. Модель прочитает такой набор, но не сообщит, что половина строк съехала из-за лишней запятой. Локальный санитайзер нужен именно для этой скучной, но важной работы: он проверяет файл до отправки и объясняет каждое изменение.
Схема AI-редакции. Она показывает порядок локальной проверки и момент, в котором процесс должен остановиться при слишком большом числе изменений.
Сначала зафиксируйте договорённость о таблице
Не начинайте с кнопки «очистить». Создайте короткую схему: какие столбцы разрешены, в каком порядке они идут, какой у каждого тип и может ли значение быть пустым. Например, order_id — строка, amount — положительное число в рублях, created_at — дата и время, comment — необязательный текст. Такая схема защищает от случайного добавления служебного поля и помогает отличить нулевую сумму от пропущенного значения.
Сохраните схему отдельным файлом рядом с инструментом и присвойте ей версию. Если завтра переименовали колонку или поменяли валюту, это новая версия, а не «маленькая правка». По схеме легко объяснить коллеге, что именно проверяет программа и почему строка попала в отчёт об ошибках.
Организуйте работу с файлами
Сделайте три каталога: input для исходников, cleaned для результата и reports для протоколов. Исходный CSV не перезаписывайте никогда. Перед запуском посчитайте количество строк и сохраните контрольную сумму файла; это позволит убедиться, что выбран именно тот выгруженный отчёт. В имени результата укажите дату и версию схемы, например orders_2026-09-04_schema2.csv.
Проверьте кодировку и разделитель до разбора строк. Русские выгрузки часто приходят в Windows-1251, а программы ожидают UTF-8; кроме того, Excel может использовать точку с запятой вместо запятой. Поле с переносом строки должно быть заключено в кавычки. Если файл не удаётся разобрать однозначно, санитайзер должен остановиться и показать номер строки, а не «чинить» её молча.
Что проверять в каждой строке
Сначала сравните заголовок со схемой: отсутствующая обязательная колонка, дубликат названия или неизвестное поле — повод остановить запуск. Затем проверьте типы. У денежных значений задайте диапазон и количество знаков после запятой; у дат — допустимые форматы и часовой пояс. Идентификаторы обрабатывайте как строки, чтобы номер 00127 не превратился в 127.
Отдельно посчитайте пустые значения, дубли ключей и строки с лишними полями. Нормализация пробелов и перевода строк допустима, но её нужно записать в отчёт. Удаление комментариев, телефонов или email делайте только по явному правилу. Если внутри значения встречается формула, перед выгрузкой в табличный редактор добавьте защиту от её автоматического выполнения: текст, начинающийся с =, +, - или @, может интерпретироваться как формула.
Режим предварительного просмотра
Полезный локальный инструмент имеет режим dry run. Он ничего не записывает, а показывает сводку: сколько строк прочитано, сколько исправлено, какие колонки удалены, сколько значений не прошло проверку и почему. В отчёте приведите несколько примеров «было → стало» с номером строки. Если изменения затрагивают больше заранее установленного порога, например пять процентов файла, процесс должен завершиться предупреждением и попросить ручного решения.
После просмотра создайте новый файл атомарно: сначала во временном имени, затем переименуйте его в cleaned. При сбое старый результат остаётся доступным. Отчёт не должен содержать полные персональные данные — достаточно замаскировать середину email, телефона или идентификатора. Для более строгих требований используйте отдельный локальный инструмент маскировки PII, а журнал запусков храните по правилам локального лога.
Минимальный тест перед передачей модели
Соберите маленький тестовый CSV из намеренно сложных строк: запятая внутри комментария, перенос строки в кавычках, пустая дата, отрицательная сумма, повторный order_id, кириллица в CP1251 и идентификатор с ведущими нулями. Проверьте, что корректные строки сохранили значения, а ошибочные появились в отчёте с понятной причиной. Для структуры и названий колонок полезно свериться с отдельной проверкой схемы.
Только после теста загружайте очищенный файл в модель. В запросе укажите единицы измерения, период и список допустимых выводов. Не просите ИИ «найти всё важное»: сформулируйте конкретную задачу и попросите ссылаться на номера строк. Ответ всё равно нужно сверить с исходной выборкой, особенно если на его основании принимается финансовое или кадровое решение.
Приватность и обслуживание
Локальная обработка уменьшает число мест, куда уходят данные, но не отменяет права доступа. Ограничьте папки для владельца процесса, не храните ключи в CSV и удаляйте временные копии по утверждённому сроку. Периодически обновляйте правила: новая колонка в выгрузке должна вызвать предупреждение, а не попасть в модель автоматически. Храните версии схемы и отчёты так, чтобы можно было восстановить, какой файл и какими правилами был подготовлен.
Чек-лист перед запуском
- Исходник скопирован и его контрольная сумма сохранена.
- Кодировка, разделитель и версия схемы определены.
- Заголовок, типы, диапазоны, дубли и обязательные поля проверены.
- Dry run просмотрен, а крупные изменения подтверждены человеком.
- Результат записан в новый файл, отчёт очищен от PII.
- В модель отправлена только нужная выборка, а ответ проверен по строкам.
Такой санитайзер не делает данные «умными» и не заменяет аналитика. Его задача скромнее: сделать вход предсказуемым и оставить понятный след каждого изменения. Благодаря этому модель получает аккуратную таблицу, а команда — возможность быстро найти и исправить ошибку, не угадывая, что произошло между выгрузкой и финальным отчётом.
Приёмка перед передачей файла
Попросите коллегу, который не писал правила санитайзера, открыть только схему и отчёт dry run. Сможет ли он понять, почему строка остановлена, какое значение изменилось и где лежит исходник? Если ответ требует устного объяснения автора, отчёт недостаточно прозрачен. Добавьте номер правила и короткий пример, но не копируйте в него закрытые значения.
Перед первой рабочей загрузкой сравните три контрольные суммы: исходника, результата и отчёта. Они не должны совпадать случайно, а размер файла не должен резко меняться без записи причины. После обработки сохраните версию схемы рядом с результатом. Тогда при спорном ответе модели можно восстановить не только CSV, но и точную цепочку подготовки.