Почему этот трюк вообще работает. Сгенерить N токенов с нуля стоит N последовательных прогонов большой модели - каждый следующий токен зависит от предыдущего, нельзя считать второй пока не готов первый. А проверить готовую цепочку из N токенов стоит один прогон. Трансформер устроен так, что forward pass по последовательности t1..tN параллельно даёт N предсказаний: что модель выдала бы после t1, что после t1 t2, что после t1 t2 t3 и так далее. Это бесплатно из архитектуры.
Поэтому к большой модели прицепляют маленькую черновую, в десятки раз быстрее. Черновая генерит N токенов вперёд, большая одним прогоном их проверяет. Первые k совпали с её собственным предсказанием - берём как есть, это ровно те токены что выдала бы большая модель сама в обычной генерации. На k+1-м расхождение - откат, считаем как обычно. Качество без потерь.
JSON предсказуем: после
"name": идёт строка, после строки запятая или скобка. Черновая угадывает почти всегда. Художественный текст так не угадаешь, промахи постоянные, метод вырождается в обычный.Значит креатив у openai в инференсе реально дороже кода. И spec decoding точно в проде, что бы там ни писали в доках. Жалко что на это нет скидки в API pricing-е