Похожие аварии (ИИ)
Для записи журнала нарушений — похожие повреждения рядом: тот же вид (порыв, свищ и утечка — одно семейство), та же труба и Ду, близкое место, общие слова в описании. Кнопка «Уточнить с ИИ» пересортировывает список по смыслу описаний и объясняет сходство.
Возможности
- Найти похожие повреждения рядом с открытой записью журнала нарушений — по признакам, без ИИ («Найти»).
- Уточнить порядок с ИИ: модель читает описания и ставит выше те, что похожи по смыслу (та же авария, та же причина), а плановые работы и случайные совпадения — ниже.
- У каждой строки — процент сходства, пояснение модели «ИИ: …», дата, признаки (вид, труба, Ду, расстояние).
- Открыть похожую запись или показать её место на карте.
- Сменить радиус поиска: 300 м, 1 км, 3 км, 10 км.
Как это работает
Кандидатов ищет код. Для записи разбираются признаки из её текстов (название, описание, отчёт, примечание): вид повреждения, труба Т1/Т2, условный диаметр. Сходство с каждой записью в радиусе — взвешенная сумма: вид 0,35, труба 0,15, Ду 0,15, расстояние 0,20 (exp(−d / 300 м)), общие слова 0,15. Подробно — в Нарушениях.
Модель только пересортировывает. «Уточнить с ИИ» отдаёт модели образец и 15 лучших кандидатов по признакам: дата, расстояние, участок, оценка кода с причинами и текст до 400 символов. ФИО и номера в текстах закрываются всегда, независимо от ваших прав. Модель возвращает для каждого кандидата сходство 0–100 и пояснение до 200 символов. Кандидаты, которых модель не оценила, идут в конец по оценке кода; номера не из списка отбрасываются. В окне — первые 10.
Модель — своя. Пересортировка коротких текстов идёт на отдельной модели AI_RERANK_MODEL (по умолчанию claude-sonnet-5-5) с низким уровнем рассуждения — ответ за секунды.
Если ИИ не ответил, список остаётся в порядке признаков, а над ним — «ИИ не ответил (…) — порядок по признакам.» Ошибкой окно это не считает.
Радиус после «Уточнить с ИИ». Смена радиуса повторяет последний поиск — с ИИ, если перед этим нажимали «Уточнить с ИИ». Каждая смена — новый вызов модели.
Что нужно для работы
- Журнал нарушений с точками на карте и описаниями. На копии Алматы журнал пуст; записи с историей — только в копии Астаны (1785 записей, все с точкой).
- «Уточнить с ИИ» — право «Запуск расчётов» и помощник ИИ, включённый на сервере. «Найти» работает без них.
Шаги
Откройте «Инструменты» и наберите в поиске «Нарушения» — пункт выделен рамкой.
Нажмите пункт — откроется окно.
Откройте запись журнала (стрелка в строке). Внизу карточки — блок «Похожие аварии рядом»: радиус поиска, «Найти» (список по признакам) и «Уточнить с ИИ». Нажмите «Уточнить с ИИ».

Порядок теперь — по оценке модели: у каждой строки процент сходства, пояснение «ИИ: …» и признаки (вид, труба, Ду, расстояние). ФИО и номера в текстах от модели скрыты. «Открыть» показывает запись, значок прицела — место на карте.

Примеры
Порыв на обратке (копия Астаны, запись 4853; числа — из кода поиска на копии, без ИИ: её стенд сейчас не запущен). В тексте записи: порыв, Т2, Ду не указан. В радиусе 1 км — 89 кандидатов. Первые два:
- запись в 1 м: тот же вид — 0,35; труба Т1 вместо Т2 — 0; Ду не сравнить — 0; расстояние 0,2 × 1,0 = 0,20; общие слова 0,15 × 1,0 = 0,15; итог 0,70;
- запись в 887 м: вид 0,35; «обе трубы» — половина, 0,15 × 0,5 = 0,075; расстояние 0,2 × 0,05 = 0,01; общие слова 0,15; итог 0,585.
На «Уточнить с ИИ» модель получила бы 15 таких строк — около 2750 символов. Как она их переставит, зависит от текстов: на снимке шага 4 у каждой строки своё «ИИ: …».
Если не получается
- «Похожих нарушений в радиусе … нет» — увеличьте радиус.
- Кнопки «Уточнить с ИИ» нет — ИИ выключен на сервере или нет права «Запуск расчётов»; список строится по признакам.
- «ИИ не ответил (…) — порядок по признакам.» — модель недоступна; список по признакам верен.
- «ИИ не ответил (Превышен лимит запросов к ИИ, повторите позже) — порядок по признакам.» — модель недоступна; список по признакам верен.
- «Похожие аварии не найдены: …» — ошибка сервера при поиске.
- «вид, труба и диаметр не распознаны» в строке признаков записи — в тексте нет слов вида повреждения, «Т1/Т2», «Ду»; сходство держится на расстоянии и общих словах.
Для администратора
- Флаги:
AI_ENABLED,ANTHROPIC_API_KEY, модель пересортировки —AI_RERANK_MODEL. Запись «AI» в журнале действий —tool=defect_rerank, с номером записи и числом кандидатов. - Маскирование ФИО и номеров перед отправкой —
database/pii.py(mask_person_text); ответ окну дополнительно маскируется по праву «Персональные данные потребителей полностью».
Для разработчика
- API:
POST /api/v1/ai/defects/{id}/similar(radius_m10–20 000,limit1–15) →reference,radius_m,candidates,items(+ai_relevance,ai_reason),ranking(ai|features),model,ai_error. Без ИИ —GET /api/v1/defects/{id}/similar. - Сервер:
routers/ai.py,ai/defect_rerank.py(build_input,merge,MAX_CANDIDATES = 15,TEXT_CHARS = 400),database/defect_similarity.py(WEIGHTS,similar), промптai/prompts/defect_rerank.md. - Веб:
components/SimilarDefectsPanel.vue,utils/defectSimilarity.ts,services/api/journals.ts(getSimilarDefectsAi). - Тесты:
tests/utils/defectSimilarity.spec.ts; API —tests/test_ai_defect_rerank.py,tests/test_defect_similarity.py; e2e —e2e/functions/ai.spec.ts(карточка и ответы подменены).
