[2026-05-16] psychologist-app: add dual-bot architecture + on-device MD knowledge base sections

This commit is contained in:
Alexey Martemyanov
2026-05-16 02:19:17 +06:00
parent 0f3e29ab8d
commit e7c1c8bcbf
3 changed files with 108 additions and 2 deletions
+101 -1
View File
@@ -122,7 +122,107 @@ Apple требует дисклеймер: "Не является заменой
---
## 6. Технический стек
## 6. Архитектура системы
### Двойной бот — core механизм
Ключевая идея: пользователь говорит от первого лица → AI склонен соглашаться (sycophancy).
Решение: два независимых бота в pipeline, каждый не знает о пользователе напрямую.
```
Пользователь (1-е лицо)
┌─────────────────────────────┐
│ БОТ 1 — Narrator (Haiku) │
│ Системный промпт: │
│ "Перескажи от 3-го лица, │
│ нейтрально, только факты, │
│ без оценок и сочувствия. │
│ Называй человека │
│ 'пользователь'." │
└─────────────────────────────┘
"Пользователь говорит что..."
┌─────────────────────────────┐
│ БОТ 2 — Analyst (Sonnet) │
│ Системный промпт: │
│ "Ты опытный психолог. │
│ Перед тобой описание │
│ незнакомого человека от │
│ 3-го лица. Задай 1-2 │
│ точных вопроса. Не давай │
│ советов. Не валидируй." │
│ │
│ + читает profile.md │
│ + детектирует SI/SH │
└─────────────────────────────┘
Вопрос пользователю ИЛИ 🚨 Crisis flow
```
**Почему это работает:**
- Бот 2 анализирует _описание незнакомца_, а не собеседника — убирает emotional bias
- Снижение sycophancy ~13.6% доказано научно (arXiv 2508.02087, 3rd vs 1st person)
- Бот 1 дешёвый (Haiku), Бот 2 качественный (Sonnet) — оптимально по cost/quality
**Кризисный детектор** встроен в Бот 2:
- Hardcoded детекция ключевых слов на RU + EN (не через LLM — надёжнее и быстрее)
- При срабатывании: немедленно прерывает диалог, показывает CrisisView с горячими линиями
- Уровни: `warning` (косвенные упоминания) / `critical` (прямые угрозы) — разный флоу
---
### On-device база знаний (Obsidian-like)
Вместо облачной БД — markdown файлы на устройстве пользователя с тегами и ссылками.
```
Documents/UserProfile/
├── profile.md ← живой профиль: паттерны, наблюдения, прогресс
├── insights.md ← кристаллизованные инсайты (обновляется редко)
├── sessions/
│ ├── 2026-05-16.md ← каждая сессия: вопросы, ответы, наблюдение
│ ├── 2026-05-20.md
│ └── ...
└── topics/
├── sleep.md ← паттерн сна [[связано с sessions/2026-05-16]]
├── work.md
└── relationships.md
```
**profile.md** (пример):
```markdown
# Профиль пользователя
#паттерн Откладывает сложные разговоры → избегание через работу
#паттерн Энергия падает к 16:00 если не было физической активности
#прогресс Трезвость — 47 дней ✓
#прогресс Спортзал — 3 раза на прошлой неделе ✓
## Текущие темы
- [[topics/sleep]] — замкнутый цикл сна, прорабатываем
- [[topics/work]] — граница рабочего и личного времени
## Наблюдение агента (2026-05-16)
Пользователь описывает продуктивность через количество задач, но...
```
**Как это работает в pipeline:**
1. Начало сессии: Бот 2 читает `profile.md` + последние 2-3 сессии
2. Конец сессии: Бот 2 пишет краткое summary в `sessions/YYYY-MM-DD.md`
3. Значимый инсайт: обновляет `profile.md` (дописывает наблюдение)
4. Пользователь видит свою базу знаний в приложении (ProfileView)
**Преимущества перед облачной БД:**
- Полный контроль данных у пользователя (privacy-first)
- Работает офлайн
- Пользователь может экспортировать/читать свои данные
- Ссылки между файлами = граф паттернов (Obsidian-логика)
---
## 7. Технический стек
### Мобильное приложение
**Skip.tools** — SwiftUI компилируется в нативный Jetpack Compose для Android.
+4
View File
@@ -26,6 +26,10 @@ Auto-maintained catalog of all pages in `wiki/`. Updated by the daily curation c
- [[wiki-ingest-process]] — How wiki pages are generated from sources
- [[obsidian-mcp-wrapper]] — mcpvault / obsidian MCP setup
## User Profile
- [[user-profile]] — Alex's personal profile: identity, family, work, interests, goals, travel plans
## Workflows
- [[ddg-asana-workflow]] — DuckDuckGo + Asana daily workflow
+3 -1
View File
@@ -1,11 +1,13 @@
---
namespace: personal
created: '2026-05-15'
updated: '2026-05-15'
last_synced: '2026-05-16'
tags:
- profile
- user
- alex
status: active
confidence: 0.9
---
# User Profile — Alex