Files
microdao-daarion/docs/NODA2-MEMORY-SETUP.md
Apple 67225a39fa docs(platform): add policy configs, runbooks, ops scripts and platform documentation
Config policies (16 files): alert_routing, architecture_pressure, backlog,
cost_weights, data_governance, incident_escalation, incident_intelligence,
network_allowlist, nodes_registry, observability_sources, rbac_tools_matrix,
release_gate, risk_attribution, risk_policy, slo_policy, tool_limits, tools_rollout

Ops (22 files): Caddyfile, calendar compose, grafana voice dashboard,
deployments/incidents logs, runbooks for alerts/audit/backlog/incidents/sofiia/voice,
cron jobs, scripts (alert_triage, audit_cleanup, migrate_*, governance, schedule),
task_registry, voice alerts/ha/latency/policy

Docs (30+ files): HUMANIZED_STEPAN v2.7-v3 changelogs and runbooks,
NODA1/NODA2 status and setup, audit index and traces, backlog, incident,
supervisor, tools, voice, opencode, release, risk, aistalk, spacebot

Made-with: Cursor
2026-03-03 07:14:53 -08:00

369 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🧠 Модуль Пам'яті для Агента Sofiia на NODA2
## 📊 Архітектура Пам'яті DAARION
### Трирівнева система пам'яті:
```
┌─────────────────────────────────────────────────────────────┐
│ SOFIIA MEMORY STACK │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Qdrant │ │ PostgreSQL │ │ Neo4j │ │
│ │ (Vector) │ │ (Relational) │ │ (Graph) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Memory Service │ │
│ │ (:8000) │ │
│ └─────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Sofiia Agent │ │
│ │ (OpenClaw) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
## 1. Векторна Пам'ять (Qdrant)
### Колекції для Sofiia:
| Колекція | Призначення | Dimension |
|----------|-------------|-----------|
| `sofiia_messages` | Історія повідомлень діалогів | 1024 |
| `sofiia_docs` | Документи та knowledge base | 1024 |
| `sofiia_memory_items` | Long-term memory items | 1024 |
| `sofiia_user_context` | Контекст користувачів | 1024 |
**Embedding model:** Cohere embed-multilingual-v3.0 (1024 dimensions)
### Що зберігається:
- Повідомлення користувачів та відповіді Sofiia
- Документація проектів
- Контекстні дані про користувачів
- Long-term memories (важливі факти, рішення)
---
## 2. Реляційна Пам'ять (PostgreSQL)
### Таблиця `user_facts`:
| Поле | Тип | Опис |
|------|-----|------|
| `fact_id` | UUID | Унікальний ID |
| `user_id` | String | ID користувача |
| `team_id` | String | ID команди/DAO |
| `agent_id` | String | **"sofiia"** |
| `fact_key` | String | Ключ факту |
| `fact_value` | Text | Текстове значення |
| `fact_value_json` | JSONB | Структуровані дані |
### Приклади фактів:
- `name`: "Олександр"
- `preferences`: {"language": "uk", "style": "formal"}
- `chat_event:2026-02-22`: "Обговорювали архітектуру DAARION"
---
## 3. Графова Пам'ять (Neo4j)
### Node types:
- `Agent` - Sofiia
- `User` - Користувачі
- `Channel` - Telegram, Slack, etc.
- `Message` - Повідомлення
- `Topic` - Теми розмов
- `Project` - Проєкти (DAARION, NODA2, etc.)
### Relationships:
```
(User)-[:SENT]->(Message)
(Sofiia)-[:RESPONDED]->(Message)
(Message)-[:IN_CHANNEL]->(Telegram)
(Message)-[:ABOUT]->(Architecture)
(Message)-[:REFERENCES]->(Project:DAARION)
```
### Що дає:
- Зв'язки між користувачами та темами
- Історія розмов по проектах
- Виявлення залежностей
---
## 🎯 Варіанти налаштування на NODA2:
### Варіант A: Локальна пам'ять (ПОВНА НЕЗАЛЕЖНІСТЬ) ✨
**Переваги:**
- ✅ Повна ізоляція від NODA1
- ✅ Швидкий доступ (локально)
- ✅ Можна тестувати без впливу на прод
- ✅ Dev-середовище
**Недоліки:**
-Не бачить пам'ять з NODA1
- ❌ Потрібно більше ресурсів
- ❌ Окремі дані для dev
**Що потрібно:**
```yaml
services:
# Qdrant для векторної пам'яті
qdrant-node2:
image: qdrant/qdrant:latest
container_name: dagi-qdrant-node2
ports:
- "6333:6333"
- "6334:6334"
volumes:
- ./data/qdrant-node2:/qdrant/storage
environment:
- QDRANT__SERVICE__HOST=0.0.0.0
# PostgreSQL для реляційної пам'яті
postgres-node2:
image: postgres:16
container_name: dagi-postgres-node2
ports:
- "5433:5432"
environment:
- POSTGRES_DB=daarion_memory
- POSTGRES_USER=daarion
- POSTGRES_PASSWORD=daarion_secret
volumes:
- ./data/postgres-node2:/var/lib/postgresql/data
# Neo4j для графової пам'яті (опціонально)
neo4j-node2:
image: neo4j:5.15
container_name: dagi-neo4j-node2
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/daarion_secret
volumes:
- ./data/neo4j-node2:/data
# Memory Service
memory-service-node2:
build: ./services/memory-service
container_name: dagi-memory-service-node2
ports:
- "8000:8000"
environment:
- QDRANT_HOST=qdrant-node2
- QDRANT_PORT=6333
- DATABASE_URL=postgresql://daarion:daarion_secret@postgres-node2:5432/daarion_memory
- NEO4J_URI=bolt://neo4j-node2:7687
- COHERE_API_KEY=${COHERE_API_KEY}
depends_on:
- qdrant-node2
- postgres-node2
```
---
### Варіант B: Підключення до NODA1 (РЕПЛІКА) 🔄
**Переваги:**
- ✅ Бачить пам'ять з NODA1
- ✅ Економія ресурсів
- ✅ Read-replica для аналітики
- ✅ Реальний прод-контекст
**Недоліки:**
- ❌ Залежність від NODA1
- ❌ Мережева затримка
-Не можна писати (read-only)
**Що потрібно:**
```yaml
services:
# Memory Service підключається до NODA1
memory-service-node2:
build: ./services/memory-service
container_name: dagi-memory-service-node2
ports:
- "8000:8000"
environment:
# Підключення до NODA1 Qdrant
- QDRANT_HOST=144.76.224.179
- QDRANT_PORT=6333
# Підключення до NODA1 PostgreSQL (read replica)
- DATABASE_URL=postgresql://daarion_reader:***@144.76.224.179:5432/daarion_memory
# Підключення до NODA1 Neo4j (read replica)
- NEO4J_URI=bolt://144.76.224.179:7687
- READ_ONLY_MODE=true
- COHERE_API_KEY=${COHERE_API_KEY}
```
---
### Варіант C: Гібридний (РЕКОМЕНДОВАНО) ⭐
**Переваги:**
- ✅ Локальна пам'ять для dev/test
- ✅ Можливість підключитись до NODA1 за потреби
- ✅ Гнучкість
- ✅ Повна ізоляція для експериментів
**Архітектура:**
```
NODA2 (Development)
├── Local Memory Stack
│ ├── Qdrant (:6333)
│ ├── PostgreSQL (:5433)
│ └── Memory Service (:8000)
└── Optional: Remote NODA1 Access
└── Environment variable switch
```
---
## 🚀 Рекомендація: Почати з Варіанту C
### Крок 1: Створити docker-compose.memory-node2.yml
```bash
cd /Users/apple/github-projects/microdao-daarion
```
Файл: `docker-compose.memory-node2.yml`
### Крок 2: Отримати Cohere API Key
Для embedding моделі потрібен ключ:
1. Зайти на https://cohere.ai
2. Зареєструватись
3. Отримати API Key
### Крок 3: Запустити Memory Stack
```bash
# Додати Cohere API Key в .env
echo "COHERE_API_KEY=your_cohere_key_here" >> .env
# Запустити
docker-compose -f docker-compose.memory-node2.yml up -d
# Перевірити
docker ps | grep -E "memory|qdrant|postgres"
```
### Крок 4: Налаштувати Sofiia для використання пам'яті
В OpenClaw конфігурації додати:
```json
{
"agents": {
"list": [
{
"id": "sofiia",
"model": {
"primary": "xai/grok-4-1-fast-reasoning"
},
"memory": {
"enabled": true,
"serviceUrl": "http://localhost:8000",
"collections": {
"messages": "sofiia_messages",
"docs": "sofiia_docs",
"memory": "sofiia_memory_items",
"context": "sofiia_user_context"
}
}
}
]
}
}
```
---
## 📝 Приклад використання пам'яті Sofiia:
### Збереження повідомлення:
```python
await memory_client.save_memory(
agent_id="sofiia",
user_id="telegram:123456",
channel_id="telegram:sofiia",
content="User asked about DAARION architecture",
role="user",
metadata={
"topic": "architecture",
"intent": "question",
"project": "DAARION"
}
)
```
### Отримання контексту:
```python
context = await memory_client.get_context(
agent_id="sofiia",
user_id="telegram:123456",
query="архітектура",
limit=10
)
```
### Збереження факту:
```python
await memory_client.save_fact(
agent_id="sofiia",
user_id="telegram:123456",
fact_key="preferences",
fact_value_json={
"language": "uk",
"style": "technical",
"projects": ["DAARION", "NODA2"]
}
)
```
---
## 📊 Статистика пам'яті (для моніторингу):
```sql
-- Кількість фактів для Sofiia
SELECT COUNT(*) FROM user_facts WHERE agent_id = 'sofiia';
-- Останні повідомлення
SELECT * FROM user_facts
WHERE agent_id = 'sofiia'
ORDER BY created_at DESC
LIMIT 10;
```
---
## 🎯 Наступні кроки:
1. ✅ Ознайомитись з архітектурою пам'яті (готово!)
2. ⏳ Отримати Cohere API Key
3. ⏳ Створити docker-compose.memory-node2.yml
4. ⏳ Запустити Memory Stack
5. ⏳ Налаштувати OpenClaw для підключення
6. ⏳ Протестувати збереження та пошук
---
**Який варіант цікавить вас більше? Можу допомогти з реалізацією! 🚀**