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:
463
docs/greenfood/greenfood_agents.md
Normal file
463
docs/greenfood/greenfood_agents.md
Normal 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*
|
||||
|
||||
374
docs/greenfood/scaling_to_1000_agents.md
Normal file
374
docs/greenfood/scaling_to_1000_agents.md
Normal 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*
|
||||
|
||||
Reference in New Issue
Block a user