Constrained Decoding
Узнай, как ограниченное декодирование обеспечивает соблюдение правильного JSON, схем, грамматик и вызовов инструментов, делая ответы ИИ более безопасными, структурированными и удобными для программного анализа.
Ограниченное декодирование — это метод инференса, который ограничивает генеративную модель допустимыми выходными данными при генерации каждого токена. Вместо того чтобы позволять модели выбирать из всего своего словаря, декодер удаляет варианты, которые нарушают правило, такие как список разрешенных меток, регулярное выражение, грамматика или JSON Schema. Это делает ответы модели более простыми и безопасными для синтаксического анализа программным обеспечением, особенно когда системе искусственного интеллекта необходимо вернуть структурированные данные или выбрать разрешенное действие.
Как работает ограниченное декодирование#
Авторегрессионная языковая модель генерирует последовательность по одному токену за раз. На каждом шаге она присваивает возможным следующим токенам оценки, называемые логитами, и обычно преобразует их в вероятности с помощью softmax. Ограниченное декодирование вставляет дополнительный шаг фильтрации:
- Отслеживай ту часть вывода, которая уже сгенерирована.
- Определяй, какие следующие токены остаются допустимыми в рамках ограничения.
- Маскируй недопустимые токены, чтобы их вероятность становилась равной нулю.
- Выбирай или выполняй сэмплирование из оставшихся допустимых токенов.
- Обновляй состояние ограничения и повторяй процесс.
Допустимый набор изменяется динамически. После генерации {"status": ", например, схема может разрешать только токены, которые могут дополнить "approved", "rejected" или "review". Движки, предлагающие структурированные выходы vLLM, могут принудительно применять выбор, регулярные выражения, грамматики и JSON-схемы, в то время как генерация JSON Outlines может выводить ограничения из схем или типизированных моделей Python.
Декодирование с графовыми ограничениями описывает реализации, которые представляют допустимые последовательности в виде путей через граф или конечный автомат. Каждый сгенерированный токен переводит декодер в другое состояние, исходящие ребра которого определяют следующие допустимые варианты. Этот подход полезен для грамматик, взаимосвязей сущностей и других правил, зависящих от состояния.
Связанные понятия и ключевые различия#
Ограниченное декодирование тесно связано с несколькими концепциями искусственного интеллекта, но они не являются взаимозаменяемыми:
- Структурированные выходы: Желаемый результат, такой как объект с обязательными полями и типами данных. Ограниченное декодирование — это один из механизмов, используемых для получения такого результата. Сервисы, включая структурированные выходы OpenAI, структурированные выходы Claude и структурированные выходы Gemini, предоставляют элементы управления на основе схем.
- Режим JSON: Обычно гарантирует правильный синтаксис JSON, но может не принудительно задавать определенные ключи, типы или разрешенные значения. Декодирование с ограничением по схеме нацелено на конкретную структуру.
- Вызов функций и использование инструментов: Определяет, как модель запрашивает внешнюю операцию. Ограниченное декодирование может обеспечивать соблюдение допустимых имен функций и форм аргументов, но приложение по-прежнему выполняет и авторизует инструмент.
- Промпт-инжиниринг: Просит модель следовать формату с помощью инструкций. Он влияет на поведение, но не устраняет недопустимые токены механически.
- Спекулятивное декодирование: Ускоряет генерацию путем предложения и проверки токенов. Его главная цель — скорость, в то время как ограниченное декодирование контролирует валидность.
Типизированные системы могут определять схемы с помощью таких инструментов, как Pydantic JSON Schema, вместо того чтобы вручную прописывать каждое правило.
Практические применения#
Обработка документов: Система обработки счетов может извлекать vendor, invoice_number, total и currency из отсканированных документов. Ограниченное декодирование гарантирует, что ответ имеет ожидаемые ключи и типы данных до того, как он поступит в бухгалтерское программное обеспечение. Оно предотвращает появление некорректных полезных данных, хотя и не может гарантировать, что извлеченная сумма является фактически верной.
Автоматизация безопасности на основе компьютерного зрения: Система может использовать Ultralytics YOLO26 для обнаружения рабочих и средств защиты, а затем отправлять соответствующие наблюдения в языковую модель. Декодер может ограничить решение модели значениями no_action, manual_review или send_alert. В рабочем процессе Ultralytics Platform Agents модели компьютерного зрения, условия, языковые модели и действия могут быть связаны так, чтобы только подходящие изображения переходили к последующим шагам.
Пример практического рабочего процесса#
Предсказания компьютерного зрения уже являются структурированными, а не генерируются по токенам. Следующий рабочий процесс режима предсказания YOLO создает JSON, который может стать входными данными для последующего принятия решений генеративной языковой моделью:
from ultralytics import YOLO
# Load the recommended object detection model
model = YOLO("yolo26n.pt")
# Run inference and select the first result
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Serialize detections for a downstream constrained decoder
json_output = result.to_json()
print(json_output)Здесь to_json() выполняет детерминированную сериализацию, а не ограниченное декодирование. Шаг ограничения произошел бы позже, если бы генеративная модель преобразовала эти детектированные объекты в отчет или действие с ограниченной схемой.
Преимущества, ограничения и лучшие практики#
Ограниченное декодирование снижает количество сбоев синтаксического анализа, повторных попыток, неожиданных полей и неверных аргументов инструментов. Однако структурная валидность не устраняет галлюцинации LLM: идеально сформированный ответ все равно может содержать неверные факты или неподходящее действие.
Используй узкие схемы, содержательные описания полей, перечисления для закрытых наборов вариантов и поля, допускающие нулевые значения, когда информация может быть недоступна. Проверяй бизнес-правила после генерации, обрабатывай отказы и усеченные ответы, а также тестируй поддерживаемый каждым провайдером подмножество схем. В продакшене также измеряй накладные расходы на компиляцию схем, задержку декодирования и семантическую точность, а не оценивай только соответствие формату.









