Пайплайн обработки документов или тикетов на языковой модели может пройти все демо и так и не выйти в прод, потому что прод требует того, чего не требует демо: размеченного набора, по которому его принимают, пути данных, не покидающего вашу инфраструктуру, места для неверного ответа и владельца после запуска. Разбираем, как выглядит каждый из этих пробелов, что его закрывает и как понять, какие инженерные компании действительно доводят такую работу до прода внутри вашего собственного периметра.
Пилот сработал. На наборе отобранных вручную документов модель извлекла поля, рассортировала тикеты и убедила тех, кто её заказывал. Спустя месяцы пилот всё ещё работает в песочнице на образцах данных, и никто не может сказать, что нужно, чтобы включить его на реальной очереди.
Этот разрыв не закрывается заменой модели. Демо отвечает на вопрос, умеет ли модель читать документ. Прод спрашивает, что происходит с каждым документом — включая отсканированный, пересланную цепочку писем и тот, на котором модель ошибается, — на данных, которым, возможно, никогда не разрешали попадать в сервис, использованный пилотом.
Короткий ответ структурный. Прежде чем менять модель, постройте четыре вещи, которые пилот пропустил: приёмочный набор из реального трафика с оценкой по каждому полю; путь данных, на котором веса, индексы, логи и данные оценки остаются внутри вашей инфраструктуры; валидаторы и очередь ручной проверки для результатов, не прошедших валидацию; и владельца эксплуатации с мощностями, фолбэком и мониторингом. Что amBrain может подтвердить публично о собственной работе с LLM — полностью: мы вывели интеграцию LLM в прод внутри FinTech-периметра клиента: извлечение и нормализация неструктурированных уведомлений брокеров и торговых площадок — о корпоративных действиях, изменениях по инструментам и марже — в структурированные записи, которые потребляет торговая система. Клиент не называется, эта статья — не кейс по тому проекту, и ни одна цифра ниже не измерена ни на одной из наших систем.
В 2015 году Sculley и коллеги из Google написали, что лишь малая доля реальных систем машинного обучения состоит из собственно кода машинного обучения, а необходимая инфраструктура вокруг него огромна и сложна. Пайплайн на языковой модели устроен так же, и у пилота, собранного только из этой малой части, вокруг нет ничего, на чём он мог бы работать в проде.
Сопоставьте то, что было у пилота, с тем, что нужно очереди в проде, — и недостающая работа превращается в список:
Первый недостающий артефакт — размеченный набор реальных документов с ответом, который должен получиться для каждого из них. Без него любую смену промпта или модели оценивает тот, кто в этот день читает вывод, и пилот не может пройти планку, которую так никто и не записал.
В Rules of Machine Learning от Google измерение стоит раньше модели: правило № 2 — «Сначала спроектируйте и внедрите метрики». Для извлечения данных и маршрутизации тикетов метрика — это не одна оценка на весь документ:
Если пилот строился на облачной модели с образцами, синтетическими данными или документами, которые кто-то вручную разрешил использовать, а реальные данные нельзя передавать внешнему провайдеру, результат пилота не переносится: модель внутри может оказаться другой моделью или той же моделью с открытыми весами, но с другой квантизацией и настройками сервинга, и в любом случае её качество придётся заново измерить на приёмочном наборе.
Модель — очевидный компонент, который нужно перенести внутрь. Но не единственный, потому что пайплайн на языковой модели копирует данные в большее число мест, чем один вызов модели:
Маскирование помогает там, где логам приходится покидать закрытую зону. Presidio — open-source фреймворк, разработка которого началась в Microsoft, — обнаруживает и анонимизирует персональные данные в тексте, а в его документации указано, что, поскольку обнаружение автоматическое, нет гарантии, что оно найдёт всю чувствительную информацию. Маскирование уменьшает объём раскрываемых данных, но не заменяет хранения данных внутри.
Пилот получает документы; прод получает всё, что присылают отправители. До любого вызова модели пайплайн должен превратить это в текст с привязкой к источнику:
Длинные входы требуют отдельного внимания. В статье Lost in the Middle, опубликованной в TACL в 2024 году, Liu и коллеги показали, что для протестированных ими моделей качество часто наиболее высокое, когда релевантная информация находится в начале или в конце входного контекста, и значительно падает, когда она находится в середине длинного контекста. Разбивать длинный документ по разделам, сохраняя источник в каждом чанке, — более безопасный вариант по умолчанию, чем рассчитывать, что модель читает весь контекст равномерно, а приёмочный набор покажет, что верно для ваших документов.
Ограниченное декодирование (constrained decoding) допускает на выходе модели только JSON, соответствующий схеме: vLLM поддерживает его как structured outputs, а llama.cpp — через грамматики. Оно фиксирует форму записи — в пределах возможностей схемы, которые поддерживает бэкенд, и пока генерацию не обрезал лимит токенов, — но не её истинность: корректно сформированная запись всё равно может содержать неверную дату.
Истинность проверяется после модели — кодом, которому бизнес уже доверяет:
Собственная уверенность модели — слабый фильтр. GPT-4 Technical Report от OpenAI, опубликованный в 2023 году, показывает, что на бенчмарке с выбором из нескольких вариантов предобученная модель была хорошо откалибрована, а пост-обучение эту калибровку снизило. Уверенность, которую модель сообщает о себе сама, или вероятность токена — это сигнал, который нужно проверить на приёмочном наборе, а не порог, которому можно доверять по умолчанию.
Запись, не прошедшая хотя бы одну проверку, уходит в очередь ручной проверки, а не в систему-потребитель. Очередь — самостоятельный продукт: ей нужны владелец, план мощностей в часах работы проверяющих, исходный фрагмент рядом с каждым полем и исправления, которые возвращаются в приёмочный набор.
Тикет поддержки — это текст, написанный кем-то вне компании, а документ может нести инструкции, которые отправитель поместил туда намеренно. OWASP Top 10 for LLM Applications 2025 ставит prompt injection на первое место, включая непрямую инъекцию, при которой инструкции приходят внутри внешнего контента, обрабатываемого моделью, например веб-сайта или файла.
Три пункта того же списка превращаются в правила проектирования для пайплайна обработки документов:
OWASP также отмечает, что неясно, существуют ли стопроцентно надёжные способы предотвратить prompt injection. Основной вес несут проверки вывода и ограничение привилегий, а не формулировка промпта.
Поведение пайплайна — результат нескольких артефактов, которые меняются независимо друг от друга. Считайте их одним релизом и сохраняйте его идентификатор в каждой записи, которую он порождает:
Фиксация версий не делает ответы одинаковыми. Thinking Machines Lab в сентябре 2025 года показала, что сервер инференса может возвращать разные ответы на один и тот же промпт при нулевой температуре, потому что результат запроса зависит от того, сколько других запросов попало с ним в один батч; тот же пост показывает, что батч-инвариантные ядра устраняют это ценой скорости. Если сервер не использует такие ядра, воспроизводимость означает повторный прогон приёмочного набора на каждом релизе и сравнение оценок, а не ожидание идентичного текста.
Мощности планируются в токенах, а не в документах. Измерьте распределение длины входа и выхода на реальном трафике, потому что одно длинное вложение может стоить столько же, сколько много коротких тикетов, а время генерации растёт с длиной вывода.
Системы сервинга объединяют запросы в батчи, чтобы ускоритель не простаивал. В статье о vLLM, представленной на SOSP 2023, Kwon и коллеги сообщили, что страничная организация KV-кеша внимания повысила пропускную способность в 2–4 раза при том же уровне задержки по сравнению с системами, которые они оценивали. Более крупные батчи повышают пропускную способность, но и увеличивают задержку каждого запроса; бэк-офисная очередь может это поглотить, а интерактивный шаг — нет, поэтому их разделяют:
Именно фолбэк делает включение пайплайна обратимым. Существующий сегодня ручной процесс остаётся нижней планкой, а пайплайн снимает с него работу поле за полем, а не заменяет его в один день.
Дашборды серверов говорят, ответил ли пайплайн. Они не говорят, были ли ответы верными, а модель, деградирующая на новом шаблоне, сохраняет прежнюю задержку. Мониторинг пайплайна извлечения данных или обработки тикетов охватывает и то и другое:
Generative AI Profile от NIST, NIST AI 600-1, опубликованный в июле 2024 года, раскладывает эту работу по четырём функциям своего AI Risk Management Framework: govern, map, measure и manage (руководство, картирование, измерение и управление). Названия важны меньше, чем следствие: измерение после запуска — это явно обозначенная работа с выделенными под неё людьми, а не то, чем команда пилота занимается, когда у неё есть время.
Включение пайплайна для всего сразу в один день сводит все риски в одно событие. Поэтапная выкатка держит их порознь:
Пилот, который хорошо читает документы, но так и не доходит до прода, провалился не на чтении. Ему так и не дали ни приёмочного набора, который нужно пройти, ни пути данных, которым разрешено пользоваться, ни места для неверных ответов, ни владельца на день после запуска.
У вопроса, стоящего за этой статьёй, — кто может развернуть LLM-пайплайн внутри вашей собственной инфраструктуры и действительно довести его до прода, — есть проверка, которой не нужен список подрядчиков. Компания, которая делает такую работу, спрашивает о приёмке и эксплуатации раньше, чем рекомендует модель:
О каждом пункте можно спросить в первом же разговоре, и расплывчатый ответ означает, что объём недостающей работы по пилоту ещё не определён.
Поэтому первый вопрос — не о том, какую модель запускать внутри вашего периметра. Он о том, какие поля и в каких документах вы готовы принимать в автоматическом режиме, относительно чего это измеряется и кто подхватывает записи, не прошедшие валидацию.
Что amBrain может подтвердить публично помимо интеграции в проде, описанной в кратком ответе выше: amBrain пишет софт с 2019 года. Мы работаем в трёх форматах: полная разработка, выделенная команда или наши инженеры в вашей команде.
Принесите текущую архитектуру и тот сценарий отказа, который вас беспокоит, — разберём его вместе за полчаса.