Wróć

10. OpenClaw — routing wielu agentów i izolacja sesji

Dogłębne omówienie architektury wielu agentów w OpenClaw: konfiguracja wielu instancji agenta, reguły routingu wiadomości, strategie izolacji sesji oraz najlepsze praktyki współpracy zespołowej, pomagające zbudować system asystenta AI klasy enterprise.

Dotyczy OpenClaw v2026.2 | Artykuł dla zespołów lub użytkowników potrzebujących izolacji kontekstu.

TL;DR: Konfiguracja wielu agentów: "agents": {"instances": {"personal": {...}, "work": {...}}}. Reguły routingu: "routing": {"rules": [{"match": {"channel": "telegram"}, "agent": "personal"}]}. Izolacja sesji: "sessions": {"isolation": "user"}. Tryb sandbox: "sandbox": {"mode": "non-main"}. Idealne do scenariuszy wieloużytkownikowych, wieloprojektowych, wielozadaniowych.

Dlaczego potrzeba wielu agentów?

Ograniczenia pojedynczego agenta

Scenariusz Problem jednego agenta Rozwiązanie z wieloma agentami
Wielu użytkowników Mieszanie kontekstów, problemy z prywatnością Niezależny agent dla każdego użytkownika
Wiele projektów Informacje projektowe się mieszają Niezależny agent dla każdego projektu
Wiele zastosowań Jeden agent w wielu rolach Wyspecjalizowani agenci
Wiele zespołów Trudna kontrola uprawnień Izolacja agentów wg zespołów
Kontrola kosztów Brak rozróżnienia zużycia Niezależne rozliczanie wg modelu

Scenariusze użycia wielu agentów

flowchart TB
    subgraph Users["Użytkownicy"]
        U1[Użytkownik A]
        U2[Użytkownik B]
        U3[Zespół X]
        U4[Zespół Y]
    end
    
    subgraph Router["Router wiadomości"]
        R[Reguły routingu]
    end
    
    subgraph Agents["Instancje agentów"]
        A1[Osobisty Agent A]
        A2[Osobisty Agent B]
        A3[Agent zespołu X]
        A4[Agent zespołu Y]
    end
    
    subgraph Models["Modele"]
        M1[Claude Opus]
        M2[Claude Sonnet]
        M3[GPT-4o]
        M4[Haiku]
    end
    
    U1 --> R
    U2 --> R
    U3 --> R
    U4 --> R
    R --> A1
    R --> A2
    R --> A3
    R --> A4
    A1 --> M1
    A2 --> M2
    A3 --> M3
    A4 --> M4

Konfiguracja wielu agentów

Podstawowa struktura

{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspace"
    },
    "instances": {
      "personal": {
        "model": "anthropic/claude-opus-4-6",
        "workspace": "~/.openclaw/workspaces/personal",
        "thinkingLevel": "high"
      },
      "work": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/work",
        "skills": ["github", "jira", "confluence"]
      },
      "assistant": {
        "model": "anthropic/claude-haiku-3.5",
        "workspace": "~/.openclaw/workspaces/assistant"
      }
    }
  }
}

Ustawienia agenta

Ustawienie Opis Przykład
model Używany model anthropic/claude-opus-4-6
workspace Katalog roboczy ~/.openclaw/workspaces/personal
thinkingLevel Poziom myślenia high, medium, low
skills Włączone umiejętności ["gmail", "calendar"]
sandbox Konfiguracja sandbox { "mode": "non-main" }
contextWindow Okno kontekstu 200000

Struktura Workspace

~/.openclaw/
├── workspace/              # Domyślny workspace
│   ├── AGENTS.md
│   ├── SOUL.md
│   └── skills/
├── workspaces/
│   ├── personal/          # Osobisty agent
│   │   ├── AGENTS.md
│   │   ├── SOUL.md
│   │   └── USER.md
│   ├── work/              # Agent roboczy
│   │   ├── AGENTS.md
│   │   └── skills/
│   └── assistant/         # Agent asystent
│       └── AGENTS.md
└── openclaw.json          # Główna konfiguracja

Reguły routingu wiadomości

Konfiguracja routingu

{
  "routing": {
    "rules": [
      {
        "match": {
          "channel": "telegram",
          "sender": "123456789"
        },
        "agent": "personal"
      },
      {
        "match": {
          "channel": "discord",
          "guild": "987654321"
        },
        "agent": "work"
      },
      {
        "match": {
          "session": "main"
        },
        "agent": "personal"
      }
    ],
    "default": "personal"
  }
}

Szczegóły reguł routingu

Pole dopasowania Opis Przykład
channel Typ kanału telegram, discord, slack
sender ID nadawcy 123456789
guild ID serwera Discord 987654321
group ID grupy -100123456789
session ID sesji main, telegram:user:123
pattern Dopasowanie regex ^work-

Zaawansowany przykład routingu

{
  "routing": {
    "rules": [
      {
        "name": "Osobisty Telegram",
        "match": {
          "channel": "telegram",
          "sender": ["123456789", "987654321"]
        },
        "agent": "personal"
      },
      {
        "name": "Służbowy Discord",
        "match": {
          "channel": "discord",
          "guild": "111222333"
        },
        "agent": "work"
      },
      {
        "name": "Grupa robocza",
        "match": {
          "channel": "telegram",
          "group": "-100111222333"
        },
        "agent": "work"
      },
      {
        "name": "Środowisko testowe",
        "match": {
          "pattern": "^test-"
        },
        "agent": "assistant",
        "config": {
          "sandbox": { "mode": "always" }
        }
      }
    ],
    "default": "personal"
  }
}

Priorytet routingu

flowchart TB
    MSG[Nadeszła wiadomość] --> R1{Pasuje do reguły 1?}
    R1 -->|Tak| A1[Agent 1]
    R1 -->|Nie| R2{Pasuje do reguły 2?}
    R2 -->|Tak| A2[Agent 2]
    R2 -->|Nie| R3{Pasuje do reguły 3?}
    R3 -->|Tak| A3[Agent 3]
    R3 -->|Nie| D[Domyślny agent]

Routing dopasowuje sekwencyjnie — pierwsza pasująca reguła wygrywa.

Izolacja sesji

Poziomy izolacji

Poziom Opis Scenariusz
Brak izolacji Współdzielony kontekst Jeden użytkownik, jedno zastosowanie
Izolacja kanałów Niezależny kontekst wg kanału Wiele kanałów
Izolacja użytkowników Niezależny kontekst wg użytkownika Wielu użytkowników
Izolacja sesji Każda sesja niezależna Pełna izolacja
Izolacja agentów Każdy agent niezależny Wiele agentów

Konfiguracja izolacji sesji

{
  "sessions": {
    "isolation": "user",
    "persistence": true,
    "retention": {
      "maxAge": 604800000,
      "maxSessions": 100
    }
  }
}

Szczegóły konfiguracji izolacji

{
  "sessions": {
    "isolation": "user",
    "storage": {
      "type": "file",
      "path": "~/.openclaw/sessions"
    },
    "encryption": {
      "enabled": true,
      "algorithm": "aes-256-gcm"
    },
    "retention": {
      "maxAge": 604800000,
      "maxSessions": 100,
      "cleanupInterval": 86400000
    }
  }
}
Ustawienie Opis Domyślnie
isolation Poziom izolacji user
storage.type Typ przechowywania file
encryption.enabled Włączenie szyfrowania true
retention.maxAge Maksymalny czas przechowywania 7 dni
retention.maxSessions Maksymalna liczba sesji 100

Scenariusze współpracy zespołowej

Scenariusz 1: Mały zespół

{
  "agents": {
    "instances": {
      "team": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/team",
        "skills": ["github", "jira", "slack"]
      }
    }
  },
  "routing": {
    "rules": [
      {
        "match": { "channel": "slack" },
        "agent": "team"
      },
      {
        "match": { "channel": "discord" },
        "agent": "team"
      }
    ],
    "default": "team"
  }
}

Scenariusz 2: Izolacja działów

{
  "agents": {
    "instances": {
      "engineering": {
        "model": "anthropic/claude-opus-4-6",
        "workspace": "~/.openclaw/workspaces/engineering",
        "skills": ["github", "jira", "pagerduty"],
        "sandbox": { "mode": "off" }
      },
      "marketing": {
        "model": "anthropic/claude-sonnet-4",
        "workspace": "~/.openclaw/workspaces/marketing",
        "skills": ["mailchimp", "analytics"],
        "sandbox": { "mode": "non-main" }
      },
      "support": {
        "model": "anthropic/claude-haiku-3.5",
        "workspace": "~/.openclaw/workspaces/support",
        "skills": ["zendesk", "intercom"],
        "sandbox": { "mode": "always" }
      }
    }
  },
  "routing": {
    "rules": [
      {
        "name": "Discord inżynierii",
        "match": { "channel": "discord", "guild": "111111111" },
        "agent": "engineering"
      },
      {
        "name": "Slack marketingu",
        "match": { "channel": "slack", "team": "T22222222" },
        "agent": "marketing"
      },
      {
        "name": "Telegram wsparcia",
        "match": { "channel": "telegram", "group": "-100333333333" },
        "agent": "support"
      }
    ],
    "default": "support"
  }
}

Scenariusz 3: SaaS wielodostępowy

{
  "agents": {
    "dynamic": true,
    "template": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspaces/tenants/{{tenantId}}",
      "skills": ["base"],
      "sandbox": { "mode": "always" }
    },
    "limits": {
      "maxAgents": 100,
      "maxSessionsPerAgent": 50,
      "maxTokensPerMonth": 1000000
    }
  },
  "routing": {
    "rules": [
      {
        "name": "Routing tenantów",
        "match": { "header": "X-Tenant-Id" },
        "agent": "tenant_{{tenantId}}",
        "createIfNotExists": true
      }
    ]
  }
}

Uprawnienia i bezpieczeństwo

Kontrola uprawnień agenta

{
  "agents": {
    "instances": {
      "trusted": {
        "model": "anthropic/claude-opus-4-6",
        "sandbox": { "mode": "off" },
        "permissions": {
          "filesystem": { "read": true, "write": true },
          "network": { "outbound": true },
          "process": { "execute": true }
        }
      },
      "restricted": {
        "model": "anthropic/claude-haiku-3.5",
        "sandbox": { "mode": "always" },
        "permissions": {
          "filesystem": { 
            "read": ["~/allowed/"],
            "write": ["~/allowed/"]
          },
          "network": { 
            "outbound": ["api.example.com"]
          },
          "process": { "execute": false }
        }
      }
    }
  }
}

Tryb sandbox

Tryb Opis Scenariusz
off Brak sandbox Zaufany agent
non-main Sandbox dla sesji innych niż main Współdzielenie zespołowe
always Zawsze sandbox Niezaufane środowisko

Konfiguracja sandbox

{
  "sandbox": {
    "mode": "non-main",
    "container": {
      "image": "openclaw/sandbox:latest",
      "timeout": 30000,
      "memory": "512m",
      "cpu": "0.5"
    },
    "allowlist": ["read", "write", "edit", "bash"],
    "denylist": ["browser", "canvas", "nodes"],
    "networkPolicy": {
      "allow": ["api.example.com"],
      "deny": ["*"]
    }
  }
}

Monitoring i zarządzanie

Monitoring statusu agentów

# Lista wszystkich instancji agentów
openclaw agents list

# Przykładowy wynik:
# Name        Model                  Sessions  Status   Last Active
# personal    claude-opus-4-6        3         active   2 min temu
# work        claude-sonnet-4        5         active   5 min temu
# assistant   claude-haiku-3.5       2         idle     1 godz. temu

# Szczegóły agenta
openclaw agents show personal

# Podgląd reguł routingu
openclaw routing list

Zarządzanie sesjami

# Lista wszystkich sesji
openclaw sessions list --agent personal

# Przykładowy wynik:
# Session ID              Channel    Sender      Created      Messages
# telegram:user:123       telegram   123456789   2026-02-26   42
# main                    cli        -           2026-02-25   128

# Szczegóły sesji
openclaw sessions show telegram:user:123

# Eksport sesji
openclaw sessions export telegram:user:123 --format json

# Usunięcie sesji
openclaw sessions delete telegram:user:123

Statystyki zużycia

# Zużycie wg agenta
openclaw usage --by-agent

# Przykładowy wynik:
# Agent       Tokens In    Tokens Out   Cost      Requests
# personal    125,000     45,000      $2.10     128
# work        89,000      32,000      $1.25     95
# assistant   15,000      8,000       $0.15     42

# Statystyki wg zakresu czasu
openclaw usage --by-agent --from 2026-02-01 --to 2026-02-28

Najlepsze praktyki

1. Rozsądny podział agentów

Wymiar podziału Opis Przykład
Zastosowanie Podział wg funkcji coding, research, assistant
Projekt Podział wg projektu project-alpha, project-beta
Zespół Podział wg zespołu engineering, marketing
Model Podział wg modelu opus, sonnet, haiku

2. Dziedziczenie konfiguracji

{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-sonnet-4",
      "workspace": "~/.openclaw/workspace",
      "thinkingLevel": "medium",
      "sandbox": { "mode": "non-main" }
    },
    "instances": {
      "opus": {
        "model": "anthropic/claude-opus-4-6",
        "thinkingLevel": "high"
        // Dziedziczy workspace i sandbox z defaults
      },
      "haiku": {
        "model": "anthropic/claude-haiku-3.5",
        "thinkingLevel": "minimal"
        // Dziedziczy pozostałe ustawienia z defaults
      }
    }
  }
}

3. Minimalizacja uprawnień

{
  "agents": {
    "instances": {
      "restricted": {
        "model": "anthropic/claude-haiku-3.5",
        "sandbox": { "mode": "always" },
        "permissions": {
          "filesystem": {
            "read": ["~/allowed/read"],
            "write": ["~/allowed/write"]
          },
          "network": {
            "outbound": []
          },
          "process": {
            "execute": false
          }
        }
      }
    }
  }
}

4. Monitoring i alerty

{
  "monitoring": {
    "alerts": [
      {
        "condition": "usage > 1000000",
        "action": "notify"
      },
      {
        "condition": "error_rate > 0.1",
        "action": "notify"
      },
      {
        "condition": "response_time > 10000",
        "action": "notify"
      }
    ],
    "webhook": "https://your-monitoring.com/webhook"
  }
}

Rozwiązywanie problemów

Routing nie działa

# Podgląd bieżących reguł routingu
openclaw routing list

# Test routingu
openclaw routing test --channel telegram --sender 123456789

# Przykładowy wynik:
# Matched Rule: Osobisty Telegram
# Target Agent: personal
# Route Path: default -> rule 1 -> personal

Problem z izolacją sesji

# Sprawdzenie konfiguracji izolacji sesji
openclaw config get sessions.isolation

# Sprawdzenie listy sesji
openclaw sessions list --all

# Reset izolacji sesji
openclaw sessions reset --agent personal

Problem z uprawnieniami

# Sprawdzenie konfiguracji uprawnień
openclaw agents permissions show personal

# Test uprawnień
openclaw agents test-permission personal --action filesystem.read --path ~/test

# Przykładowy wynik:
# Permission: filesystem.read
# Path: ~/test
# Result: ALLOWED

Podsumowanie

Architektura wielu agentów to zaawansowana funkcja OpenClaw, zapewniająca potężne wsparcie dla scenariuszy zespołowych i enterprise:

  • Elastyczny routing: przypisywanie różnych agentów wg kanału, użytkownika, projektu
  • Izolacja sesji: ochrona prywatności, zapobieganie mieszaniu kontekstów
  • Kontrola uprawnień: szczegółowe zarządzanie uprawnieniami
  • Optymalizacja kosztów: różne modele do różnych zastosowań
  • Skalowalność: obsługa dynamicznego tworzenia i zarządzania agentami

Podsumowanie artykułu:

  • Zrozumiałeś wartość i scenariusze architektury wielu agentów
  • Opanowałeś konfigurację agentów i reguły routingu wiadomości
  • Nauczyłeś się konfigurować izolację sesji
  • Poznałeś najlepsze praktyki współpracy zespołowej
  • Opanowałeś kontrolę uprawnień i monitoring

Historia zmian:

  • 2026-02-26: Pierwsza wersja, na podstawie OpenClaw v2026.2

Nawigacja po serii: