Шаман обещал мамонта 🦣. Племя нашло stop-loss 📉
Глава 5. Погода меняется без предупреждения 🌦️
Модель — это не фундамент. Модель — это погода. Фундамент — контракты 🧱. Погоду нельзя зафиксировать, но можно построить дом, который её выдержит. Проблема в том, что погода меняется без предупреждения, а провайдер таких писем не рассылает.
Model drift: провайдер обновил модель без смены названия. Поведение изменилось, метрики поехали, тесты, которые вчера проходили, сегодня падают — или, что хуже, проходят, но проверяют уже не то. Модель сегодня и модель через полгода — это, возможно, две разные системы: шаман называется так же, но бубнит иначе 🥁. Вы об этом не узнаете, пока не прогоните golden set. Data drift: изменились входные данные. Пользователи стали писать по-другому, появились сценарии, которых не было в eval-наборе, и модель, корректная на старых данных, уверенно ошибается на новых. Классика жанра: «у нас все тесты зелёные» — а в проде пользователи жалуются 😬. Prompt drift: промпт «поплыл» от накопленных правок — кто-то добавил абзац, кто-то убрал запятую, кто-то поменял порядок инструкций, и теперь никто не помнит, зачем там каждый абзац. Промпт живёт в голове разработчика и в чате с коллегой: это не контракт, это фольклор 🗣️. Устная традиция прекрасна у костра, но с ней нельзя сделать diff.
Что делать — известно, и скучно, как всё настоящее. Регулярный прогон golden set на каждый релиз, а не раз в квартал 🧪. Мониторинг распределения ответов: если модель начала отвечать короче, длиннее или по-другому — это сигнал. Алерты на аномалии, чтобы не ждать письма в поддержку 🚨. Фиксация версии модели в контракте: если провайдер не даёт точную версию, это ваш риск, и его нужно хотя бы осознавать. Погоду не зафиксировать, но барометр повесить можно 🌊.
Полезно иногда посмотреть на себя честно: «мы используем AI» — это не уровень, а строчка в резюме 📝. Уровень нулевой — «мы просто вызываем модель и надеемся»: промпт в голове разработчика, тесты проверяют только счастливый путь, в прод едет всё, что собралось; большинство команд сидят здесь и называют это agile 🕺. Первый — промпт в Git и ручная проверка ответов: дисциплина появилась, но качество зависит от того, какой шаман сегодня у костра. Второй — есть eval-набор, метрики и CI-прогон с quality gates: можно спать спокойнее, но при смене модели всё ещё ломается. Третий — версионирование модели и промпта, canary, мониторинг: вы знаете, что происходит в проде, а не догадываетесь, и дрейф ловится, а не расследуется постфактум 🧭. Четвёртый — автоматический откат при деградации и бюджетные guardrails: система сама понимает, что что-то пошло не так, а человек подключается к разбору, а не к тушению пожара. Пятый — модель сама предлагает улучшения контрактов, человек утверждает. Фантастика? Пока да, но пять лет назад третий уровень тоже казался фантастикой, а каменный век, между прочим, когда-то считался передовым 🪨.
Иногда полезнее перечислить не то, что делать, а то, чего не стоит — тем более что именно это делают все, и в пещере делали то же самое. «Промпт в голове разработчика» — не контракт, а фольклор: уйдёт разработчик — уйдёт промпт. «Модель сама разберётся» — не разберётся: она не знает ваших требований, регуляторов и продакшена; надежда, что «духи разберутся», — антипаттерн постарше, но того же сорта. «Тесты позеленели — значит, всё хорошо» — зелёный тест на неверный контракт остаётся зелёным тестом на неверный контракт ✅. «Мы протестируем в проде» — прод не среда для экспериментов, а среда, где эксперименты видят пользователи, не подписывавшиеся быть бета-тестерами. «Добавим вторую модель для надёжности» — теперь у вас две недетерминированные системы, которые ошибаются по-разному: два шамана — это не вдвое меньше тумана, это два тумана, которые ещё и спорят 🌫️. «QA потом разберётся» — разберётся, но потом будет поздно: инцидент случится, данные утекут. И наконец «у нас же temperature=0, значит, всё детерминировано» — нет: температура снижает разброс, но не устраняет его. Детерминированность в LLM — как «стабильный релиз» в мобильной разработке: звучит убедительно, пока не проверишь 🙃.