Вы замечали? Один и тот же промпт — два разных ответа. Сегодня LLM выдаёт гениальную аналитику, завтра — откровенный бред с выдуманными цитатами. Продукт горит, пользователи жалуются. Промпт-инжиниринг не спасает. Файнтюнинг лишь подкрашивает статистику. Корень зла — недетерминизм самой архитектуры LLM.
А что если мы перестанем бороться с хаосом и вместо этого построим систему, которая использует хаос как генератор вариантов, а затем жёстко фильтрует результат? Именно это предлагает методология Стратум — инженерный подход, выросший из советской школы проектирования: ГОСТы, спецификации, разбиение на модули с чёткими входами-выходами.
Проклятие вероятности
LLM — это машина вероятности. Даже при температуре 0 и фиксированном seed остаётся неопределённость из-за аппаратного окружения, кэша и арифметики с плавающей точкой. Но главное — модель может выбрать любой правдоподобный путь. И часто выбирает неверный.
Попытки «зашить» правила в промпт — как лечить рак пластырем. Нужна архитектура, где LLM становится одним из компонентов, а не центром вселенной. Стратум даёт такую архитектуру.
Важно: Стратум — не промпт. Это набор слоёв, каждый из которых выполняет свою задачу. LLM есть только в двух из пяти слоёв. Остальные — детерминированные процедуры.
Пять страт (слоёв) детерминизма
Разбиваем задачу на пять последовательных слоёв, каждый со своей спецификацией. Вход каждого слоя — строго типизированные данные. Выход — тоже. Никаких «вольных интерпретаций».
1 Слой декомпозиции (Task Decomposition)
Получает сырой запрос пользователя. Разбивает на атомарные подзадачи. Использует LLM с жёстким промптом: «Выдели не более 5 подзадач, каждая — одно предложение». Результат — JSON-массив строк. Если LLM отдаёт больше 5 — режем детерминированно. Если меньше — дополняем пустыми? Нет, оставляем как есть. Детерминизм не самоцель, а рамка.
2 Слой извлечения фактов (Fact Extraction)
Для каждой подзадачи LLM (уже другая, менее креативная) извлекает факты из предоставленного контекста. Контекст может быть корпоративной базой знаний. О том, как правильно подготовить контекст для LLM, мы писали в статье «Как заставить LLM работать с корпоративными данными». На выходе — структура фактов с ссылками на источники.
3 Слой логического вывода (Inference)
Здесь LLM не нужна. Используем детерминированные правила (если-то, таблицы решений, калькуляторы). Если для вывода нужна генерация текста — возвращаемся к LLM, но с ограниченным набором шаблонов. Советская школа: «железобетонная логика».
4 Слой верификации (Verification)
Ключевой слой. Проверяем каждое утверждение на: а) внутреннюю согласованность, б) соответствие фактам из слоя 2, в) отсутствие галлюцинаций. Используем LLM с промптом верификатора. Если процент уверенности низкий — ответ отклоняется, генерируется новый. Как именно тестировать такие цепочки, описано в «Тестируем недетерминированные LLM». Прогоняем тесты, замеряем consistency.
5 Слой агрегации (Aggregation)
Собирает ответ из верифицированных фрагментов. Детерминированный шаблонизатор. Если какой-то кусок не прошёл верификацию, подставляет «Извините, не могу ответить». Честно и предсказуемо.
Пошаговое внедрение Стратум в ваш пайплайн
Не надо переписывать всё с нуля. Идите итеративно.
1 Аудит текущего пайплайна
Зафиксируйте, где LLM принимает решения сама. Нарисуйте граф потоков. Удивитесь, сколько точек неопределённости.
2 Выделите точки недетерминизма
Соберите статистику: сколько раз один и тот же запрос даёт разные ответы. Для этого есть инструменты вроде LangSmith или самописные тесты. См. статью по тестированию выше.
3 Опишите спецификацию каждого слоя
Возьмите за основу советский ГОСТ: «Слой получает на вход X, выдает Y, при обработке запрещено Z». Промпты для LLM пишутся как машинные коды — никаких «пожалуйста», только инструкции.
4 Реализуйте слой верификации
Не экономьте. Тут либо всё, либо ничего. Можно использовать готовые бэкенды: калькуляторы, векторные базы, API проверки фактов. О том, как собрать семантический пайплайн, читайте в «Как построить семантический пайплайн для LLM»
5 Запустите статистические тесты
Прогоните пайплайн на 1000 тестовых запросов 10 раз. Сравните ответы. Допустимое расхождение — 2%. Если больше — ищите утечку недетерминизма.
6 Итерируйте
Добавляйте новые сценарии. Совет: не пытайтесь детерминировать всё сразу. Начните с одного критического сценария. Например, обработка юридических документов. Кстати, о качестве оценки в праве — Lexometrica Ground Truth покажет, как избежать утечки данных при тестировании.
Ловушки на пути к детерминизму
Расскажу о четырёх граблях, на которые наступили лично.
- Стратум — это не промпт. Многие пытаются запихнуть все слои в один промпт. Не работает. Каждый слой — отдельный вызов LLM или детерминированная функция.
- Излишний детерминизм убивает гибкость. Если вы зафиксируете всё, LLM перестанет справляться с нестандартными запросами. Дайте слою декомпозиции свободу, а слою верификации — железную хватку.
- Синдром подлизывания (sycophancy). LLM пытается угодить пользователю, выдавая ложные факты. В слое верификации это легко заметить: факты не проходят. Подробнее — в статье «Как заставить LLM перестать подлизываться».
- Игнор контекста. Если корпоративная база не структурирована, слой извлечения фактов утонет. Используйте контекстуализацию (ссылка выше).
Почему советская школа? И при чём тут инженерия?
В СССР не было места «ляпам». Каждый блок системы проектировался с полной спецификацией. Стратум берёт эту философию: чёткие интерфейсы, отсутствие побочных эффектов, предсказуемость. LLM в этой парадигме — всего лишь нестабильный генератор, который мы оборачиваем в ГОСТ.
Забудьте про «правильные промпты» — LLM решают задачи иначе, чем люди. Статья «Забудьте про правильные промпты» объясняет, почему.
Инструментарий: что взять в руки
Для экспериментов со Стратумом вам понадобится локальная LLM. Сравните LM Studio и llama.cpp в нашем обзоре. Если нужен Tool Calling — гляньте обзор LLM с Tool Calling. Для серьёзных проектов одного промпта мало — читайте «LLM Engineer: профессия-призрак или новый золотой стандарт?»
Не верьте, когда говорят, что LLM понимает, чего вы хотите. Разбираемся здесь. Стратум — это способ перестать надеяться на понимание и начать проектировать.
Стратум не избавит от галлюцинаций полностью. Но он заставит LLM ошибаться только в тех рамках, которые вы контролируете. Используйте это как преимущество: в 80% случаев ответ будет абсолютно надёжным. Для остальных 20% у вас есть фолбэк. Инженер не ищет идеал — он проектирует систему, которая работает достаточно хорошо, чтобы не подвела.