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-сервер