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
|
|
|
|
# Реплики оператора, которые НЕ являются вопросом чек-листа.
|
|
|
|
|
|
#
|
|
|
|
|
|
# Зачем: матчинг по эмбеддингам сравнивает реплику с формулировками вопросов.
|
|
|
|
|
|
# Без этого списка «Оставайтесь на линии» оказывается ближе к пункту чек-листа,
|
|
|
|
|
|
# чем половина настоящих вопросов, — и звонящий выдаёт адрес на «успокойтесь».
|
|
|
|
|
|
# Реплика засчитывается вопросом, только если она ближе к пункту, чем к любой
|
|
|
|
|
|
# фразе отсюда.
|
|
|
|
|
|
#
|
|
|
|
|
|
# Дополнять, когда в разборе видно, что звонящий «понял вопрос», которого не было.
|
|
|
|
|
|
not_questions:
|
|
|
|
|
|
- "Служба 112, что случилось?"
|
|
|
|
|
|
- "Успокойтесь, пожалуйста"
|
|
|
|
|
|
- "Оставайтесь на линии"
|
|
|
|
|
|
- "Помощь уже едет"
|
|
|
|
|
|
- "Я вас понял"
|
|
|
|
|
|
- "Говорите громче, плохо слышно"
|
|
|
|
|
|
- "Выходите из квартиры"
|
|
|
|
|
|
- "Не кладите трубку"
|
|
|
|
|
|
- "Хорошо, записываю"
|
feat: уточнение адреса — место происшествия не равно адресу заявителя (lct-35)
Главный предмет проверки в билетах заказчика — адрес: названный заявителем
часто неверен, а настоящий добывается переспросом («ул. Станционная, 28»
оказывается Королёвом). Памятка АРМ-112 называет это обычным делом.
До этой правки оценка работала наоборот: ground_truth.address сравнивался
с единственным значением факта, поэтому курсант, правильно переспросивший
и записавший настоящий адрес, получал расхождение с эталоном, а записавший
ориентир — зачёт.
- Схема: у факта появились refined и refine_on, задаются только вместе.
- Слот-автомат различает уточнение и повтор: повтор раздражает звонящего,
уточнение — нет, оператор спросил о другом и получил другое.
- Звонящий поправляется отдельной репликой, а не повторяет прежнее значение;
офлайн-таблица получила секцию refine.
- Оценка: метрика address_refined (E1, опрос). Сделана отдельной, а не правкой
метрики address: «записал не тот адрес» и «не спросил» — разные навыки
и разные компетенции в радаре.
- Общие пункты чек-листа подключаются по требованию сценария: формулировки
в checklists/common.yaml, сценарий объявляет пункт с тем же id без текста.
Добавлять «уточните адрес» во все сценарии нельзя — неотработанный пункт
штрафует за вопрос, которого сценарий не требовал.
- scenarios/fire-private-house-l3.yaml — первый сценарий из библиотеки
заказчика (билет 3, вызов 1).
Риск механики проверен на живой модели: «Назовите адрес» и «Это точно Москва?»
эмбеддинги не путают, тест это фиксирует.
125 тестов зелёных (12 новых), make typecheck чистый.
2026-09-19 20:26:49 +03:00
|
|
|
|
|
|
|
|
|
|
# Пункты, которые не принадлежат ни одному классификатору. Сценарий подключает
|
|
|
|
|
|
# нужный, объявив пункт с тем же `id` и без текста, — формулировки подставятся
|
|
|
|
|
|
# отсюда. Насильно во все сценарии они не добавляются: неотработанный пункт
|
|
|
|
|
|
# штрафует курсанта отметкой E1 за вопрос, которого сценарий не требовал.
|
|
|
|
|
|
checklist:
|
|
|
|
|
|
- id: q_address_check
|
|
|
|
|
|
question: "Уточните: происшествие по этому адресу, вы сейчас там?"
|
|
|
|
|
|
examples:
|
|
|
|
|
|
- "Это точно Москва?"
|
|
|
|
|
|
- "Вы сами находитесь по этому адресу?"
|
|
|
|
|
|
- "Происшествие там же, где вы?"
|
|
|
|
|
|
- "Какой город?"
|
|
|
|
|
|
- "Это в черте города?"
|
|
|
|
|
|
- "Уточните адрес происшествия"
|
|
|
|
|
|
- "Вы смотрите на это или вам рассказали?"
|
|
|
|
|
|
- "Адрес происшествия и ваш адрес совпадают?"
|