Вопрос с собеседования · AI и LLM
Как получить от LLM ответ в строгом формате, например JSON?
MiddleПромпты и структурированный выводAPI языковых моделей
Ещё спрашивают так:
- Что такое structured output?
- Как надёжно извлечь данные из текста с помощью LLM?
- Что делать, если модель вернула невалидный JSON?
Коротко
Используйте режим структурированного вывода по JSON-схеме, если API его поддерживает, и всегда валидируйте результат в коде.
- Без такого режима: схема и пример в промпте, низкая температура, разбор с повтором при ошибке
- Схема делает поля и типы обязательными; валидатор (pydantic) ловит остальное
А ещё Схема гарантирует форму, но не правильность значений — их тоже проверяют
Подробно
Когда ответ модели читает программа, свободный текст не подходит. Способы, от надёжного к простому:
- Структурированный вывод по схеме. Многие API позволяют передать JSON-схему, и модель гарантированно возвращает валидный по ней JSON (декодирование ограничивается допустимыми токенами).
- Вызов функций (tool calling). Описываем «функцию» с параметрами — модель возвращает аргументы в виде JSON.
- Только промпт. Схема и пример в промпте, просьба вернуть только JSON без пояснений, низкая температура. Ответ разбираем и при ошибке повторяем запрос, добавив текст ошибки.
Что ещё важно:
- валидация в коде — типы, обязательные поля, допустимые значения (например, pydantic); схема не гарантирует, что значения верны;
- поле для отсутствия — разрешить
nullили"unknown", иначе модель выдумает значение, лишь бы заполнить обязательное поле; - плоские и простые схемы работают надёжнее глубоко вложенных;
- перечисления (enum) вместо свободного текста для категорий.
Пример
from pydantic import BaseModel
class Lead(BaseModel):
name: str | None
company: str | None
budget_rub: int | None
intent: str # "buy" | "research" | "unknown"
# raw — JSON от модели, полученный в режиме structured output по Lead.model_json_schema()
lead = Lead.model_validate_json(raw) # ошибка формата → повторный запросЧто хотят услышать
- Механизмы: структурированный вывод по схеме, tool calling, промпт.
- Обязательная валидация в коде и обработка ошибок.
- Разрешённое «нет данных» против выдумывания.
Частые ошибки
- Разбирать ответ регулярными выражениями без валидации.
- Делать все поля обязательными — модель заполнит их выдумкой.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Попросить модель «отвечай JSON» — этого достаточно
- ✓Структурированный вывод по JSON-схеме и валидация в коде
- ✗Схема гарантирует и форму, и правильность значений
- ✗Высокая temperature снижает число ошибок формата
Что спросят дальше
Разбор темы
- Промпты и структурированный вывод
Как написать промпт, который стабильно работает, отделить инструкции от данных, получить от модели строгий JSON и когда разбивать задачу на цепочку вызовов.
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.