Таблицы, которых не существовало
Автоматический перевод с итальянского · смотреть оригинал
Глава 2 — Таблицы, которых не существовало
Техник из механической компании Северо-Востока рассказал нам об этом за эспрессо, с тем спокойствием, которое свойственно жителям Венето и предвещает катастрофу: "Наш чат-бот знал все о двигателе. Кроме данных о двигателе." Затем он объяснил. Их внутренний AI-ассистент умел описывать линейки продуктов, контексты использования, историю бренда, конкурентные преимущества. Чудо, с точки зрения повествования. Но когда клиент спрашивал номинальный крутящий момент модели CMP50L — то есть технические данные, ради которых люди открывают каталог, номер, за который покупают двигатель — чат-бот отвечал расплывчато, иногда правдоподобно, иногда нет. Пять месяцев разработки, все более озадаченный операционный директор, и никто не мог сказать, почему.
Диагноз был поставлен случайно, почти от скуки, при ручной проверке базы данных после очередного безрезультатного совещания. PDF-каталог содержал 342 технические таблицы. В базе данных их оказалось ноль. Не несколько: ноль. Ни одной. Код, извлекающий таблицы из PDF, сохранял данные в поля с названиями columns и data, в то время как код, который затем их индексировал, ожидал поля с названиями headers и rows. Несоблюденный "синоним". Внутреннее соглашение, которое было нарушено в забытом рефакторинге. Результат, в течение пяти тихих месяцев: вся числовая интеллектуальность каталога — пары, степени, диаметры, веса, коды заказов, напряжения питания — вытекала из крана, не будучи когда-либо налитой в стакан. Триста сорок две таблицы, потерянные одна за другой в безмолвной литургии.
Это тот тип ошибки, которая не кричит. Она не вызывает исключений, ничего не приводит к сбою, не появляется ни в каких логах. Просто часть мира перестает существовать для вашей системы, и никто этого не замечает, пока пользователь — обычно рассерженный пользователь — не задаст достаточно настойчивых вопросов, чтобы показать пропасть. И это является показателем гораздо большей проблемы, чем имена полей: общие фреймворки RAG оптимизированы для текущего текста — статей, веб-страниц, абзацев повествования — и обращаются с таблицами как с гражданами второго сорта, когда вообще обращаются. Но итальянские корпоративные документы являются часто таблицами. Технические каталоги, прайс-листы, спецификации продукта, паспорта безопасности, заказы: ценная часть для тех, кто обращается к этим документам, — это табличная часть. Та, которая ломается первой, и которую никто не замечает.
Урок не в том, чтобы "следить за именами полей". Это более сложная задача: в серьезном RAG каждый тип контента — таблицы, изображения, буквенно-цифровые коды, заголовки параграфов, сноски — нуждается в специальной обработке, проектировании и тестировании. И тест на работоспособность — это не "чат-бот отвечает на тривиальные вопросы" — на них отвечают даже неисправные системы, потому что достаточно плавающих данных для построения чего-то правдоподобного. Настоящий тест — это "чат-бот отвечает на вопросы, которые заставляют его задействовать каждую часть конвейера". Конкретные, числовые, проверяемые вопросы. Вопросы, на которые есть один правильный ответ, и если система ошибается, вы сразу это узнаете.
Если вы не проводите этот тест, вы не знаете, работает ли ваш RAG. Вы знаете только, что он не жалуется. А "не жалуется" — это очень низкий критерий качества для системы, которую люди будут использовать для принятия решений.
Есть замечание? Напишите нам
Сообщение предназначено только для нас. Если ваш комментарий будет интересен, мы можем опубликовать его в конце статьи, но только после проверки.
Пока вы пишете, ваш браузер решает небольшую вычислительную задачу — это наш способ защиты от автоматической рассылки без использования сторонних сервисов и запроса на распознавание изображений. Ничего не требуется, и данные не покидают этот сайт.