TL;DR
FASTRIC — это метод структурирования многошаговых промптов через явное описание сценария взаимодействия. Вместо расплывчатых инструкций типа "веди диалог с пользователем" вы прописываете 7 элементов: конечные состояния, агенты, состояния системы, триггеры переходов, роли агентов, начальное состояние и ограничения. Модель получает не абстрактную задачу, а чёткий сценарий — как конечный автомат, где каждый шаг диалога явно определён.
Исследователи обнаружили парадокс детализации: более мощные модели иногда хуже работают с излишне подробными инструкциями. ChatGPT-5 показал 90% точности при средней детализации (L3), но провалился до 39% при максимальной (L4) — упал на 57%. DeepSeek-V3.2 достиг 100% при любой детализации выше минимальной. Phi4-14.7B не показал стабильного результата ни на одном уровне. Причина: сильные модели "задыхаются" от избыточного контроля (требование писать "MORE" заглавными вызвало массовые отказы), слабые — не вывозят абстракции.
Метод вводит уровни детализации промпта как параметр управления: L1 (неявное описание) → L2 (форматы вывода) → L3 (нумерованные шаги) → L4 (максимальная явность с императивами MUST, WAIT, отдельными блоками правил). Под каждую модель нужна своя "зона Златовласки" — не слишком абстрактно, не слишком жёстко.
Схема метода
Одношаговый процесс (структурирование промпта):
ЭТАП ПРОЕКТИРОВАНИЯ:
Определить 7 элементов сценария:
├─ F (Final States): Когда диалог завершён
├─ A (Agents): Кто участвует
├─ S (States): Режимы работы системы
├─ T (Triggers): Что переключает режимы
├─ R (Roles): Что делает AI в каждом режиме
├─ I (Initial State): С чего начать
└─ C (Constraints): Глобальные правила
ЭТАП КАЛИБРОВКИ:
Выбрать уровень детализации (L1-L4) под модель
→ Один промпт с явным сценарием
Выполняется в одном промпте — вы не делаете отдельные запросы, а сразу задаёте весь сценарий.
Пример применения
Задача: Настроить виртуального помощника для приёма заказов в интернет-магазине кофе с чёткой процедурой: уточнить размер → степень обжарки → способ помола → подтверждение → оплата. Без перескоков и отклонений от сценария.
Промпт (уровень L3 - средняя детализация):
Ты — помощник приёма заказов в интернет-магазине кофе.
СОСТОЯНИЯ:
- Состояние 0 (Начало): Запрос размера упаковки
- Состояние 1 (Обжарка): Запрос степени обжарки
- Состояние 2 (Помол): Запрос способа помола
- Состояние 3 (Подтверждение): Показ итоговой корзины
- Состояние 4 (Завершение): Переход к оплате
ТРИГГЕРЫ ПЕРЕХОДОВ:
- Клиент выбрал размер (250г/500г/1кг) → переход в Состояние 1
- Клиент выбрал обжарку (светлая/средняя/тёмная) → переход в Состояние 2
- Клиент выбрал помол (зерно/эспрессо/кемекс/френч-пресс) → переход в Состояние 3
- Клиент подтвердил заказ ("да"/"подтверждаю") → переход в Состояние 4
ТВОЯ РОЛЬ В КАЖДОМ СОСТОЯНИИ:
Состояние 0:
(1) Я предложу выбрать размер: 250г, 500г или 1кг
(2) Я жду выбор клиента
(3) Я фиксирую выбор и перехожу к следующему шагу
Состояние 1:
(1) Я предложу выбрать обжарку: светлая, средняя или тёмная
(2) Я жду выбор клиента
(3) Я фиксирую выбор и перехожу к следующему шагу
Состояние 2:
(1) Я предложу выбрать помол: зерно, под эспрессо, под кемекс, под френч-пресс
(2) Я жду выбор клиента
(3) Я фиксирую выбор и перехожу к следующему шагу
Состояние 3:
(1) Я покажу итоговую корзину с выбранными параметрами
(2) Я жду подтверждения или корректировки
(3) Если "да" — перехожу к оплате. Если корректировка — возвращаюсь к нужному шагу
НАЧАЛЬНОЕ СОСТОЯНИЕ: Состояние 0
ОГРАНИЧЕНИЯ:
- Я НИКОГДА не предлагаю параметры из следующих шагов, пока не завершён текущий
- Я НИКОГДА не перескакиваю через состояния
- При неясном ответе клиента я переспрашиваю в рамках текущего состояния
Результат:
Модель будет последовательно проводить клиента через 5 состояний. На каждом шаге вы увидите: - Чёткий вопрос только про текущий параметр (размер, потом обжарка, потом помол) - Ожидание вашего ответа без перескоков - Фиксацию выбора и переход к следующему состоянию - Итоговое подтверждение перед оплатой
Если клиент напишет "хочу тёмную обжарку" на первом шаге (размер ещё не выбран), модель переспросит про размер, не перепрыгивая состояния.
Почему это работает
Слабость LLM: Модели "размазывают" многошаговые диалоги — начинают задавать вопросы из будущих этапов, перескакивают шаги, теряют структуру при неоднозначных ответах. В голове у модели нет чёткого счётчика состояний — она генерирует следующую реплику по паттернам из обучающих данных, где диалоги часто нелинейные и гибкие.
Сильная сторона LLM: Модели отлично следуют явным структурированным инструкциям, особенно когда прописаны конкретные условия переходов ("если X, то Y"). Нумерация шагов, триггеры, явные состояния создают опорные точки для генерации — модель "видит" в какой точке сценария находится.
Как метод использует это: FASTRIC превращает неявный диалог в явный сценарий через 7 элементов. Вместо "веди диалог про кофе" модель получает: "Состояние 0 → триггер (выбрал размер) → Состояние 1". Структура убирает двусмысленность — модель следует условиям переходов, а не импровизирует логику диалога на лету.
Рычаги управления:
Уровень детализации (L1-L4) — главный параметр под модель: - Для мощных моделей (GPT-4, Claude): L2-L3 достаточно. L4 может навредить — избыточный контроль вызывает отказы - Для слабых моделей: L3-L4 критичны. Без явной нумерации шагов теряют последовательность - Для DeepSeek: L2+ даёт идеальный результат
Нумерация действий (1) (2) (3) — добавьте для неустойчивых моделей, уберите для экономии токенов если модель стабильна на L2.
WAIT-инструкции ("Я жду ответ клиента") — критичны для предотвращения "проговаривания" за пользователя. Без них модель может генерировать за обе стороны.
Императивы (MUST, ONLY, НИКОГДА) — усильте в L4 если модель игнорирует ограничения. Ослабьте если модель становится слишком жёсткой (отказывает на малейшие отклонения формата).
Триггеры переходов — замените на свои условия. Вместо "клиент выбрал размер" может быть "клиент указал бюджет >5000₽", "прошло 3 сообщения", "получено подтверждение email".
Шаблон промпта
Ты — {роль_AI}.
СОСТОЯНИЯ:
- Состояние 0 ({название}): {что делает AI}
- Состояние 1 ({название}): {что делает AI}
- Состояние 2 ({название}): {что делает AI}
ТРИГГЕРЫ ПЕРЕХОДОВ:
- {условие_1} → переход в Состояние {N}
- {условие_2} → переход в Состояние {M}
- {условие_3} → переход в Состояние {K}
ТВОЯ РОЛЬ В КАЖДОМ СОСТОЯНИИ:
Состояние 0:
(1) Я {действие_1}
(2) Я жду {событие}
(3) Я {действие_2} и перехожу к следующему шагу
Состояние 1:
(1) Я {действие_1}
(2) Я жду {событие}
(3) Я {действие_2} и перехожу к следующему шагу
[Повторить для каждого состояния]
НАЧАЛЬНОЕ СОСТОЯНИЕ: Состояние {N}
ОГРАНИЧЕНИЯ:
- Я НИКОГДА не {нежелательное_действие_1}
- Я НИКОГДА не {нежелательное_действие_2}
- При {условие} я {реакция}
Заполнение плейсхолдеров:
- {роль_AI} — кто AI в этом сценарии (консультант, репетитор, помощник бронирования)
- {название} состояния — краткое имя режима (Начало, Уточнение, Подтверждение, Завершение)
- {что делает AI} — цель этого состояния (запросить данные, дать обратную связь, подтвердить)
- {условие} триггера — что переключает состояния (пользователь дал ответ, выбрал опцию, подтвердил)
- {действие} — конкретные действия AI в нумерованных шагах
- {событие} — что ожидается от пользователя
- {нежелательное_действие} — что AI не должен делать никогда (перескакивать шаги, раскрывать ответ заранее)
Это шаблон уровня L3 (средняя детализация с нумерацией). Для мощных моделей можете убрать нумерацию (→ L2). Для слабых — добавить императивы MUST, ONLY в ограничения (→ L4).
🚀 Быстрый старт — вставь в чат:
Вот шаблон FASTRIC для многошаговых диалогов. Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про роль AI, какие состояния нужны, что служит триггерами переходов, какие ограничения важны — потому что ей нужно заполнить структуру сценария. Она возьмёт паттерн из шаблона и адаптирует под вашу задачу с учётом специфики.
Ограничения
⚠️ Оптимальная детализация непредсказуема: Невозможно заранее узнать какой уровень L1-L4 подойдёт вашей модели без тестирования. ChatGPT-5 провалился на максимальной детализации (L4), хотя логично ожидать обратного. Начинайте с L2-L3 и корректируйте если видите сбои.
⚠️ Два типа сбоев: Модели либо переспрашивают вместо действия ("Вы хотите перейти к следующему шагу?" вместо перехода), либо игнорируют неоднозначные ответы (интерпретируют "да" как согласие, хотя нужно переспросить). Первое лечится добавлением императивов, второе — явными примерами неоднозначностей в ограничениях.
⚠️ Регистрозависимость на L4: Избыточная точность спецификации ("напиши EXACTLY 'MORE'") может сломать гибкость — модель откажет на "more" или "ещё". Если видите такое — откатывайтесь к L3 или смягчайте требования к форматам.
⚠️ Не для простых диалогов: Накладные расходы структуры оправданы для сценариев от 3+ состояний. Для линейных Q&A достаточно обычных промптов без FASTRIC.
Как исследовали
Команда взяла детского репетитора по математике как эталонный сценарий: 3 состояния (начало → лёгкий режим → сложный режим), переключение по командам "ещё" (self-loop) и "сменить" (переход между режимами). Составили стандартизированный диалог на 21 ход, покрывающий все переходы и неоднозначные ответы. Один и тот же сценарий описали в 4 вариантах детализации — от абстрактного L1 ("Я буду задавать вопросы...") до максимально жёсткого L4 с императивами MUST, нумерацией каждого действия и отдельными блоками критических правил.
Прогнали 20 независимых прогонов на трёх моделях (DeepSeek-V3.2, ChatGPT-5, Phi4-14.7B) для каждого уровня — всего 240 диалогов. Каждый прогон начинался с чистого чата, чтобы изолировать эффект спецификации от истории общения. Измеряли процедурное соответствие: сколько из 21 хода модель выполнила правильно (следуя FSM-сценарию) до первого нарушения. Правильность хода = модель задала вопрос → дождалась ответа → оценила → запросила команду навигации, при этом переходы по состояниям соответствуют триггерам.
Результат удивил: не "чем детальнее, тем лучше", а U-образная или инвертированная-U зависимость. DeepSeek показал детерминированные 100% на L2-L4 (все 60 прогонов идентичны, нулевой разброс) — резкое улучшение после L1 и стабильность дальше. ChatGPT-5 взлетел на L3 до 90%, но рухнул на L4 до 39% — избыточная детализация сломала выполнение. Phi4 вообще не вышел на стабильный режим ни на одном уровне, с огромным разбросом (стандартное отклонение 0.16-0.36).
Почему ChatGPT провалился на L4? Регистрозависимость: когда спецификация требовала писать "MORE" заглавными, модель начала отвергать пользовательский ввод "more" как невалидный — формальность превратилась в хрупкость. Второй паттерн сбоев — confirmation-seeking: вместо прямого перехода состояния модель переспрашивала "Вы хотите переключиться?" (что не предусмотрено сценарием).
Ключевой вывод: у каждой модели есть "зона Златовласки" детализации — не слишком абстрактно (модель додумывает неправильно), не слишком жёстко (модель "задыхается" от ограничений). Находить эту зону можно только экспериментально.
Адаптации и экстраполяции
🔧 Техника: Убрать WAIT-инструкции → видеть рассуждения модели
Базовый шаблон L3 включает явные (2) Я жду {событие} на каждом шаге. Это предотвращает проговаривание — модель не генерирует за пользователя. Но иногда полезно увидеть КАК модель интерпретирует текущее состояние.
Состояние 1:
(1) Я предложу выбрать обжарку: светлая, средняя или тёмная
(2) [УБРАЛИ "Я жду выбор клиента"]
(3) Я фиксирую выбор и перехожу к следующему шагу
→ Добавить в конец промпта:
"После каждого моего действия я покажу: [Текущее состояние: X] [Жду триггер: Y]"
Теперь модель будет явно отображать внутреннее состояние после каждой реплики. Полезно для отладки сложных сценариев с множеством состояний.
🔧 Техника: Добавить состояние "Ошибка" → обработка некорректных входов
Базовый шаблон предполагает что пользователь в итоге даст валидный триггер. Для реальных сценариев добавьте состояние обработки ошибок:
СОСТОЯНИЯ:
[...существующие состояния...]
- Состояние E (Ошибка): Обработка некорректного ввода
ТРИГГЕРЫ ПЕРЕХОДОВ:
[...существующие триггеры...]
- Пользователь дал ответ НЕ из списка допустимых → переход в Состояние E
- В Состоянии E: после переспроса → возврат в предыдущее состояние
ТВОЯ РОЛЬ:
Состояние E:
(1) Я объясняю какие варианты допустимы в текущем контексте
(2) Я жду корректный ввод
(3) Я возвращаюсь в состояние, из которого попал в ошибку
Это превращает линейный сценарий в отказоустойчивый — модель не застревает на неожиданных ответах.
🔧 Техника: Персонифицированные агенты вместо безликих ролей → острее выполнение характера
Стандартный FASTRIC описывает агентов функционально: "AI tutor", "student". Замените на конкретные персонажи с характерами:
АГЕНТЫ:
- Я (AI) — "Барбос", восторженный продавец кофе, использую слова "кайф", "топчик", "огонь"
- Ты (клиент) — выбираешь кофе
ТВОЯ РОЛЬ В КАЖДОМ СОСТОЯНИИ:
Состояние 0:
(1) Я (в стиле Барбоса) предложу выбрать размер: "Какой объём кайфа тебе нужен?"
Персонификация усиливает стилистическое соблюдение — модель генерирует более характерные реплики, чем при абстрактных ролях. Работает для сценариев где важна эмоциональная окраска (продажи, образование, развлечение).
Ресурсы
FASTRIC: Prompt Specification Language for Verifiable LLM Interactions | Описание FSM-подхода к структурированию промптов, 4 уровня детализации (L1-L4), результаты тестирования на DeepSeek-V3.2, ChatGPT-5, Phi4-14.7B | Wen-Long Jin, Department of Civil and Environmental Engineering, University of California, Irvine
