каркас: домен, генерация типов фронта, стенд и карточки задач
Контракт в коде: КИО по нормативу, 43 события WS по шести союзам направлений,
таймеры ГОСТ, таксономия E1–E6, шесть компетенций радара. make types гоняет
их через JSON Schema в generated.ts, тест ловит забытую регенерацию.
Стенд: docker compose postgres + backend, health отвечает, база досягаема
из контейнера бэкенда. Makefile не врёт — нереализованные цели падают
и называют карточку, которая их закроет.
frontend/.npmrc: под WSL2 npm install зависает на дефолтных 15 сокетах.
2026-09-15 19:35:03 +03:00
|
|
|
|
# Общий чек-лист по классификатору 01 — МЧС.
|
|
|
|
|
|
# Наследуется сценариями через `extends`, дополняется локально.
|
|
|
|
|
|
# Методика: docs/product/METHODOLOGY.md#чек-листы-опроса
|
lct-07 (без LLM): слот-автомат, персона, звонящий на заготовках, make repl
Звонящий не выдаёт данные сам: автомат держит раскрытые факты явно и
отдаёт звонящему только их. Тест прогоняет длинную серию реплик и
проверяет, что ни один нераскрытый факт не прозвучал.
Главная находка — матчинг по порогу близости не работает. На
multilingual-e5-small настоящие вопросы дают 0.79–0.95, а «Оставайтесь
на линии» — до 0.89: диапазоны перекрываются, и любой порог либо выдаёт
адрес на «успокойтесь», либо не слышит «где вы находитесь?».
Решение — сравнение с ближайшим соседом: у пункта чек-листа несколько
формулировок (examples), рядом общий список не-вопросов
(checklists/common.yaml), и реплика засчитывается пункту, только если она
ближе к нему, чем к любому не-вопросу. На отложенных фразах: 19 из 20
вопросов, 0 из 8 ложных срабатываний.
Реплика режется только по границам предложений, со знаком: «?» для e5 —
сильный признак вопроса, без него «Куда ехать» уходит к не-вопросам.
Подсказка берёт неотработанный пункт из автомата. В живой сессии автомат
начнёт слышать оператора, когда голосовой контур передаст ему stt.final.
Ждёт ключа LLM: условие approach у скрытых фактов, звонящий своими
словами, dialog/llm.py с кэшем.
2026-09-17 13:57:43 +03:00
|
|
|
|
#
|
|
|
|
|
|
# `examples` — другие формулировки того же вопроса. Чем их больше и чем они
|
|
|
|
|
|
# разнообразнее, тем точнее звонящий «понимает» оператора. Писать так, как
|
|
|
|
|
|
# говорят живые операторы, а не как в инструкции.
|
каркас: домен, генерация типов фронта, стенд и карточки задач
Контракт в коде: КИО по нормативу, 43 события WS по шести союзам направлений,
таймеры ГОСТ, таксономия E1–E6, шесть компетенций радара. make types гоняет
их через JSON Schema в generated.ts, тест ловит забытую регенерацию.
Стенд: docker compose postgres + backend, health отвечает, база досягаема
из контейнера бэкенда. Makefile не врёт — нереализованные цели падают
и называют карточку, которая их закроет.
frontend/.npmrc: под WSL2 npm install зависает на дефолтных 15 сокетах.
2026-09-15 19:35:03 +03:00
|
|
|
|
id: fire
|
|
|
|
|
|
dds: "01"
|
|
|
|
|
|
checklist:
|
lct-07 (без LLM): слот-автомат, персона, звонящий на заготовках, make repl
Звонящий не выдаёт данные сам: автомат держит раскрытые факты явно и
отдаёт звонящему только их. Тест прогоняет длинную серию реплик и
проверяет, что ни один нераскрытый факт не прозвучал.
Главная находка — матчинг по порогу близости не работает. На
multilingual-e5-small настоящие вопросы дают 0.79–0.95, а «Оставайтесь
на линии» — до 0.89: диапазоны перекрываются, и любой порог либо выдаёт
адрес на «успокойтесь», либо не слышит «где вы находитесь?».
Решение — сравнение с ближайшим соседом: у пункта чек-листа несколько
формулировок (examples), рядом общий список не-вопросов
(checklists/common.yaml), и реплика засчитывается пункту, только если она
ближе к нему, чем к любому не-вопросу. На отложенных фразах: 19 из 20
вопросов, 0 из 8 ложных срабатываний.
Реплика режется только по границам предложений, со знаком: «?» для e5 —
сильный признак вопроса, без него «Куда ехать» уходит к не-вопросам.
Подсказка берёт неотработанный пункт из автомата. В живой сессии автомат
начнёт слышать оператора, когда голосовой контур передаст ему stt.final.
Ждёт ключа LLM: условие approach у скрытых фактов, звонящий своими
словами, dialog/llm.py с кэшем.
2026-09-17 13:57:43 +03:00
|
|
|
|
- id: q_address
|
|
|
|
|
|
question: "Назовите адрес: улица, дом, квартира, этаж?"
|
|
|
|
|
|
examples: ["Какой у вас адрес?", "Где вы находитесь?", "На каком этаже?", "Номер дома и квартиры?"]
|
|
|
|
|
|
- id: q_what_burns
|
|
|
|
|
|
question: "Что именно горит?"
|
|
|
|
|
|
examples: ["Что горит?", "Что именно загорелось?", "Откуда идёт огонь?"]
|
|
|
|
|
|
- id: q_people
|
|
|
|
|
|
question: "Есть ли люди в помещении?"
|
|
|
|
|
|
examples: ["Кто-то остался внутри?", "Все успели выйти?"]
|
|
|
|
|
|
- id: q_smoke
|
|
|
|
|
|
question: "Куда идёт дым, есть ли задымление подъезда?"
|
|
|
|
|
|
examples: ["Куда идёт дым?", "Есть ли задымление в подъезде?", "Сильный дым?"]
|
|
|
|
|
|
- id: q_gas
|
|
|
|
|
|
question: "Есть ли газ, можно ли перекрыть?"
|
|
|
|
|
|
examples: ["У вас газовая плита?", "Перекрыть газ сможете?"]
|
|
|
|
|
|
- id: q_caller
|
|
|
|
|
|
question: "Представьтесь и оставьте контактный телефон"
|
|
|
|
|
|
examples: ["Как вас зовут?", "Ваш номер телефона?"]
|