initial commit
This commit is contained in:
82
04-Zarządzanie-Agentami/Model efemerycznych agentów.md
Normal file
82
04-Zarządzanie-Agentami/Model efemerycznych agentów.md
Normal file
@@ -0,0 +1,82 @@
|
||||
# Model efemerycznych agentów
|
||||
|
||||
#sympozium #agenty #architektura #ephemeral
|
||||
|
||||
## Fundamentalna decyzja
|
||||
|
||||
Sympozium implementuje **model efemeryczny**: każde wywołanie agenta tworzy nowy Kubernetes [[Job]], który po zakończeniu jest usuwany. To odwrotność podejścia "persistent engine" stosowanego w kagent, LangChain, CrewAI.
|
||||
|
||||
## Jak to działa
|
||||
|
||||
```
|
||||
Wiadomość użytkownika
|
||||
↓
|
||||
Channel Router tworzy AgentRun CR
|
||||
↓
|
||||
AgentRun Reconciler tworzy Job:
|
||||
- Agent container (LLM loop)
|
||||
- IPC Bridge sidecar
|
||||
- Skill sidecars (z efemerycznym RBAC)
|
||||
- Opcjonalnie: sandbox, MCP bridge
|
||||
↓
|
||||
Agent wykonuje zadanie (sekundy-minuty)
|
||||
↓
|
||||
Job ends → Pod usunięty → RBAC usunięty → Zasoby zwolnione
|
||||
```
|
||||
|
||||
## Implikacje
|
||||
|
||||
### Izolacja (zalety)
|
||||
- **Blast-radius** ograniczony do jednego poda - misbehaving agent nie wpływa na innych
|
||||
- **Resource limits** per invocation - każdy run ma własne CPU/memory limits
|
||||
- **[[SecurityContext]]** per run - każdy pod ma hardened security context
|
||||
- **[[NetworkPolicy]]** per run - deny-all egress, tylko IPC bridge ma sieć
|
||||
- **[[RBAC]]** per run - credentials istnieją tylko przez czas trwania runu
|
||||
|
||||
### Skalowanie (zalety)
|
||||
- **Horizontal scaling** natywne - K8s scheduler rozkłada pody po nodach
|
||||
- **No contention** - każdy run to osobny pod, brak współdzielenia procesora
|
||||
- **Auto-cleanup** - Kubernetes garbage collection czyści po zakończeniu
|
||||
|
||||
### Cold start (wady i mitygacja)
|
||||
- **Problem:** Każdy run = nowy pod = scheduling + image pull + container start
|
||||
- **Typowy czas:** 5-30 sekund
|
||||
- **Mitygacja 1:** Warm Pools (SandboxWarmPool) - pre-provisioned sandboxes
|
||||
- **Mitygacja 2:** ImagePullPolicy: IfNotPresent - obrazy cache'owane na nodach
|
||||
- **Mitygacja 3:** Tryb Server - Deployment zamiast Job dla long-lived scenarios
|
||||
|
||||
### Brak stanu (wady i mitygacja)
|
||||
- **Problem:** Agent nie pamięta poprzednich konwersacji
|
||||
- **Mitygacja 1:** Persistent Memory (SQLite + FTS5 na PVC)
|
||||
- **Mitygacja 2:** Legacy Memory (ConfigMap MEMORY.md)
|
||||
- **Mitygacja 3:** Session persistence (PostgreSQL)
|
||||
|
||||
## Porównanie z persistent engine
|
||||
|
||||
| Aspekt | Ephemeral (Sympozium) | Persistent (kagent, LangChain) |
|
||||
|--------|----------------------|-------------------------------|
|
||||
| Izolacja | [[Pod]]-level per run | Shared process |
|
||||
| Cold start | 5-30s (mitygowany WarmPool) | ~0s (process already running) |
|
||||
| State | External (memory, sessions) | In-process |
|
||||
| Scaling | Horizontal native | Vertical only |
|
||||
| Resource utilization | Pay-per-invocation | Always-on |
|
||||
| Failure blast radius | Single pod | Entire engine |
|
||||
| Audit trail | Pod logs, CRD status | Engine logs |
|
||||
| RBAC | Ephemeral per-run | Standing ServiceAccount |
|
||||
|
||||
## Kiedy model efemeryczny?
|
||||
|
||||
Idealny dla:
|
||||
- **Cluster operations** - kubectl, helm z izolacją
|
||||
- **Scheduled tasks** - health checks, sweeps
|
||||
- **Multi-tenant** - izolacja między tenantami
|
||||
- **Security-sensitive** - untrusted agent code
|
||||
- **Batch processing** - one-shot tasks
|
||||
|
||||
Mniej idealny dla:
|
||||
- **Real-time chat** - cold start jest widoczny (ale tryb Server to rozwiązuje)
|
||||
- **State-heavy workflows** - wymagają persistent memory
|
||||
|
||||
---
|
||||
|
||||
Powiązane: [[Cykl życia AgentRun]] | [[Agent Sandbox - gVisor i Kata]] | [[Sympozium vs kagent]]
|
||||
Reference in New Issue
Block a user