lct-hack/scenarios/checklists/fire.yaml

28 lines
1.9 KiB
YAML
Raw Normal View History

# Общий чек-лист по классификатору 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` — другие формулировки того же вопроса. Чем их больше и чем они
# разнообразнее, тем точнее звонящий «понимает» оператора. Писать так, как
# говорят живые операторы, а не как в инструкции.
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: ["Как вас зовут?", "Ваш номер телефона?"]