lct-hack/scenarios/tickets/t03-1-fire-private-house.yaml

64 lines
2.6 KiB
YAML
Raw Normal View History

feat: билеты 1–3 заказчика в библиотеку сценариев (lct-34, частично) Девять вызовов из билетов учебного центра в scenarios/tickets/. Библиотека стала вложенной: загрузчик ходит по подкаталогам, checklists/ и pregenerated/ сценариями не считаются. Поля ticket и position задаются вместе. Написаны чек-листы, которых не было: medical, police, utility. Без них переносить было не на что — в библиотеке существовал только пожарный. Девять вызовов закрывают все приёмы, ради которых билеты и брались: адрес по ориентиру, адрес из другого региона, линейный объект (съезд с МКАД), непрофильный вызов, профильный но не экстренный, массовая драка, где список оповещения поднимает и полицию, и скорую. Подводный камень записан в SCENARIO-FORMAT: значения признаков ЕКП бывают с запятыми («Человек в воде, на льдине»), и в короткой записи YAML разрывает такое значение на два. Осталось семь билетов — работа механическая, рецепт отработан на трёх. 161 тест зелёный.
2026-09-20 08:38:01 +03:00
# Билет 3, вызов 1 (docs/spec/TICKETS.md). Был первым перенесённым вызовом —
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
# потому что показывает приём, которого не было в наших сценариях: названный
# адрес существует и в Москве, и в области, и правильный узнаётся только
# переспросом. Механика — tasks/lct-35-address-refinement.md
feat: билеты 1–3 заказчика в библиотеку сценариев (lct-34, частично) Девять вызовов из билетов учебного центра в scenarios/tickets/. Библиотека стала вложенной: загрузчик ходит по подкаталогам, checklists/ и pregenerated/ сценариями не считаются. Поля ticket и position задаются вместе. Написаны чек-листы, которых не было: medical, police, utility. Без них переносить было не на что — в библиотеке существовал только пожарный. Девять вызовов закрывают все приёмы, ради которых билеты и брались: адрес по ориентиру, адрес из другого региона, линейный объект (съезд с МКАД), непрофильный вызов, профильный но не экстренный, массовая драка, где список оповещения поднимает и полицию, и скорую. Подводный камень записан в SCENARIO-FORMAT: значения признаков ЕКП бывают с запятыми («Человек в воде, на льдине»), и в короткой записи YAML разрывает такое значение на два. Осталось семь билетов — работа механическая, рецепт отработан на трёх. 161 тест зелёный.
2026-09-20 08:38:01 +03:00
id: t03-1-fire-private-house
ticket: 3
position: 1
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
title: "Пожар в частном доме, адрес уточняется"
type: fire
level: L3
topics: [fires, address]
modes: [training, exam, self]
extends: checklists/fire.yaml
signs: [жилой дом, частный дом, открытое пламя]
persona:
base: worried
arc:
- { stage: registration, mood: worried }
- { stage: interview, mood: worried }
- { stage: dispatch, mood: calm }
first_line: "Здравствуйте! У нас крыша горит, дом деревянный! Приезжайте!"
facts:
- id: f_address
value: "улица Станционная, дом 28"
# Заявитель называет улицу так, будто это Москва. Настоящий адрес —
# подмосковный Королёв, и он всплывает только на уточняющий вопрос.
refined: "Московская область, город Королёв, улица Станционная, дом 28"
reveal_on: { question: q_address }
refine_on: q_address_check
- id: f_what_burns
value: "горит крыша, огонь открытый, дом деревянный"
reveal_on: { question: q_what_burns }
- id: f_people
value: "все вышли во двор, в доме никого нет"
reveal_on: { question: q_people }
- id: f_gas
value: "дом не газифицирован, газа нет"
reveal_on: { question: q_gas }
checklist:
- { id: q_address, fact: f_address }
- { id: q_address_check }
- { id: q_what_burns, fact: f_what_burns }
- { id: q_people, fact: f_people }
- { id: q_gas, fact: f_gas }
required_fields:
- address
- incident_type
- description
ground_truth:
# Эталон — уточнённый адрес: записавший «улица Станционная, 28» отправит
# расчёт не в тот регион.
address: "Московская область, город Королёв, улица Станционная, дом 28"
victims: 0
tree:
pregenerated: false