## Agents Added - Alateya: R&D, biotech, innovations - Clan (Spirit): Community spirit agent - Eonarch: Consciousness evolution agent ## Changes - docker-compose.node1.yml: Added tokens for all 3 new agents - gateway-bot/http_api.py: Added configs and webhook endpoints - gateway-bot/clan_prompt.txt: New prompt file - gateway-bot/eonarch_prompt.txt: New prompt file ## Fixes - Fixed ROUTER_URL from :9102 to :8000 (internal container port) - All 9 Telegram agents now working ## Documentation - Created PROJECT-MASTER-INDEX.md - single entry point - Added various status documents and scripts Tokens configured: - Helion, NUTRA, Agromatrix (existing) - Alateya, Clan, Eonarch (new) - Druid, GreenFood, DAARWIZZ (configured)
13 KiB
MEMORY RECOVERY STATUS — NODA1
Created: 2026-01-22 19:40 UTC
✅ SUMMARY: Векторна пам'ять ВІДНОВЛЕНО
Проблема: Вчора під час виправлення healthcheck Qdrant було створено НОВИЙ volume qdrant-data-node1 замість старого microdao-daarion_qdrant-data-node1, що призвело до втрати доступу до 57MB векторних даних.
Вирішення: Підключено правильний volume з історичними даними.
📊 РЕАЛЬНИЙ СТАН ДАНИХ (після відновлення)
PostgreSQL — Довготривала пам'ять (таблиця user_facts)
| Agent | Facts | Users | Status |
|---|---|---|---|
| nutra | 325 | 4 | ✅ Active |
| agromatrix | 46 | 2 | ✅ Active |
| helion | 18 | 2 | ✅ Active |
| greenfood | 8 | 2 | ✅ Active |
| no agent_id | 272 | 6+ | ⚠️ Legacy data |
Всього: 669 фактів про користувачів
Топ користувачі:
tg:105131080— 247 фактів (nutra + legacy)tg:1249799827— 156 фактів (кілька агентів)tg:1642840513— 144 факти (всі агенти)
Qdrant — Векторний пошук (колекції)
| Collection | Points | Size | Status |
|---|---|---|---|
| helion_messages | 365 | 57MB volume | ✅ RESTORED |
| nutra_messages | 468 | (shared) | ✅ RESTORED |
| agromatrix_messages | 68 | (shared) | ✅ RESTORED |
| greenfood_messages | 18 | (shared) | ✅ RESTORED |
| daarwizz_messages | 0 | empty | 🆕 New bot |
| druid_messages | 0 | empty | 🆕 New bot |
| helion_memory_items | 0 | empty | 🔄 Dynamic |
| nutra_memory_items | 0 | empty | 🔄 Dynamic |
Додаткові колекції:
helion_docs,nutra_docs,greenfood_docs,daarwizz_docs,druid_docsnutra_food_knowledge(знання про харчування)druid_legal_kb(юридична база знань)helion_artifacts(артефакти Helion)memories,messages(legacy collections)
Всього: 18 колекцій, 919+ векторних точок
🔄 ЯК ПРАЦЮЄ ПАМ'ЯТЬ АГЕНТІВ
Тришарова архітектура пам'яті
1️⃣ PostgreSQL (Постійні факти)
Тип: Структуроване реляційне сховище
Розташування: daarion_memory.user_facts
Ізоляція: Поле agent_id + індекс
Час життя: Назавжди (бекап кожні 6 годин)
Використання: Налаштування користувачів, вивчені факти, довготривалий контекст
Приклад:
SELECT * FROM user_facts
WHERE agent_id = 'helion'
AND user_id = 'tg:1642840513';
-- Повертає: 14 фактів про цього користувача від Helion
2️⃣ Qdrant (Векторний пошук)
Тип: Векторні ембедінги
Розташування: Колекції {agent_id}_messages, {agent_id}_memory_items
Ізоляція: Окремі колекції для кожного агента
Час життя: Постійно (volume: microdao-daarion_qdrant-data-node1)
Використання: Семантичний пошук, контекст розмови, RAG retrieval
Як працює:
- Кожне повідомлення → векторизовано → збережено в
{agent_id}_messages - Router отримує top-k релевантних повідомлень для контексту
- Кожен агент бачить ТІЛЬКИ свою колекцію
Приклад:
- Користувач питає Helion про енергію → Router шукає в
helion_messages - Знаходить 5-10 найрелевантніших минулих розмов
- Додає до контексту LLM
3️⃣ Neo4j (Граф знань)
Тип: Графова база даних
Розташування: neo4j-data-node1
Ізоляція: Властивості вузлів з agent_id
Час життя: Постійно
Використання: Зв'язки між сутностями, графи концепцій, міжагентські знання
📝 ЗБЕРЕЖЕННЯ ІСТОРІЇ РОЗМОВ
Як зберігаються повідомлення:
- Користувач надсилає повідомлення боту (наприклад, Telegram)
- Gateway отримує webhook → пересилає до Router
- Router обробляє:
- Векторизує текст повідомлення (через embedding модель)
- Зберігає в Qdrant колекції
{agent_id}_messages - Витягує факти → зберігає в PostgreSQL
user_facts - Оновлює граф Neo4j якщо виявлено сутності
- LLM генерує відповідь
- Відповідь також зберігається в Qdrant для майбутнього контексту
Збереження:
- Qdrant: Необмежено (обмежено місцем на диску)
- PostgreSQL: Необмежено (малий розмір, ~81MB для всіх агентів)
- Neo4j: Необмежено (граф росте органічно)
🤔 ЧОМУ ДАНІ ЗДАВАЛИСЯ "ВТРАЧЕНИМИ"
Хронологія подій:
19-20 січня: Агенти працюють нормально, накопичують дані в:
- Volume:
microdao-daarion_qdrant-data-node1(57MB) - PostgreSQL:
daarion_memory(зростає)
22 січня (вчора): Виправлення healthcheck
- Проблема: Qdrant показував "unhealthy" (wget відсутній у контейнері)
- Рішення: Пересоздано контейнер з
--health-cmd="true" - ПОМИЛКА: Використано коротку назву volume
-v qdrant-data-node1:/qdrant/storage - Результат: Docker створив НОВИЙ volume замість використання існуючого
- Наслідок: Qdrant стартував порожнім (0 колекцій)
22 січня (сьогодні): Відновлення
- Виявлено: Старий volume містить 57MB даних з 18 колекціями
- Виправлено: Зупинено контейнер, пересоздано з правильною назвою volume
- Результат: Всі 919+ векторних точок відновлено
Чому PostgreSQL вижив:
- Назва volume була явно встановлена в docker-compose.yml
- Не було ручного пересоздання → немає невідповідності volume
⚡ ЧИТАННЯ ІСТОРІЇ З TELEGRAM (80 повідомлень)
Статус: НЕ РЕАЛІЗОВАНО ❌
Ти говориш, що ми налаштовували можливість читати до 80 повідомлень з Telegram для відновлення втрачених даних.
Поточна поведінка:
- Gateway отримує ТІЛЬКИ нові повідомлення (webhooks)
- Немає завантаження історичних повідомлень
- Якщо контейнер агента перезапущено → контекст втрачено до отримання нових повідомлень
Запропонована реалізація:
# gateway-bot/telegram_history_recovery.py
async def load_telegram_history(
bot_token: str,
chat_id: int,
agent_id: str,
limit: int = 80
):
"""Завантажити останні N повідомлень з Telegram чату"""
bot = Bot(token=bot_token)
# Отримати історію чату
messages = await bot.get_chat_history(chat_id, limit=limit)
# Для кожного повідомлення:
for msg in messages:
# Перевірити чи вже є в Qdrant
existing = await check_message_exists(agent_id, msg.message_id)
if not existing:
# Векторизувати та зберегти
await ingest_message(agent_id, msg)
return len(messages)
Варіанти запуску:
- Ручний: Команда адміна
/recover_history - Автоматичний: При старті бота якщо колекція порожня
- За розкладом: Щоденна перевірка пропущених повідомлень
⚠️ ПРИМІТКА: Це НЕ реалізовано. Потрібно додати:
telegram_history_recovery.pyв gateway-bot- Інтеграцію з Router ingestion pipeline
- Логіку дедуплікації (перевірка message_id перед збереженням)
🔍 АНАЛІЗ ДАНИХ HELION
Ти питаєш: "Helion працює вже досить довго, невже нічого не збереглося?"
Відповідь: ТАК, збереглося! ✅
Дані специфічні для Helion:
-
PostgreSQL:
- 18 фактів про 2 користувачів
- Останнє оновлення: 2026-01-22 (сьогодні!)
-
Qdrant:
- 365 повідомлень в
helion_messages🎉 - Колекція створена: 17 січня 18:08
- Останнє оновлення: 22 січня 19:49 (сегменти активні)
- Зберігання: Частина volume 57MB
- 365 повідомлень в
-
Додаткові колекції:
helion_docs— ембедінги документаціїhelion_memory_items— 0 (динамічні, створюються за потребою)helion_artifacts— збережені артефакти
Звідки взялися дані?
- Користувачі спілкувалися з Helion в Telegram
- Кожна розмова → векторизована → збережена
- 365 повідомлень = ~тижні розмов
- Дані були весь час, просто відключені на 1 день
🚀 РЕКОМЕНДАЦІЇ
✅ Вже реалізовано:
- Автоматичні бекапи PostgreSQL (кожні 6 годин)
- Скрипт ручного бекапу (
/opt/scripts/safe-rebuild.sh) - Назви volume виправлені в docker-compose.yml
- Процедури відновлення задокументовані
🔲 TODO (опціональні покращення):
1. Реалізувати відновлення історії з Telegram
- Додати команду
/recover_historyдля адмінів - Автоматична перевірка при старті якщо колекції порожні
- Див. запропоновану реалізацію вище
2. Додати бекапи Qdrant
Зараз: Тільки PostgreSQL має автоматичні бекапи
Рекомендація:
# Додати в cron або docker-compose.backups.yml
tar czf /opt/backups/qdrant/qdrant-$(date +%Y%m%d-%H%M%S).tar.gz \
/var/lib/docker/volumes/microdao-daarion_qdrant-data-node1/_data
3. Додати бекапи Neo4j
docker exec dagi-neo4j-node1 neo4j-admin dump --to=/backups/neo4j-dump-$(date +%Y%m%d).dump
4. Моніторинг та сповіщення
- Сповіщення якщо будь-яка колекція стає порожньою
- Сповіщення якщо кількість векторів значно зменшується
- Telegram сповіщення адмінам
5. Дашборд здоров'я колекцій
- Web UI з кількістю точок на агента
- Мітки часу останнього оновлення
- Використання сховища на колекцію
🎯 ФІНАЛЬНИЙ СТАТУС
| Компонент | Статус | Дані присутні | Бекап |
|---|---|---|---|
| PostgreSQL | ✅ Healthy | 669 фактів | ✅ Кожні 6г |
| Qdrant | ✅ Healthy | 919+ векторів | ⚠️ Тільки вручну |
| Neo4j | ✅ Healthy | Невідомо | ⚠️ Тільки вручну |
| Gateway | ✅ Healthy | 7 ботів активні | N/A |
| Router | ✅ Healthy | Обробка | N/A |
Всі критичні дані ВІДНОВЛЕНО та ДОСТУПНІ. ✅
Більше немає втрачених даних — було лише тимчасове від'єднання від правильного volume.
Наступна дія: Реалізувати відновлення історії з Telegram для майбутньої стійкості.
Контакт: NODA1 root@144.76.224.179
Документація: /opt/docs/