6.1 KiB
6.1 KiB
API для определения психотипа
Endpoint: POST /api/v1/analyze/psychotype
Определяет психотип пропавшего человека на основе ответов на психологические вопросы и возвращает модификаторы зон поиска с рекомендациями.
Основано на методике: Рындина О.Г., Иванова О.Ю. (Чебоксары, 2015)
Request Body
{
"stress_reaction": "active|cry|freeze|calm",
"group_role": "leader|follower",
"risk_taking": "high|medium|low",
"unfamiliar_env": "explore|wait|freeze"
}
Response
{
"psychotype": "dominant|harmonic|anxious|introvert_passive|introvert_active",
"modifiers": {
"zone_0_500": 0.7,
"zone_500_1500": 1.2,
"zone_1500_2500": 1.4,
"zone_2500plus": 1.1,
"movement_model": "chaotic_far|linear_landmark|stay|stay_hidden",
"description": "Описание психотипа"
},
"recommendations": {
"priority_zones": "Приоритетные зоны поиска",
"search_pattern": "Паттерн поиска",
"key_locations": "Ключевые локации",
"communication": "Способы коммуникации"
}
}
Психотипы
1. Dominant (Доминантный)
- Триггер: active + leader + high
- Модификаторы: Низкая вероятность в ближней зоне (0.7), высокая в средних/дальних (1.2-1.4)
- Модель движения: chaotic_far - хаотичное движение на большие расстояния
- Приоритет: Средние и дальние зоны (500-2500м)
2. Harmonic (Гармоничный)
- Триггер: calm + leader + low
- Модификаторы: Равномерное распределение с акцентом на средние зоны
- Модель движения: linear_landmark - движение по ориентирам
- Приоритет: Все зоны равномерно, акцент на 500-1500м
3. Anxious (Тревожный)
- Триггер: cry + follower + low
- Модификаторы: Очень высокая вероятность в ближней зоне (1.4), низкая в дальних (0.3)
- Модель движения: stay - минимальное движение
- Приоритет: Ближняя зона (0-500м) критически важна
4. Introvert Passive (Интроверт пассивный)
- Триггер: freeze + follower + low
- Модификаторы: Высокая вероятность в ближней зоне (1.3), очень низкая в дальних (0.2)
- Модель движения: stay_hidden - прячется, минимальное движение
- Приоритет: Ближняя зона, укрытия
5. Introvert Active (Интроверт активный)
- Триггер: active + leader + medium
- Модификаторы: Средние значения с акцентом на зоны 500-2500м
- Модель движения: linear_landmark - целенаправленное движение
- Приоритет: Средние зоны вдоль линейных ориентиров
Примеры использования
Пример 1: Доминантный тип
curl -X POST http://192.168.0.108:8000/api/v1/analyze/psychotype \
-H "Content-Type: application/json" \
-d '{
"stress_reaction": "active",
"group_role": "leader",
"risk_taking": "high",
"unfamiliar_env": "explore"
}'
Результат:
- Психотип: dominant
- Зона 0-500м: коэффициент 0.7 (низкий приоритет)
- Зона 1500-2500м: коэффициент 1.4 (высокий приоритет)
- Рекомендация: Широкий охват, проверка нелинейных маршрутов
Пример 2: Тревожный тип
curl -X POST http://192.168.0.108:8000/api/v1/analyze/psychotype \
-H "Content-Type: application/json" \
-d '{
"stress_reaction": "cry",
"group_role": "follower",
"risk_taking": "low",
"unfamiliar_env": "freeze"
}'
Результат:
- Психотип: anxious
- Зона 0-500м: коэффициент 1.4 (критически важна!)
- Зона 2500+м: коэффициент 0.3 (очень низкий приоритет)
- Рекомендация: Тщательный осмотр ближайшей территории, укрытия
Интеграция с другими сервисами
Модификаторы из психотипа можно использовать для корректировки вероятностей в:
scoring_service.py- взвешивание зон поискаgeo_service.py- построение приоритетных зонdistance_service.py- корректировка максимальной дистанции поиска
Пример интеграции
from services.psychotype_service import detect_psychotype, get_psychotype_modifiers
# Определяем психотип
psychotype = detect_psychotype(answers)
modifiers = get_psychotype_modifiers(psychotype)
# Применяем модификаторы к базовым вероятностям
base_prob_near = 0.5
adjusted_prob = base_prob_near * modifiers['zone_0_500']
# Для anxious: 0.5 * 1.4 = 0.7 (увеличение приоритета ближней зоны)
# Для dominant: 0.5 * 0.7 = 0.35 (снижение приоритета ближней зоны)
Валидация
API валидирует входные данные:
- Все поля обязательны
- Значения должны соответствовать допустимым вариантам
- При невалидных данных возвращается HTTP 400 с описанием ошибки
{
"detail": "Invalid stress_reaction: unknown_value"
}