Чтобы результат модели обрабатывал код, нужен строгий формат. Надёжный способ — структурированный вывод по JSON-схеме: провайдер ограничивает генерацию так, что ответ гарантированно соответствует схеме.
class Ticket(BaseModel):
category: Literal["оплата", "доставка", "возврат", "другое"]
urgent: bool
summary: str
# SDK провайдеров принимают Pydantic-модель как схему ответа
ticket: Ticket = await llm.parse(messages, schema=Ticket)
Что важно знать
- Просьба «ответь в JSON» в промпте работает не всегда; схема на стороне провайдера — надёжнее.
- Валидировать результат всё равно: модель может заполнить поля правдоподобной ерундой.
- Перечисления (
Literal,enum) вместо свободных строк для категорий. - Поле с рассуждением перед ответом иногда повышает качество, но увеличивает расход токенов.
- Для открытых моделей — ограниченная генерация (grammar, Outlines, режимы vLLM).