Event Bus: Redis Streams + lazy loading (agent=human, no history preload)

This commit is contained in:
Markov 2026-02-21 18:37:05 +01:00
parent 89ea09411e
commit 75c8e6597a

View File

@ -57,9 +57,31 @@ Event Bus частично решает: если Tracker упал, событи
## На подумать
### ⚠️ Event Bus: детали реализации
- Tracker пишет в Redis Stream или в Redis Pub/Sub?
- Streams = persistent, Pub/Sub = volatile
- Consumer groups для multi-instance агентов?
- Retention policy (сколько хранить)?
- WS остаётся как транспорт до клиента, но sourced из Redis?
### ✅ Event Bus: Redis Streams (решение)
**Выбор: Redis Streams** (не RabbitMQ — тот не хранит историю).
**Роль:** real-time доставка + буфер при reconnect. НЕ хранилище истории (это PostgreSQL).
**Retention:** ~24ч. Старые события — из PostgreSQL через REST API.
### ✅ Lazy Loading контекста (ключевое решение)
Агент при подключении **НЕ грузит историю**. Как человек — зашёл и видит только новое.
```
1. Subscribe на Redis Stream (real-time, с текущего момента)
2. GET /tasks?assignee=me # мои задачи
3. GET /project/{id}/docs # документация
4. Работает. Историю НЕ грузит.
5. Если нужен контекст → read_messages(limit=10) — пагинация назад
```
**Почему:** не засоряет контекст LLM, агент сам решает когда подгружать.
**Prompt guideline:** "Если не хватает контекста — используй read_messages()"
### Reconnect
```
1. XREAD STREAMS events {last_event_id} # пропущенные
2. Если last_event_id > 24ч — начинаем с текущего момента
```