d8723582c9
Решение Виктора: ИИ убран из проекта — карточки детей (ПД) не должны покиать контур. Анализ полностью локальный и детерминированный. - services/rules_analysis.py: правила вместо Claude (бывший analyze_with_fallback + rule_based_urgency из closed_cases): urgency по возрасту/профилям, зоны через geo+scoring, behavioral_prediction/immediate_actions/key_locations — справочники. - search_engine: анализатор инъекцией (CaseAnalyzer, Protocol), импорт claude_service удалён; рантайм — rules_analyze. - УДАЛЕНЫ: services/claude_service.py, backend/services/claude_service.py (устаревшая копия), test_claude_service.py; ключевые правила-кейсы перенесены в test_rules_analysis.py (+тест отсутствия LLM-упоминаний). - docker-compose/.env.example: ANTHROPIC_API_KEY удалён. - Фронт: бейдж 'ИИ-анализ' -> 'Локальный расчёт'. - Доки: DEPLOY/SERVICES_README/ANALYZE_API переписаны, FIXES_REPORT помечен историческим, vector_tasks B20: zones/probability — из движка. pytest: 187 passed (было 214; -27 удалённых LLM-тестов, +тест rules). Контракт /analyze не изменён (фронт совместим).
4.0 KiB
4.0 KiB
Analyze API - Полный пайплайн анализа
Endpoints
POST /api/v1/analyze/analyze
Запустить полный анализ случая.
Пайплайн:
- Distance service - расчет максимальной дистанции
- Geo service - построение зон поиска (8 направлений)
- Scoring service - оценка и ранжирование зон
- Psychotype service - определение психотипа (если есть данные)
- Rules analysis - детерминированные правила (urgency, зоны, действия; без LLM)
- Merge results - объединение результатов
Request:
{
"case_id": "e9b1fd0c-b05c-4084-9813-ee91e6432246"
}
Response:
{
"case_id": "uuid",
"analyzed_at": "2026-05-05T07:34:11.691521",
"max_distance_km": 5.1,
"psychotype": "anxious",
"psychotype_modifiers": {
"zone_0_500": 1.4,
"zone_500_1500": 1.1,
"zone_1500_2500": 0.5,
"zone_2500plus": 0.3,
"movement_model": "stay"
},
"psychotype_recommendations": {
"priority_zones": "Ближняя зона (0-500м) - критически важна",
"search_pattern": "Тщательный осмотр ближайшей территории",
"key_locations": "Укрытия, углубления, густая растительность",
"communication": "Спокойные голосовые сигналы"
},
"zones": [
{
"priority": 1,
"name": "Сектор N",
"direction": "N",
"distance_km": 4.08,
"score": 30.0,
"reasoning": "Базовая оценка (психотип: ×0.3)"
}
],
"urgency": "средняя",
"key_locations": ["водоёмы", "дороги", "тропы"],
"immediate_actions": ["Организовать поисковые группы"],
"behavioral_prediction": "Умеренное движение",
"summary": "Случай классифицирован как средняя срочность",
"execution_time_ms": 21197.7,
"services_used": ["distance", "geo", "psychotype", "rules"]
}
GET /api/v1/analyze/analyze/{case_id}
Получить сохранённый результат анализа.
Response:
{
"case_id": "uuid",
"analysis_log": { },
"created_at": "2026-05-05T07:31:56.900783"
}
Статус сервисов
| Сервис | Статус | Примечание |
|---|---|---|
| Distance | ✅ Работает | Расчет дистанции по формуле |
| Geo | ✅ Работает | Построение зон (21 сек) |
| Scoring | ⚠️ Fallback | NoneType division error |
| Psychotype | ✅ Работает | Определение + модификаторы |
| Rules | ✅ | локальный расчёт |
Fallback механизмы
Если сервис недоступен, система использует fallback:
- Geo/Scoring fail → создаются базовые 8 секторов
- Правила всегда доступны: LLM в пайплайне нет (ПД не покидают контур)
- Psychotype fail → анализ без модификаторов психотипа
Тестирование
Протестировано 2026-05-05:
- ✅ Создание случая с психотипом
- ✅ Запуск полного анализа
- ✅ Получение сохраненного результата
- ✅ Применение модификаторов психотипа к зонам
Известные проблемы
- Scoring service: Ошибка деления на None - нужно добавить проверки на None в scoring_service.py
- LLM не используется: API-ключи не нужны, всё локально
- Geo service: Возвращает пустые зоны (возможно, проблема с Overpass API или кешем)
Дата создания
2026-05-05