feat: Add presence heartbeat for Matrix online status

- 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
This commit is contained in:
Apple
2025-11-27 00:19:40 -08:00
parent 5bed515852
commit 3de3c8cb36
6371 changed files with 1317450 additions and 932 deletions

View File

@@ -0,0 +1,463 @@
# GREENFOOD Crew - Документація
**Версія**: 1.0.0
**Дата**: 2025-11-18
**Статус**: Ready for Development
---
## Огляд
GREENFOOD Crew — це команда з 13 спеціалізованих AI-агентів для управління ERP-системою крафтових виробників продуктів харчування. Система забезпечує повний цикл від onboarding виробника до доставки товару покупцю та фінансових розрахунків.
---
## Архітектура
### Головний оркестратор
**GREENFOOD Assistant** — єдина точка входу для всіх користувачів системи. Розпізнає роль користувача, виявляє намір та делегує завдання відповідним доменним агентам.
### 12 доменних агентів
Агенти організовані за функціональними доменами:
#### 🏭 Операційні агенти (Operations)
1. **Product & Catalog Agent** - Каталог товарів
2. **Batch & Quality Agent** - Партії та контроль якості
3. **Warehouse Agent** - Управління складами
4. **Logistics & Delivery Agent** - Логістика та доставка
#### 💼 Продажі та підтримка (Sales & Support)
5. **Seller Agent** - Менеджер з продажу
6. **Customer Care Agent** - Служба підтримки
#### 💰 Фінанси (Finance)
7. **Finance & Pricing Agent** - Бухгалтерія та ціноутворення
#### 📢 Маркетинг (Marketing)
8. **SMM & Campaigns Agent** - Соціальні мережі та кампанії
9. **SEO & Web Experience Agent** - SEO та веб-досвід
#### 📊 Аналітика та governance (Analytics & Governance)
10. **Analytics & BI Agent** - Аналітика даних
11. **Compliance & Audit Agent** - Аудит та compliance
#### 🚀 Успіх клієнтів (Success)
12. **Vendor Success Agent** - Менеджер успіху комітентів
---
## Ролі та відповідальність агентів
### 1. GREENFOOD Assistant
**Роль**: Фронтовий оркестратор
**Мета**: Розуміти користувача, виявляти намір, делегувати завдання
**Ключові функції**:
- Ідентифікація ролі користувача (комітент, складський, логіст, бухгалтер, маркетолог, покупець)
- Перетворення запиту на чітку дію
- Координація роботи доменних агентів
- Формування зрозумілих результатів для користувача
**Делегування**: Так (може делегувати іншим агентам)
---
### 2. Product & Catalog Agent
**Роль**: Менеджер каталогу товарів
**Мета**: Підтримувати чистий, структурований каталог без дублів
**Ключові функції**:
- Створення та редагування карточок товарів
- Перевірка дублікатів
- Управління атрибутами (вага, склад, алергени, строк придатності)
- Управління медіа (фото, відео)
**Інструменти (TODO)**:
- ProductCatalogAPI
- ImageUploadTool
- DuplicateDetectorTool
---
### 3. Batch & Quality Agent
**Роль**: Менеджер партій та якості
**Мета**: Забезпечити трасованість партій та контроль якості
**Ключові функції**:
- Створення та відстеження партій товарів
- Контроль строків придатності
- Управління статусами партій (на складі, в дорозі, реалізована, прострочена)
- Фіксація інцидентів якості та рекламацій
**Інструменти (TODO)**:
- BatchTrackingAPI
- QualityCheckTool
- ExpiryAlertTool
---
### 4. Vendor Success Agent
**Роль**: Менеджер успіху комітентів
**Мета**: Швидкий запуск та зростання виробників
**Ключові функції**:
- Onboarding нових комітентів (чеклісти, документи)
- Виявлення слабких місць (порожній каталог, відсутні фото)
- Проактивні рекомендації для покращення
- Моніторинг метрик успіху
**Інструменти (TODO)**:
- VendorOnboardingAPI
- ChecklistTool
- RecommendationEngine
---
### 5. Warehouse Agent
**Роль**: Начальник складу
**Мета**: Коректні та актуальні залишки товарів
**Ключові функції**:
- Управління залишками товарів
- Фіксація руху товарів (прихід, переміщення, відвантаження)
- Структурування складу (зони, стелажі, температурні зони)
- Сигналізація про критичні залишки
**Інструменти (TODO)**:
- WarehouseAPI
- InventoryTool
- StockMovementTool
- ZoneManagementTool
---
### 6. Logistics & Delivery Agent
**Роль**: Логіст і диспетчер
**Мета**: Мінімальні затримки та витрати на доставку
**Ключові функції**:
- Створення маршрутів доставки
- Управління статусами доставок
- Інтеграція з перевізниками (API)
- Формування трек-номерів
**Інструменти (TODO)**:
- LogisticsAPI
- DeliveryTrackerTool
- CourierIntegrationTool
---
### 7. Seller Agent
**Роль**: Менеджер з продажу
**Мета**: Допомога в оформленні замовлень та підборі товарів
**Ключові функції**:
- Формування кошика замовлення
- Пропозиції альтернатив, апсели, крос-сели
- Перевірка можливості виконання замовлення
- Розуміння контексту клієнта (роздріб/опт, новий/постійний)
**Інструменти (TODO)**:
- SalesAPI
- BasketTool
- RecommendationEngine
- PricingTool
---
### 8. Customer Care Agent
**Роль**: Служба підтримки
**Мета**: Швидко вирішувати проблеми клієнтів
**Ключові функції**:
- Ідентифікація клієнта та його замовлення
- Відповіді на питання (статус, доставка, повернення)
- Фіксація рекламацій та причин повернень
- Пропозиція наступних кроків
**Інструменти (TODO)**:
- SupportAPI
- OrderLookupTool
- ComplaintTool
- TicketingTool
---
### 9. Finance & Pricing Agent
**Роль**: Бухгалтер і фінансовий стратег
**Мета**: Прозорі взаєморозрахунки та здорова економіка
**Ключові функції**:
- Ведення балансів учасників
- Моделі ціноутворення (опт, роздріб, акції, промокоди)
- Розрахунок комісій та виплат
- Робота з токенами (DAAR/DAARION) та фіатом
**Інструменти (TODO)**:
- FinanceAPI
- PricingEngine
- BalanceTool
- PayoutCalculator
---
### 10. SMM & Campaigns Agent
**Роль**: Маркетолог та контент-агент
**Мета**: Просування товарів через цифрові канали
**Ключові функції**:
- Створення контенту для соцмереж, розсилок, банерів
- Перевірка наявності товарів перед промо
- Планування кампаній з чіткою метою
- Честна комунікація без маніпуляцій
**Інструменти (TODO)**:
- ContentGeneratorTool
- CampaignAPI
- SocialMediaTool
- ImageGeneratorTool
---
### 11. SEO & Web Experience Agent
**Роль**: SEO-оптимізатор
**Мета**: Видимість в пошуку та зрозумілість для користувачів
**Ключові функції**:
- Оптимізація заголовків, описів, метаданих
- Покращення структури контенту
- Використання реальних даних про товари
- Блоки довіри, FAQ, structured data
**Інструменти (TODO)**:
- SEOAnalyzerTool
- MetaGeneratorTool
- ContentStructureTool
---
### 12. Analytics & BI Agent
**Роль**: Аналітик даних
**Мета**: Перетворення даних на actionable insights
**Ключові функції**:
- Формування зрозумілих звітів
- Виявлення трендів, сезонності, аномалій
- Пропозиції варіантів дій із вказанням ризиків
- Роз'яснення в простих термінах
**Інструменти (TODO)**:
- AnalyticsAPI
- ReportGeneratorTool
- TrendAnalyzerTool
- ForecastingTool
---
### 13. Compliance & Audit Agent
**Роль**: Внутрішній аудитор
**Мета**: Відповідність політикам та здоровій бізнес-логіці
**Ключові функції**:
- Аналіз логів подій (зміни цін, списання, повернення)
- Виявлення ризикових операцій
- Формування попереджень та рекомендацій
- Нейтральний, фактичний стиль
**Інструменти (TODO)**:
- AuditLogTool
- RiskDetectorTool
- ComplianceCheckerTool
---
## Команди (Crews) для бізнес-сценаріїв
### 1. Onboard Vendor Crew
**Мета**: Запуск нового комітента (виробника)
**Агенти**: GREENFOOD Assistant, Vendor Success, Product & Catalog, Warehouse, Finance & Pricing
**Етапи**:
1. Привітання та збір інформації
2. Створення карточок товарів
3. Налаштування складу та партій
4. Налаштування фінансів та ціноутворення
5. Чекліст успішного запуску
**Виклик**:
```python
from services.greenfood.crew.greenfood_crews import GREENFOOD_CREWS, GREENFOOD_TASK_CREATORS
vendor_data = {
"name": "Еко Мед Карпати",
"products": ["Гірський мед", "Мед з липи", "Мед з акації"],
"contact": "...",
}
tasks = GREENFOOD_TASK_CREATORS["onboard_vendor"](vendor_data)
crew = GREENFOOD_CREWS["onboard_vendor"]
crew.tasks = tasks
result = crew.kickoff()
```
---
### 2. Fulfill Order Crew
**Мета**: Виконання замовлення від прийняття до доставки
**Агенти**: GREENFOOD Assistant, Seller, Warehouse, Logistics, Customer Care, Finance & Pricing
**Етапи**:
1. Прийняття замовлення
2. Формування та підтвердження кошика
3. Резервація товарів на складі
4. Створення маршруту доставки
5. Фінансові проводки
6. Повідомлення клієнта
**Виклик**:
```python
order_data = {
"customer_name": "Іван Петренко",
"items": [{"product_id": "123", "quantity": 2}],
"delivery_address": "м. Львів, вул. Шевченка 1",
}
tasks = GREENFOOD_TASK_CREATORS["fulfill_order"](order_data)
crew = GREENFOOD_CREWS["fulfill_order"]
crew.tasks = tasks
result = crew.kickoff()
```
---
### 3. Monthly Settlement Crew
**Мета**: Місячні звіряння та розрахунки
**Агенти**: GREENFOOD Assistant, Finance & Pricing, Analytics & BI, Compliance & Audit, Vendor Success
**Етапи**:
1. Ініціація процесу звіряння
2. Формування аналітичних звітів
3. Розрахунок фінансових показників та актів звіряння
4. Audit та виявлення ризиків
5. Персоналізовані рекомендації комітентам
**Виклик**:
```python
period_data = {
"period": "2025-11",
"vendors": ["vendor_1", "vendor_2"],
}
tasks = GREENFOOD_TASK_CREATORS["monthly_settlement"](period_data)
crew = GREENFOOD_CREWS["monthly_settlement"]
crew.tasks = tasks
result = crew.kickoff()
```
---
### 4. Marketing Campaign Crew (додатковий)
**Мета**: Запуск маркетингової кампанії
**Агенти**: GREENFOOD Assistant, Warehouse, SMM & Campaigns, SEO & Web, Finance & Pricing, Analytics & BI
**Етапи**:
1. Прийняття запиту на кампанію
2. Перевірка наявності товарів
3. Створення контенту
4. SEO-оптимізація посадкових сторінок
5. Налаштування цін та промокодів
6. Налаштування відстеження KPI
---
## Зв'язки між агентами
### Найчастіші взаємодії
```
GREENFOOD Assistant (центральний хаб)
├── Product & Catalog ←→ Batch & Quality
├── Warehouse ←→ Logistics & Delivery
├── Warehouse ←→ Batch & Quality
├── Seller ←→ Warehouse
├── Seller ←→ Finance & Pricing
├── Customer Care ←→ Logistics
├── SMM & Campaigns ←→ Warehouse
├── SMM & Campaigns ←→ SEO & Web
├── Analytics & BI ←→ (всі агенти)
├── Compliance & Audit ←→ (всі агенти)
└── Vendor Success ←→ (всі агенти)
```
---
## Інтеграція з DAGI Router
### Додавання в router-config.yml
```yaml
agents:
greenfood:
description: "GREENFOOD Assistant - ERP orchestrator"
default_llm: local_qwen3_8b
system_prompt: |
Ти — GREENFOOD Assistant, фронтовий оркестратор ERP-системи...
```
### Виклик через Router
```python
from router_client import send_to_router
response = await send_to_router({
"mode": "crew",
"agent": "greenfood",
"message": "Онбордь нового комітента 'Еко Мед Карпати'",
"metadata": {
"scenario": "onboard_vendor",
"vendor_data": {...},
},
})
```
---
## Файлова структура
```
services/greenfood/
├── __init__.py
└── crew/
├── __init__.py
├── greenfood_prompts.py # 13 системних промтів
├── greenfood_agents.py # 13 агентів
└── greenfood_crews.py # 4 crews + task creators
```
---
## Наступні кроки
### Фаза 1: Базова інтеграція
- [ ] Підключити GREENFOOD Assistant до DAGI Router
- [ ] Протестувати базовий діалог
- [ ] Додати інструменти (tools) для агентів
### Фаза 2: Інструменти та API
- [ ] Реалізувати ProductCatalogAPI
- [ ] Реалізувати WarehouseAPI
- [ ] Реалізувати FinanceAPI
- [ ] Додати інтеграції з зовнішніми сервісами
### Фаза 3: Crews та workflows
- [ ] Протестувати onboard_vendor_crew
- [ ] Протестувати fulfill_order_crew
- [ ] Протестувати monthly_settlement_crew
- [ ] Додати monitoring та logging
### Фаза 4: UI та UX
- [ ] Web-інтерфейс для комітентів
- [ ] Дашборди для різних ролей
- [ ] Mobile app для складських та логістів
- [ ] Інтеграція з Telegram для швидких запитів
---
## Контакти та підтримка
**Репозиторій**: `/Users/apple/github-projects/microdao-daarion`
**Модуль**: `services/greenfood/crew`
**Версія crewAI**: 0.28.0+
**Python**: 3.11+
---
*Документ створено: 2025-11-18*
*Останнє оновлення: 2025-11-18*

View File

@@ -0,0 +1,374 @@
# Масштабування GREENFOOD до 1000+ агентів
**Поточний стан**: 13 агентів, 4 crews
**Мета**: 1000+ паралельних агентів для сотень комітентів
---
## 🎯 Архітектурні виклики
### 1. **Паралелізм та черги**
**Проблема**: 1000 агентів = 1000+ одночасних LLM-викликів
**Рішення**:
- **Черги завдань**: Redis Queue (RQ), Celery, або NATS JetStream
- **Rate limiting**: Обмеження кількості одночасних запитів до LLM
- **Пріоритизація**: VIP-клієнти → звичайні → фонові завдання
```python
# Приклад з Celery
from celery import Celery
app = Celery('greenfood', broker='redis://localhost:6379')
@app.task(priority=1) # Високий пріоритет
def process_urgent_order(order_id):
crew = GREENFOOD_CREWS["fulfill_order"]
return crew.kickoff()
@app.task(priority=9) # Низький пріоритет
def generate_analytics_report():
crew = GREENFOOD_CREWS["monthly_settlement"]
return crew.kickoff()
```
---
### 2. **Державне управління (State Management)**
**Проблема**: Кожен агент має контекст, пам'ять, стан діалогу
**Рішення**:
- **Redis** для швидкого кешу (поточні діалоги, сесії)
- **PostgreSQL** для персистентного стану (історія, транзакції)
- **Memory Service** (вже є в проєкті!)
```python
# Приклад збереження стану
from redis import Redis
import json
redis_client = Redis(host='localhost', port=6379, db=0)
def save_agent_state(agent_id: str, state: dict):
redis_client.setex(
f"agent:{agent_id}:state",
3600, # TTL 1 година
json.dumps(state)
)
def get_agent_state(agent_id: str) -> dict:
state = redis_client.get(f"agent:{agent_id}:state")
return json.loads(state) if state else {}
```
---
### 3. **LLM інфраструктура**
**Проблема**: Ollama на одній машині не витримає 1000 запитів/хв
**Рішення**:
#### A. Розподілені LLM (Horizontal Scaling)
```yaml
# docker-compose для LLM кластера
services:
ollama-1:
image: ollama/ollama
environment:
- OLLAMA_NUM_PARALLEL=4
ollama-2:
image: ollama/ollama
environment:
- OLLAMA_NUM_PARALLEL=4
ollama-3:
image: ollama/ollama
environment:
- OLLAMA_NUM_PARALLEL=4
llm-load-balancer:
image: nginx:alpine
# Балансування навантаження між ollama-1, 2, 3
```
#### B. Використання хмарних LLM для пікових навантажень
```python
# Гібридна стратегія
def get_llm_provider(priority: str):
if priority == "urgent":
return "cloud_deepseek" # Швидкий хмарний LLM
elif is_local_available():
return "local_qwen3_8b" # Локальний Ollama
else:
return "cloud_deepseek" # Fallback на хмару
```
#### C. Кешування відповідей LLM
```python
from functools import lru_cache
import hashlib
@lru_cache(maxsize=10000)
def get_llm_response_cached(prompt: str, agent_id: str):
# Кеш для повторюваних запитів
cache_key = hashlib.md5(f"{agent_id}:{prompt}".encode()).hexdigest()
cached = redis_client.get(f"llm_cache:{cache_key}")
if cached:
return cached
response = call_llm(prompt, agent_id)
redis_client.setex(f"llm_cache:{cache_key}", 3600, response)
return response
```
---
### 4. **Моніторинг та observability**
**Проблема**: Як зрозуміти, що відбувається з 1000 агентами?
**Рішення**:
#### A. Метрики (Prometheus + Grafana)
```python
from prometheus_client import Counter, Histogram, Gauge
agent_requests = Counter('greenfood_agent_requests', 'Запити до агентів', ['agent_id'])
agent_latency = Histogram('greenfood_agent_latency', 'Затримка агентів', ['agent_id'])
active_agents = Gauge('greenfood_active_agents', 'Активні агенти')
# Використання
@track_metrics
def execute_agent(agent_id: str, task: dict):
agent_requests.labels(agent_id=agent_id).inc()
with agent_latency.labels(agent_id=agent_id).time():
return agent.execute(task)
```
#### B. Distributed Tracing (Jaeger / Tempo)
```python
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
@tracer.start_as_current_span("fulfill_order")
def fulfill_order(order_data: dict):
with tracer.start_as_current_span("warehouse.reserve"):
warehouse_agent.reserve_items(order_data)
with tracer.start_as_current_span("logistics.create_route"):
logistics_agent.create_route(order_data)
```
#### C. Логування (ELK Stack / Loki)
```python
import structlog
logger = structlog.get_logger()
logger.info(
"agent_execution_started",
agent_id="warehouse_agent",
task_id="task_123",
vendor_id="vendor_456",
)
```
---
### 5. **Ізоляція та безпека**
**Проблема**: Один збійний агент не має зупинити всю систему
**Рішення**:
#### A. Circuit Breaker Pattern
```python
from pybreaker import CircuitBreaker
breaker = CircuitBreaker(fail_max=5, timeout_duration=60)
@breaker
def call_warehouse_agent(task):
# Якщо warehouse_agent падає 5 разів підряд,
# circuit breaker відкривається на 60 сек
return warehouse_agent.execute(task)
```
#### B. Sandbox для кожного агента
```python
# Docker container per agent instance
docker run --rm \
--memory="512m" \
--cpus="0.5" \
--name agent_warehouse_001 \
greenfood/agent:latest \
python -m greenfood.crew.warehouse_agent
```
---
### 6. **Дані та API**
**Проблема**: 1000 агентів = тисячі запитів до БД/API
**Рішення**:
#### A. Connection Pooling
```python
from sqlalchemy.pool import QueuePool
engine = create_engine(
"postgresql://...",
poolclass=QueuePool,
pool_size=20,
max_overflow=50,
)
```
#### B. Read Replicas
```yaml
# PostgreSQL з реплікацією
primary:
host: postgres-primary
port: 5432
replicas:
- host: postgres-replica-1
port: 5432
- host: postgres-replica-2
port: 5432
# Читання з реплік, запис в primary
```
#### C. Кешування на рівні API
```python
from cachetools import TTLCache
api_cache = TTLCache(maxsize=10000, ttl=300)
@cached(cache=api_cache)
def get_product_catalog(vendor_id: str):
return db.query(Product).filter_by(vendor_id=vendor_id).all()
```
---
## 📊 Орієнтовні потужності
### Поточна архітектура (13 агентів)
- **Throughput**: ~10-20 задач/хв
- **Latency**: 3-10 сек на задачу
- **Concurrent agents**: 5-10
### Для 1000 агентів
- **Throughput**: 1000-5000 задач/хв
- **Latency**: <5 сек (95 percentile)
- **Concurrent agents**: 500-1000
### Необхідна інфраструктура
| Компонент | Мінімум | Рекомендовано |
|-----------|---------|---------------|
| **LLM Nodes** | 3x Ollama (RTX 4090) | 10x Ollama або хмара |
| **Redis** | 1 instance (16GB RAM) | Redis Cluster (64GB RAM) |
| **PostgreSQL** | 1 primary + 1 replica | 1 primary + 3 replicas |
| **Message Queue** | NATS Core | NATS JetStream Cluster |
| **API Gateway** | 2 instances | 5+ instances (auto-scaling) |
| **Monitoring** | Prometheus + Grafana | Full observability stack |
### Орієнтовний бюджет
- **On-premise**: $15,000-30,000 (обладнання) + $500-1000/міс (утримання)
- **Cloud**: $2,000-5,000/міс (залежно від навантаження)
---
## 🛠️ План масштабування
### Phase 1: Proof of Concept (Current)
- ✅ 13 агентів
- ✅ 4 crews
- ✅ Базова інтеграція з Router
- **Навантаження**: 1-10 комітентів
### Phase 2: Production Ready (1-3 місяці)
- [ ] Черги завдань (Celery/NATS)
- [ ] Redis для стану
- [ ] Моніторинг (Prometheus)
- [ ] Circuit breakers
- **Навантаження**: 10-50 комітентів, 100-200 задач/год
### Phase 3: Scale Out (3-6 місяців)
- [ ] LLM кластер (3-5 nodes)
- [ ] PostgreSQL реплікація
- [ ] API rate limiting
- [ ] Distributed tracing
- **Навантаження**: 50-200 комітентів, 1000+ задач/год
### Phase 4: Enterprise Scale (6-12 місяців)
- [ ] Auto-scaling (Kubernetes)
- [ ] Multi-region deployment
- [ ] Advanced caching (CDN, edge)
- [ ] ML для оптимізації маршрутизації
- **Навантаження**: 200-1000 комітентів, 5000+ задач/год
---
## 💡 Швидкий старт для масштабування
### 1. Додай черги (швидко)
```bash
# Install Redis
docker run -d -p 6379:6379 redis:alpine
# Install Celery
pip install celery redis
```
```python
# services/greenfood/tasks.py
from celery import Celery
from services.greenfood.crew.greenfood_crews import GREENFOOD_CREWS
app = Celery('greenfood', broker='redis://localhost:6379')
@app.task
def execute_crew_async(crew_name: str, data: dict):
crew = GREENFOOD_CREWS[crew_name]
# ... setup tasks ...
return crew.kickoff()
```
### 2. Додай моніторинг (швидко)
```bash
# Prometheus + Grafana
docker-compose up -d prometheus grafana
```
### 3. Додай load balancer для LLM (середньо)
```yaml
# nginx.conf
upstream ollama_backend {
least_conn; # Балансування по найменшому навантаженню
server ollama-1:11434;
server ollama-2:11434;
server ollama-3:11434;
}
```
---
## 🎯 Висновок
**Для 1000 агентів потрібно**:
1. ✅ Архітектура вже хороша (crewAI + модульність)
2. ⏳ Додати черги та state management (1-2 тижні)
3. ⏳ Масштабувати LLM інфраструктуру (2-4 тижні)
4. ⏳ Додати observability (1-2 тижні)
5. ⏳ Тестування під навантаженням (2-4 тижні)
**Реальний термін до production-ready 1000 агентів: 2-3 місяці**
---
*Документ створено: 2025-11-18*