From c3b874dc377d508a32581869e758e237fbb8ef2b Mon Sep 17 00:00:00 2001 From: AR 15 M4 Date: Sun, 26 Apr 2026 18:46:12 +0500 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B0=20Guard=20+=20=D1=83=D0=BF=D0=BE=D0=BC=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=B7=D0=B0=D1=89=D0=B8?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D1=85=20=D0=BC=D0=B5=D1=85=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B7=D0=BC=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлена карточка «Guard (условие перехода)» в раздел терминов: формат JSON, описание полей, пример require_legal_rep из new_booking. Guard добавлен в список защитных механизмов. Обновлён callout статуса. Co-Authored-By: Claude Sonnet 4.6 --- static/docs.html | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/static/docs.html b/static/docs.html index 02717b4..81ed401 100644 --- a/static/docs.html +++ b/static/docs.html @@ -311,6 +311,30 @@
Если из пошаговой ветки произошёл переход в другую (например, посреди записи спросили про цены), её состояние (текущий шаг и собранные слоты) запоминается в полях suspended_intent, resumable_step_code, resumable_slots. Когда маршрутизатор увидит, что пациент возвращается к исходной теме («ладно, продолжаем запись»), мы автоматически восстановим шаг и слоты.
+
+
Guard (условие перехода) (guard)
+
+

Правило, которое блокирует переход шага вперёд, пока не заполнены нужные слоты. Хранится в поле guards каждого шага (Настройки → Шаги → поле Guards). Проверяется после того, как модель вернула корректный state_after — то есть даже если модель «захотела» перейти, валидатор не пустит без нужных данных.

+

Формат — JSON-объект, где каждый ключ — имя guard'а:

+
{
+  "require_legal_rep": {
+    "description": "Для записи ребёнка нужны ФИО и телефон законного представителя",
+    "trigger_slot": "is_child",
+    "trigger_value": true,
+    "required_slots": ["legal_rep_name", "legal_rep_phone"]
+  }
+}
+

Поля:

+
    +
  • trigger_slot — слот, при значении которого guard активируется. Если опущен — guard активен всегда.
  • +
  • trigger_value — значение, которое должен иметь trigger_slot для активации (например, true).
  • +
  • required_slots — список слотов, которые должны быть заполнены для разрешения перехода.
  • +
  • description — пояснение для операторов; показывается в «Состоянии диалога» в Песочнице при срабатывании.
  • +
+

Сейчас guard задан на шаге qualify ветки new_booking: при is_child: true нельзя перейти в present, пока не заполнены legal_rep_name и legal_rep_phone. В Песочнице при срабатывании появляется красный блок: «🔒 guard require_legal_rep не пройден — ждём: legal_rep_name, legal_rep_phone».

+
+
+
Защита от петли (routing loop guard)
Счётчик handoff_count в состоянии диалога считает все переключения ветки. При превышении 3 переключений за диалог следующее переключение блокируется: диалог автоматически уходит в escalate_human с шаблонным ответом «Уточню детали с администратором клиники, свяжемся с вами в течение ближайшего часа». Это страховка от циклов вроде «запись ↔ цены ↔ запись ↔ цены».
@@ -391,6 +415,7 @@
  • Удержание в ветке защищает от ложного сброса сценария на коротких репликах вроде «Алексей» или «болит ухо».
  • Валидатор переходов блокирует «прыжки через шаг» — модель не сможет уйти из intro сразу в book.
  • +
  • Guard (условие перехода) блокирует переход вперёд до заполнения обязательных слотов. Настраивается в поле Guards каждого шага. Пример: при записи ребёнка нельзя уйти с шага qualify, пока не указаны ФИО и телефон родителя.
  • Защита от петли ограничивает число переключений ветки за диалог. После 3-го — авто-перевод на оператора.
  • Отложенный сценарий возвращает прерванный сценарий с теми же слотами и шагом — пациент не должен повторять имя или повод.
  • Ретрай LLM: и маршрутизатор, и ветка делают один повтор при сетевом сбое DeepSeek. При полном падении — откат транзакции и понятный ответ «модель временно недоступна».
  • @@ -404,7 +429,7 @@
- Документ описывает текущее состояние после Спринта 6b (блок D): удержание в ветке, боковые вопросы, структурированный ответ. Следующее: guards в сценарии записи (блок F), причина эскалации (блок E), умный маршрутизатор, видящий состояние диалога (блок G). + Документ описывает текущее состояние после Спринта 6b (блоки D + F): удержание в ветке, боковые вопросы, структурированный ответ, guards. Следующее: причина эскалации с reason (блок E), умный маршрутизатор, видящий состояние диалога (блок G).