Import Vector lab project
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
# API для определения психотипа
|
||||
|
||||
## Endpoint: POST /api/v1/analyze/psychotype
|
||||
|
||||
Определяет психотип пропавшего человека на основе ответов на психологические вопросы и возвращает модификаторы зон поиска с рекомендациями.
|
||||
|
||||
**Основано на методике:** Рындина О.Г., Иванова О.Ю. (Чебоксары, 2015)
|
||||
|
||||
### Request Body
|
||||
|
||||
```json
|
||||
{
|
||||
"stress_reaction": "active|cry|freeze|calm",
|
||||
"group_role": "leader|follower",
|
||||
"risk_taking": "high|medium|low",
|
||||
"unfamiliar_env": "explore|wait|freeze"
|
||||
}
|
||||
```
|
||||
|
||||
### Response
|
||||
|
||||
```json
|
||||
{
|
||||
"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: Доминантный тип
|
||||
|
||||
```bash
|
||||
curl -X POST http://192.168.0.99: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: Тревожный тип
|
||||
|
||||
```bash
|
||||
curl -X POST http://192.168.0.99: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` - корректировка максимальной дистанции поиска
|
||||
|
||||
### Пример интеграции
|
||||
|
||||
```python
|
||||
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 с описанием ошибки
|
||||
|
||||
```json
|
||||
{
|
||||
"detail": "Invalid stress_reaction: unknown_value"
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user