- matrix-gateway: POST /internal/matrix/presence/online endpoint - usePresenceHeartbeat hook with activity tracking - Auto away after 5 min inactivity - Offline on page close/visibility change - Integrated in MatrixChatRoom component
8.7 KiB
SECOND ME SERVICE SPEC (PORT 7003)
Version: 1.0.0
0. PURPOSE
Second Me Service — це сервіс створення та управління персональними цифровими двійниками користувачів та агентів у DAARION.city.
Це ядро системи персоналізації:
- кожен користувач має SecondMe-профіль,
- SecondMe є persistent-пам'яттю,
- SecondMe може діяти як мультиагентний "асистент у тіні",
- SecondMe синхронізується з мультимодальністю (audio → текст, image → профіль),
- SecondMe допомагає іншим агентам (в т.ч. Метаморфу) адаптувати поведінку.
SecondMe працює як:
- storage (пам'ять користувача),
- continuous learning module,
- персональна reasoning-прошивка.
Порт сервісу: 7003.
1. HIGH-LEVEL ARCHITECTURE
[ User ]
/ | \
Telegram Web Matrix
\ | /
[ DAGI Router ]
↓
[ Second Me Service (7003) ]
↓
[ Vector DB + Redis + Postgres ]
↓
[ Agents ]
SecondMe Service перехоплює:
- історію взаємодії,
- мультимодальний контент (image/audio/doc),
- профіль користувача,
- поведінкові патерни.
2. CORE RESPONSIBILITIES
2.1. Профіль SecondMe
Містить:
- user_id,
- персональні налаштування,
- пам'ять (context store),
- переваги, хобі, стилі,
- NFTs / achievements (майбутнє),
- зв'язки з microDAO.
2.2. Персональна пам'ять
SecondMe має 3 типи пам'яті:
-
Short-term (до 48 год, швидкий доступ)
-
Long-term (векторна пам'ять)
-
Structured Memory:
- knowledge cards,
- tasks,
- goals,
- архіви розмов.
2.3. Learning Pipeline
SecondMe автоматично:
- аналізує повідомлення та файли,
- перетворює їх у structured facts,
- зберігає у векторну пам'ять,
- оновлює профіль (переваги/мету/поведінку),
- генерує особисті інсайти.
2.4. Behavior Assistant
SecondMe допомагає іншим агентам:
-
підказувати Helion/Helix, що знає про користувача,
-
спрощує пояснення контексту,
-
додає пам'ять у DAGI Router подіями типу:
user.context_update,user.preference_update,user.knowledge_card.
3. DATA MODEL (Postgres + Vector DB)
3.1. Users
CREATE TABLE users (
user_id TEXT PRIMARY KEY,
created_at TIMESTAMP NOT NULL DEFAULT now(),
meta JSONB DEFAULT '{}'::jsonb
);
3.2. SecondMe Profile
CREATE TABLE secondme_profile (
user_id TEXT PRIMARY KEY,
preferences JSONB DEFAULT '{}'::jsonb,
traits JSONB DEFAULT '{}'::jsonb,
skills JSONB DEFAULT '{}'::jsonb,
settings JSONB DEFAULT '{}'::jsonb,
updated_at TIMESTAMP NOT NULL DEFAULT now()
);
3.3. Memory — Short Term
CREATE TABLE secondme_memory_short (
memory_id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
text TEXT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT now()
);
3.4. Memory — Long Term (Vector DB)
Хоститься в твоєму VectorDB (8898).
Документ:
{
"id": "mem123",
"user_id": "u1",
"text": "користувач любить працювати з GREENFOOD",
"embedding": [...1024 floats...],
"metadata": {
"type": "preference",
"timestamp": "2025-11-24T12:00:00Z"
}
}
4. PUBLIC API (HTTP)
4.1. POST /secondme/update_from_event
Вхідна точка для DAGI Router.
Request:
{
"event": {
"source": "telegram",
"user": { "id": "u1" },
"project_id": "proj-greenfood",
"text": "мені дуже подобається зелена аналітика",
"attachments": { "images": [], "audio": [] }
}
}
Response:
{
"status": "ok",
"actions": [
"short_memory_added",
"long_memory_indexed",
"profile_trait_updated"
]
}
4.2. GET /secondme/profile/{user_id}
Отримати повний профіль користувача.
4.3. GET /secondme/memory/{user_id}
Повертає коротку + довгу пам'ять.
4.4. POST /secondme/query
Пошук у пам'яті:
Request:
{
"user_id": "u1",
"query": "що цей користувач любить робити?"
}
Response:
{
"results": [
{
"text": "користувач любить працювати з GREENFOOD",
"score": 0.92
}
]
}
4.5. POST /secondme/summarize
Генерує персональний summary користувача для агентів:
Response:
{
"summary": "Користувач працює над GREENFOOD, любить аналітику, часто дає задачі Helix."
}
5. AGENT INTEGRATION
5.1. Helion integration
Helion отримує SecondMe-summary для:
- кращих відповідей,
- виконання задач з персональним контекстом.
5.2. Helix integration
SecondMe → Helix:
- історія рішень користувача,
- технічні вподобання,
- деталі проектів користувача.
5.3. Metamorph integration
SecondMe → Metamorph:
- персоналізація поведінки агентів,
- рекомендації по агентах, які потрібні користувачу.
5.4. Geo-agent
Якщо користувач дає гео-події:
- SecondMe зберігає маршрути / активність,
- може допомагати City Service сортувати події.
6. LEARNING PIPELINE
SecondMe обробляє кожну подію:
-
Extract facts Визначає, чи є текст чи медіа важливим для пам'яті.
-
Classify type
- preference
- skill
- long-term fact
- behavioural pattern
- project affinity
-
Embed
- створює embedding (через твою bge-m3 модель).
-
Index
- зберігає у Vector DB.
-
Profile Update
- якщо знайдені нові патерни → оновити SecondMe Profile.
-
Emit Events Публікує в NATS:
secondme.{user_id}.memory_addedsecondme.{user_id}.profile_updated
7. INTERACTION WITH DAGI ROUTER
DAGI Router повинен:
-
при кожному
RouterEventвикликатиPOST /secondme/update_from_event, -
отримувати у відповідь:
- пам'ять-дії,
- профільні зміни.
SecondMe діє як фонова підсистема, що збагачує контекст.
8. PROJECT BUS INTEGRATION
SecondMe може бути підписаним на:
project.<project_id>.events
project.<project_id>.chat.human
щоб вчитися на:
- командних подіях,
- рішеннях,
- поведінці користувача всередині проекту.
9. MULTIMODAL SUPPORT
SecondMe працює з мультимодальністю:
- image → Vision-agent → SecondMe ("користувач показує X"),
- audio → STT → SecondMe (зберігає розмови і суть),
- docs → Doc-agent → SecondMe (пам'ятає PDF-документи користувача).
10. HEALTHCHECK & METRICS
10.1. GET /healthz
{
"status": "ok",
"db": "ok",
"vector": "ok",
"uptime_seconds": 21344
}
10.2. Prometheus
secondme_events_totalmemory_added_totalprofile_updates_totalembedding_latency_ms_bucketvector_search_latency_ms_bucket
11. SUMMARY
Second Me Service (7003):
- персональна пам'ять,
- особистісний профіль,
- обробка мультимодальних подій,
- забезпечує глибинну персоналізацію системи,
- розуміє контекст користувача,
- допомагає іншим агентам приймати кращі рішення,
- працює автономно, мовчки, але є ключовим "мозком користувача".