Inference

structured outputs

Принудительная генерация модели в заданном формате (JSON, regex) с помощью grammar-сэмплинга.

Что такое structured outputs

Structured outputs — режим инференса, при котором модель гарантированно генерирует ответ в заданном формате (JSON-схема, regex, BNF-грамматика). Это достигается через grammar-сэмплинг: на каждом шаге декодирования маска запрещает токены, которые не могут продолжить валидную строку согласно заданным правилам.

Без этого механизма LLM могут генерировать «почти правильный JSON», нарушая структуру, что требует дополнительной обработки и ретраев. Со structured outputs — 100% соответствие схеме гарантировано.

Применения

  • Извлечение сущностей из текста (имена, даты, суммы) в виде JSON
  • Заполнение форм с валидацией типов
  • Генерация кода в строго определённом формате
  • Вызов инструментов (function calling) с корректными аргументами
  • Классификация с фиксированным набором меток

Реализации

# vLLM с JSON-схемой
from openai import OpenAI
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    city: str

client = OpenAI(base_url="http://localhost:8000/v1", api_key="token")
response = client.chat.completions.create(
    model="mistral-7b",
    messages=[{"role": "user", "content": "Иван, 30 лет, Москва"}],
    extra_body={
        "guided_json": Person.model_json_schema()
    }
)

# Outlines (библиотека)
import outlines
model = outlines.models.transformers("mistralai/Mistral-7B-Instruct-v0.2")
generator = outlines.generate.json(model, Person)
result = generator("Иван, 30 лет, Москва")  # → Person(name='Иван', age=30, city='Москва')

Связанные термины

  • serving — контекст применения
  • SGLang — имеет нативную поддержку и высокую производительность для structured outputs
  • temperature — параметр, влияющий на сэмплинг в рамках грамматики

Готовы запустить GPU-задачу?

Запустить GPU-сервер