- check(text, llm_signal) -> SafetyResult: normalisation (ё, homoglyphs, translit, repeats), stem regexes per category, negation window (acute -> possible only), weapon+risk combination, final level = max(lexicon, llm) - crisis_reply(categories, audience) loads config/texts/crisis.yaml (patient/family, domestic violence and harm-to-others variants) - 99-phrase eval set; acute recall 100%, < 5 ms per message Refs #4 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
112 lines
8.6 KiB
YAML
112 lines
8.6 KiB
YAML
# Eval-набор для app/core/safety.py (issue #4). Только синтетика.
|
|
# label: acute | possible | none — ожидаемый уровень лексикона (без LLM).
|
|
# Требование: recall на acute = 100% (каждая acute-фраза → ACUTE). Разметку утверждает психиатр (#8).
|
|
cases:
|
|
# --- Прямые суицидальные высказывания ---------------------------------------------------------------
|
|
- {text: "Я хочу покончить с собой", label: acute}
|
|
- {text: "думаю о суициде каждый день", label: acute}
|
|
- {text: "Мысли о самоубийстве не отпускают", label: acute}
|
|
- {text: "Не хочу жить", label: acute}
|
|
- {text: "жить больше не хочется", label: acute}
|
|
- {text: "Хочу умереть.", label: acute}
|
|
- {text: "ничего не хочу, хочу умереть", label: acute}
|
|
- {text: "ничего не хочу хочу умереть", label: acute}
|
|
- {text: "Я не могу больше так жить", label: acute}
|
|
- {text: "Зачем вообще жить?", label: acute}
|
|
- {text: "нет смысла жить дальше", label: acute}
|
|
- {text: "Устал жить", label: acute}
|
|
- {text: "Я устал от жизни", label: acute}
|
|
- {text: "хочу повеситься", label: acute}
|
|
- {text: "присмотрел верёвку, сделаю петлю", label: acute}
|
|
- {text: "завтра шагну с крыши", label: acute}
|
|
- {text: "думаю броситься под поезд", label: acute}
|
|
- {text: "наглотаюсь таблеток и всё", label: acute}
|
|
- {text: "выпью все таблетки сертралина разом", label: acute}
|
|
- {text: "хочу вскрыть вены", label: acute}
|
|
- {text: "Опять режу себя", label: acute}
|
|
- {text: "хочу сделать себе больно", label: acute}
|
|
- {text: "Я написал прощальное письмо", label: acute}
|
|
- {text: "скоро меня не станет", label: acute}
|
|
- {text: "убью себя", label: acute}
|
|
- {text: "покончу со всем этим", label: acute}
|
|
- {text: "думаю о смерти постоянно", label: acute}
|
|
- {text: "не хочу больше просыпаться", label: acute}
|
|
- {text: "может мне просто не быть", label: acute}
|
|
- {text: "хочу наложить на себя руки", label: acute}
|
|
- {text: "у меня есть план как уйти", label: acute}
|
|
- {text: "нажрусь таблеток", label: acute}
|
|
# --- Косвенные / разговорные ------------------------------------------------------------------------
|
|
- {text: "лучше бы меня не было", label: acute}
|
|
- {text: "всем будет лучше без меня", label: acute}
|
|
- {text: "Хочу заснуть и не проснуться", label: acute}
|
|
- {text: "хочу исчезнуть навсегда", label: acute}
|
|
- {text: "Чтобы меня просто не было", label: acute}
|
|
- {text: "хочется сдохнуть", label: acute}
|
|
- {text: "пора свести счёты с жизнью", label: acute}
|
|
- {text: "думаю выпилиться", label: acute}
|
|
- {text: "не думаю о смерти, но иногда хочу уйти из жизни", label: acute}
|
|
- {text: "мыслей о суициде нет, но не хочу жить", label: acute}
|
|
# --- Ветеранский сленг ------------------------------------------------------------------------------
|
|
- {text: "лучше бы я там остался с пацанами", label: acute}
|
|
- {text: "Лучше бы я погиб тогда", label: acute}
|
|
- {text: "хочу к пацанам туда, на небо", label: acute}
|
|
- {text: "сам себе груз 200 сделаю", label: acute}
|
|
- {text: "проще стать двухсотым", label: acute}
|
|
- {text: "пущу себе пулю в лоб", label: acute}
|
|
- {text: "застрелюсь из наградного", label: acute}
|
|
- {text: "дома ружьё, и жить не хочется", label: acute}
|
|
- {text: "есть наградной пистолет, всё бессмысленно", label: acute}
|
|
# --- Опечатки, транслит, растягивание ---------------------------------------------------------------
|
|
- {text: "думаю о суециде", label: acute}
|
|
- {text: "хачу умиреть", label: acute}
|
|
- {text: "не хочу жиииить", label: acute}
|
|
- {text: "павеситься бы", label: acute}
|
|
- {text: "hochu umeret'", label: acute}
|
|
- {text: "сaмоубийство (латинская a)", label: acute}
|
|
- {text: "ПОКОНЧИТЬ С СОБОЙ", label: acute}
|
|
# --- Угроза другим и домашнее насилие ---------------------------------------------------------------
|
|
- {text: "Я его убью", label: acute}
|
|
- {text: "зарежу соседа", label: acute}
|
|
- {text: "Муж меня бьёт", label: acute}
|
|
- {text: "он угрожает убить меня", label: acute}
|
|
- {text: "вчера схватил меня за горло", label: acute}
|
|
- {text: "грозится ружьём, когда выпьет", label: acute}
|
|
- {text: "боюсь идти домой, он ломает вещи", label: possible}
|
|
# --- Возможный риск: безнадёжность, оружие ----------------------------------------------------------
|
|
- {text: "всё бессмысленно, устал от всего", label: possible, note: "демо-персона, день 13"}
|
|
- {text: "я обуза для семьи", label: possible}
|
|
- {text: "нет смысла что-то делать", label: possible}
|
|
- {text: "Не вижу выхода", label: possible}
|
|
- {text: "ничего не изменится", label: possible}
|
|
- {text: "никому я не нужен", label: possible}
|
|
- {text: "зачем я вообще вернулся", label: possible}
|
|
- {text: "дома есть ружьё", label: possible}
|
|
- {text: "храню наградное оружие в сейфе", label: possible}
|
|
- {text: "больше нет сил", label: possible}
|
|
- {text: "хочется кого-нибудь ударить", label: possible}
|
|
# --- Отрицания: не acute (possible допустим) --------------------------------------------------------
|
|
- {text: "Не хочу умирать", label: possible, negation: true}
|
|
- {text: "мыслей о суициде нет", label: possible, negation: true}
|
|
- {text: "не думаю о самоубийстве", label: possible, negation: true}
|
|
- {text: "суицидальных мыслей не было", label: possible, negation: true}
|
|
- {text: "никогда не думал о суициде", label: possible, negation: true}
|
|
- {text: "я бы никогда не покончил с собой", label: possible, negation: true}
|
|
# --- Нейтральные клинические фразы (none) -----------------------------------------------------------
|
|
- {text: "от таблеток только хуже, брошу", label: none, note: "демо-персона, день 5"}
|
|
- {text: "не могу уснуть без пива", label: none, note: "демо-персона, день 10"}
|
|
- {text: "тошнит после сертралина", label: none}
|
|
- {text: "сегодня настроение 4 из 10", label: none}
|
|
- {text: "Спал часов пять, снились кошмары", label: none}
|
|
- {text: "выпил таблетку после завтрака", label: none}
|
|
- {text: "Забыл принять лекарство вчера", label: none}
|
|
- {text: "голова болит и тревожно", label: none}
|
|
- {text: "сходил на работу, вечером гулял с собакой", label: none}
|
|
- {text: "Меня поставят на учёт?", label: none}
|
|
- {text: "трудно сосредоточиться на работе", label: none}
|
|
- {text: "пару бокалов вина в выходные", label: none}
|
|
- {text: "Меня трясёт перед сном", label: none}
|
|
- {text: "хочу записаться к врачу раньше", label: none}
|
|
- {text: "принимаю по одной таблетке утром", label: none}
|
|
- {text: "стало немного лучше, спасибо", label: none}
|
|
- {text: "Хочу жить нормально, без кошмаров", label: none}
|