Completion gate: как отличить реальный ответ локальной языковой модели от заглушки
Локальные языковые модели выдают валидный JSON и проходят автоматические проверки, но за аккуратной структурой часто прячутся заглушки, обрезанные ответы и пустые обещания, и один разработчик предложил способ отделить техническую пригодность результата от его реальной ценности.

Когда единственная метрика качества локальной модели объединяет корректность формата, наличие содержания и экспертную оценку в одно число, диагностика ломается: непонятно, чинить рантайм, промпт или саму модель.
Разработчик, тестировавший связки из локальных языковых моделей и окружающего кода, столкнулся с проблемой, знакомой каждому, кто автоматизирует генерацию документов. Три экспериментальных маршрута показали идеальный результат: десять из десяти сценариев пройдены. Медианы по времени отличались заметно: 28,9 секунды у быстрого маршрута, 99,1 у тяжёлого, 71,0 у смешанного. Но за одинаковой колонкой «принято» скрывались разное количество исправлений и разное качество итоговых документов.
Проблема оказалась не в модели, а в метрике. Автор признал, что смешал в одном показателе законченный ответ, корректный JSON, наличие обязательных документов, прохождение автоматических проверок и человеческую оценку содержания. Так появился высокий процент, из которого нельзя было понять причину успеха или сбоя.
Что такое completion gate и зачем он нужен?
Completion gate (шлюз завершённости) решает скромную задачу: определить, существует ли целый результат, который вообще можно оценивать. Это не оценка стиля, полноты анализа или правильности выводов. Это проверка предпосылок оценки.
В эксперименте модель должна была вернуть один JSON-объект (формат обмена данными, читаемый и машиной, и человеком) с четырьмя документами в формате Markdown: карту источников, контекст системы, найденные противоречия и пакет задач.
Минимальный набор проверок шлюза выглядел так:
- Процесс завершился без тайм-аута, сбоя или нехватки памяти
- Сырой ответ сохранён
- Парсер (программа-разборщик) разбирает ответ как JSON
- Объект соответствует схеме
- Все четыре документа присутствуют
- Каждый документ содержит текст, а не путь к файлу или заглушку
- Если формат пришлось чинить, ремонт записан отдельно
Аргументы за: почему одного pass rate мало?
Главный довод: фраза «pass rate равен 80%» ничего не говорит о знаменателе. В восемь «успешных» случаев могли попасть совершенно разные события:
- Ответы, прошедшие схему с первой попытки
- Ответы после ремонта формата
- Законченные документы с содержательной ошибкой
- Результаты, отклонённые человеком при ручной проверке
Каждый тип отказа требует своего исправления. Тайм-аут (когда система прерывает генерацию по лимиту времени) ведёт к настройке рантайма. Повреждённый JSON ведёт к парсеру. Пропущенное требование ведёт к промпту или к замене модели. Один процент стирает всю эту диагностику.
Автор предложил разделить выполнение на последовательные стадии: от старта процесса через проверку формата и наличия артефактов до границы, после которой начинается оценка содержания. Последнее решение принимает человек.
Ещё один сильный довод: валидный JSON обманчиво похож на готовый результат. Автор приводит два примера. Первый: модель возвращает не документы, а пути к будущим файлам. Второй: модель заполняет все поля формальными заглушками вроде «Источники перечислены в проекте» и «Противоречий не обнаружено». Оба варианта проходят проверку типов, но для пользователя бесполезны.
Третий класс ошибок ещё коварнее: модель успевает вернуть три документа и половину четвёртого, после чего генерация обрывается из-за лимита длины или памяти. Оценивать такой ответ по полноте нельзя: объект оценки не был создан целиком.
Аргументы против: где шлюз создаёт новые проблемы?
Автор честно обозначает ограничения. Запретить несколько фраз-заглушек недостаточно: локальная языковая модель найдёт другой способ вернуть формально заполненное поле. Проверка заглушек требует осторожности: минимальная длина текста после удаления заголовка, наличие структурных элементов, поиск обещаний вроде «будет добавлено позже», проверка ссылок между документами.
Чем больше смысловых правил попадает в completion gate, тем выше риск незаметно превратить его в ещё одного судью качества. Граница между «результат технически пригоден для оценки» и «результат хорош по содержанию» размывается, и шлюз начинает дублировать ту самую метрику, которую призван разгрузить.
Есть и практическая цена: отчёт со стадиями длиннее одной цифры. Для команды из двух человек это приемлемо, для конвейера из сотен запусков в день дополнительная сложность ощутима.
Один процент стирает диагностику. Тайм-аут ведёт к настройке рантайма, повреждённый JSON ведёт к парсеру, пропущенное требование ведёт к промпту или к способности модели. Это не рейтинг моделей и не рекомендация для выбора инфраструктуры. : Автор эксперимента
Что делать с этим прямо сейчас?
Разработчикам, которые строят системы на локальных языковых моделях. Разделите свой единый pass rate на два слоя. Первый: техническая пригодность (процесс завершён, JSON валиден, артефакты на месте и не заглушки). Второй: оценка содержания. Когда метрика падает, вы сразу видите, чинить рантайм или переписывать промпт.
Авторам Дзена и контент-маркетологам. Если вы используете локальную модель для генерации структурированного контента, проверяйте не только «получен ли ответ», а «получен ли ответ, с которым можно работать». Заглушка в красивой обёртке обманывает автоматику, но не читателя.
Предпринимателям, выбирающим между облаком и локальным запуском. Метод применим к любой модели, облачной или локальной. Но именно при локальном запуске (через Ollama, llama.cpp и подобные инструменты) тайм-ауты и нехватка памяти случаются чаще, и без шлюза завершённости вы не отличите проблему железа от проблемы модели.
Подход с completion gate кажется мне избыточным ровно до первого случая, когда вы два дня ищете ошибку в промпте, а причина оказывается в том, что модель просто не дописала ответ до конца. Я сталкивался с этим при тестировании локальных моделей для задач dzen.guru: красивая таблица результатов, а внутри три документа из четырёх. По моим наблюдениям, заглушки и обрезанные ответы составляют заметную долю «успешных» генераций, особенно на моделях с ограниченным контекстным окном. Метод не требует сложной инфраструктуры: достаточно добавить семь проверок перед тем, как засчитывать результат. Оговорка: автор прямо предупреждает, что это не рейтинг и не рекомендация. Шлюз не гарантирует качество, он гарантирует, что вы оцениваете то, что реально существует.
Completion gate не станет стандартом индустрии и не попадёт в заголовки, но сама идея разделить «модель не смогла закончить» и «модель закончила плохо» уже проникает в инструменты для работы с локальными языковыми моделями, и тем, кто строит свои конвейеры генерации, дешевле внедрить эти семь проверок сейчас, чем через полгода разбирать тысячи ложных «успехов».

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Han workflow in n8n: как закрыть разрыв между одобрением и записью в Bitrix24
Bitrix24, n8n и MCP-сервер (протокол, через который ИИ-агент подключается к внешним инструментам) можно связать в единый автоматический конвейер, но одно…

Разработки в области искусственного интеллекта направлены на скорость, но 52% ИИ-кода не ускорили проекты
Microsoft второго июня запустила Project Solara, операционную систему, где ИИ-агенты заменяют привычные приложения, и впервые отдала управление машине, а не…

Transfer learning нейросети без GPU и датасета: 2 отклонения из 31 вместо 14
Microsoft и Claude Code тут ни при чём в смысле корпоративного запуска: автор-практик собрал два навыка, которые снимают манеру письма с готовых текстов и…
Комментарии