Привет, AI

Заметки о том, как модели попадают в продакшн и что из этого выходит

Структурированный вывод без боли

«Верни ответ в JSON» работает ровно до первого длинного письма с цитатой и кавычками внутри. Дальше нужен контракт.

Три уровня

  1. Просьба в промпте. Ломается на 2–5 % ответов.
  2. Схема через встроенный режим структурированного вывода. Ломается почти никогда, но ограничивает вложенность.
  3. Схема плюс валидация плюс один повтор с текстом ошибки. То, с чем живём.
{
  "type": "object",
  "required": ["intent", "order_id", "reply"],
  "properties": {
    "intent": {"enum": ["refund", "delivery", "other"]},
    "order_id": {"type": ["string", "null"]},
    "reply": {"type": "string", "maxLength": 1200}
  }
}

Важная деталь: maxLength в схеме не гарантирует длину, модель её не видит. Длину проверяем сами и при превышении просим сократить, передавая первый вариант.

Что не делать

  • Не парсить JSON из markdown-блока регулярками. Один раз сломается на ```json внутри цитаты.
  • Не добавлять в схему поля «на будущее». Каждое поле — место, где модель может выдумать.