[2026-05-19] psychologist-app: анкета онбординга, state persistence, analytics.md, rate limiting, сброс данных
This commit is contained in:
@@ -162,7 +162,42 @@ UI алгоритм (не агент!)
|
||||
|
||||
---
|
||||
|
||||
## 5. Открытые вопросы
|
||||
## 5. State Persistence & Session Recovery
|
||||
|
||||
### Сохранение стейта на каждом шаге
|
||||
|
||||
Каждый шаг сессии сохраняется немедленно — не в конце:
|
||||
|
||||
```
|
||||
step_state {
|
||||
session_id: "2026-05-19",
|
||||
user_id: "...",
|
||||
phase: "dialogue", // intro | questionnaire | dialogue | insight | closing
|
||||
current_question_idx: 2,
|
||||
answered: [ {q: "...", a: "..."}, ... ],
|
||||
last_activity_ts: 1747612800
|
||||
}
|
||||
```
|
||||
|
||||
При следующем открытии приложения — автоматически восстанавливается точка, где пользователь остановился. Не начинает с начала.
|
||||
|
||||
### Заброшенная сессия (пользователь пропал посередине)
|
||||
|
||||
**Триггер**: last_activity_ts > 20 часов, сессия не завершена.
|
||||
|
||||
**Действие (backend cron)**:
|
||||
1. Принудительно **завершить сессию** — агент пишет partial summary на основе того, что успело ответить
|
||||
2. Обновить `profile.md` — даже неполные данные полезны
|
||||
3. Пометить сессию как `completed_partial`
|
||||
|
||||
**Уведомление**: на следующий день **примерно в то же время** (± 30 мин от last_activity_ts предыдущих сессий) — push:
|
||||
> "Мы не успели закончить в прошлый раз. Вернёмся?"
|
||||
|
||||
**Retention protocol** (Stage 2): при N пропущенных сессиях подряд — запускается отдельный флоу "возвращение пользователя" с мягким реактивационным сообщением. Детали — в будущем документе.
|
||||
|
||||
---
|
||||
|
||||
## 6. Открытые вопросы
|
||||
|
||||
- [ ] Как именно Narrator детектирует что вопросы в 3-м лице и нужно переформулировать? Prompt rule или регекс-паттерн?
|
||||
- [ ] Сценарий планировщика — отдельный агент или встроен в посредника?
|
||||
|
||||
Reference in New Issue
Block a user