From e7c1c8bcbff205ca96f11f760d3c953db1c0ca5d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 16 May 2026 02:19:17 +0600 Subject: [PATCH] [2026-05-16] psychologist-app: add dual-bot architecture + on-device MD knowledge base sections --- .../projects/psychologist-app/overview.md | 102 +++++++++++++++++- wiki/index.md | 4 + wiki/user-profile.md | 4 +- 3 files changed, 108 insertions(+), 2 deletions(-) diff --git a/personal/projects/psychologist-app/overview.md b/personal/projects/psychologist-app/overview.md index 704e48af..813e2926 100644 --- a/personal/projects/psychologist-app/overview.md +++ b/personal/projects/psychologist-app/overview.md @@ -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. diff --git a/wiki/index.md b/wiki/index.md index a9b06b08..5661167d 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -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 diff --git a/wiki/user-profile.md b/wiki/user-profile.md index 8a521dad..d1117aac 100644 --- a/wiki/user-profile.md +++ b/wiki/user-profile.md @@ -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