Назад

10. OpenClaw: маршрутизация нескольких Agent и изоляция сессий

В статье подробно рассматривается мульти-Agent архитектура OpenClaw: настройка нескольких экземпляров Agent, правила маршрутизации сообщений, стратегии изоляции сессий и лучшие практики для командной работы. Поможет построить корпоративную систему ИИ-ассистентов.

Для OpenClaw v2026.2 | Статья подходит для командной работы или пользователей, которым нужна изоляция контекста.

TL;DR: Конфигурация нескольких Agent: "agents": {"instances": {"personal": {...}, "work": {...}}}. Правила маршрутизации: "routing": {"rules": [{"match": {"channel": "telegram"}, "agent": "personal"}]}. Изоляция сессий: "sessions": {"isolation": "user"}. Режим песочницы: "sandbox": {"mode": "non-main"}. Подходит для сценариев с несколькими пользователями, проектами и назначениями.

Зачем нужны несколько Agent?

Ограничения одного Agent

Сценарий Проблема одного Agent Решение с несколькими Agent
Несколько пользователей Путаница в контексте, вопросы приватности Отдельный Agent на пользователя
Несколько проектов Информация проектов смешивается Отдельный Agent на проект
Разные назначения Один Agent на все роли Специализированные Agent
Несколько команд Сложно контролировать права Изоляция Agent по командам
Контроль затрат Невозможно разделить потребление Отдельный учёт по моделям

Сценарии использования нескольких Agent

flowchart TB
    subgraph Users["Пользователи"]
        U1[Пользователь A]
        U2[Пользователь B]
        U3[Команда X]
        U4[Команда Y]
    end
    
    subgraph Router["Маршрутизация сообщений"]
        R[Правила маршрутизации]
    end
    
    subgraph Agents["Экземпляры Agent"]
        A1[Личный Agent A]
        A2[Личный Agent B]
        A3[Командный Agent X]
        A4[Командный Agent Y]
    end
    
    subgraph Models["Модели"]
        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

Конфигурация нескольких Agent

Базовая структура

{
  "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"
      }
    }
  }
}

Параметры конфигурации Agent

Параметр Описание Пример
model Используемая модель anthropic/claude-opus-4-6
workspace Рабочая директория ~/.openclaw/workspaces/personal
thinkingLevel Уровень рассуждений high, medium, low
skills Включённые навыки ["gmail", "calendar"]
sandbox Настройки песочницы { "mode": "non-main" }
contextWindow Окно контекста 200000

Структура Workspace

~/.openclaw/
├── workspace/              # Рабочая директория по умолчанию
│   ├── AGENTS.md
│   ├── SOUL.md
│   └── skills/
├── workspaces/
│   ├── personal/          # Личный Agent
│   │   ├── AGENTS.md
│   │   ├── SOUL.md
│   │   └── USER.md
│   ├── work/              # Рабочий Agent
│   │   ├── AGENTS.md
│   │   └── skills/
│   └── assistant/         # Agent-ассистент
│       └── AGENTS.md
└── openclaw.json          # Основная конфигурация

Правила маршрутизации сообщений

Конфигурация маршрутизации

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

Описание полей маршрутизации

Поле совпадения Описание Пример
channel Тип канала telegram, discord, slack
sender ID отправителя 123456789
guild ID сервера Discord 987654321
group ID группы -100123456789
session ID сессии main, telegram:user:123
pattern Совпадение по регулярному выражению ^work-

Пример сложной маршрутизации

{
  "routing": {
    "rules": [
      {
        "name": "Личный Telegram",
        "match": {
          "channel": "telegram",
          "sender": ["123456789", "987654321"]
        },
        "agent": "personal"
      },
      {
        "name": "Рабочий Discord",
        "match": {
          "channel": "discord",
          "guild": "111222333"
        },
        "agent": "work"
      },
      {
        "name": "Рабочая группа",
        "match": {
          "channel": "telegram",
          "group": "-100111222333"
        },
        "agent": "work"
      },
      {
        "name": "Тестовая среда",
        "match": {
          "pattern": "^test-"
        },
        "agent": "assistant",
        "config": {
          "sandbox": { "mode": "always" }
        }
      }
    ],
    "default": "personal"
  }
}

Приоритет правил маршрутизации

flowchart TB
    MSG[Сообщение получено] --> R1{Совпадение с правилом 1?}
    R1 -->|Да| A1[Agent 1]
    R1 -->|Нет| R2{Совпадение с правилом 2?}
    R2 -->|Да| A2[Agent 2]
    R2 -->|Нет| R3{Совпадение с правилом 3?}
    R3 -->|Да| A3[Agent 3]
    R3 -->|Нет| D[Agent по умолчанию]

Правила проверяются по порядку, применяется первое совпавшее.

Изоляция сессий

Уровни изоляции

Уровень Описание Сценарий использования
Без изоляции Общий контекст Один пользователь, одно назначение
По каналу Отдельный контекст по каналу Несколько каналов подключения
По пользователю Отдельный контекст по пользователю Совместное использование несколькими пользователями
По сессии Отдельный контекст для каждой сессии Полная изоляция
По Agent Отдельный контекст для каждого Agent Развёртывание нескольких Agent

Настройка изоляции сессий

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

Описание параметров изоляции

{
  "sessions": {
    "isolation": "user",
    "storage": {
      "type": "file",
      "path": "~/.openclaw/sessions"
    },
    "encryption": {
      "enabled": true,
      "algorithm": "aes-256-gcm"
    },
    "retention": {
      "maxAge": 604800000,
      "maxSessions": 100,
      "cleanupInterval": 86400000
    }
  }
}
Параметр Описание Значение по умолчанию
isolation Уровень изоляции user
storage.type Тип хранилища file
encryption.enabled Включить шифрование true
retention.maxAge Максимальное время хранения 7 дней
retention.maxSessions Максимальное число сессий 100

Сценарии командной работы

Сценарий 1: Общий доступ для небольшой команды

{
  "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"
  }
}

Сценарий 2: Изоляция по отделам

{
  "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": "Engineering Discord",
        "match": { "channel": "discord", "guild": "111111111" },
        "agent": "engineering"
      },
      {
        "name": "Marketing Slack",
        "match": { "channel": "slack", "team": "T22222222" },
        "agent": "marketing"
      },
      {
        "name": "Support Telegram",
        "match": { "channel": "telegram", "group": "-100333333333" },
        "agent": "support"
      }
    ],
    "default": "support"
  }
}

Сценарий 3: Мультитенантный SaaS

{
  "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": "Tenant Routing",
        "match": { "header": "X-Tenant-Id" },
        "agent": "tenant_{{tenantId}}",
        "createIfNotExists": true
      }
    ]
  }
}

Права и безопасность

Управление правами Agent

{
  "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 }
        }
      }
    }
  }
}

Режимы песочницы

Режим Описание Подходящий сценарий
off Без песочницы Доверенный Agent
non-main Песочница для неосновных сессий Общий доступ команды
always Всегда в песочнице Недоверенная среда

Конфигурация песочницы

{
  "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": ["*"]
    }
  }
}

Мониторинг и управление

Мониторинг состояния Agent

# Список всех экземпляров Agent
openclaw agents list

# Пример вывода:
# Name        Model                  Sessions  Status   Last Active
# personal    claude-opus-4-6        3         active   2 min ago
# work        claude-sonnet-4        5         active   5 min ago
# assistant   claude-haiku-3.5       2         idle     1 hour ago

# Подробности Agent
openclaw agents show personal

# Правила маршрутизации
openclaw routing list

Управление сессиями

# Список всех сессий
openclaw sessions list --agent personal

# Пример вывода:
# Session ID              Channel    Sender      Created      Messages
# telegram:user:123       telegram   123456789   2026-02-26   42
# main                    cli        -           2026-02-25   128

# Подробности сессии
openclaw sessions show telegram:user:123

# Экспорт сессии
openclaw sessions export telegram:user:123 --format json

# Удаление сессии
openclaw sessions delete telegram:user:123

Статистика использования

# Использование по Agent
openclaw usage --by-agent

# Пример вывода:
# 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

# Статистика за период
openclaw usage --by-agent --from 2026-02-01 --to 2026-02-28

Лучшие практики

1. Разумное разделение Agent

Критерий Описание Пример
Назначение По функциональному назначению coding, research, assistant
Проект По проекту project-alpha, project-beta
Команда По команде engineering, marketing
Модель По модели opus, sonnet, haiku

2. Наследование конфигурации

{
  "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"
        // Наследует workspace и sandbox из defaults
      },
      "haiku": {
        "model": "anthropic/claude-haiku-3.5",
        "thinkingLevel": "minimal"
        // Наследует остальные параметры из defaults
      }
    }
  }
}

3. Минимальные права

{
  "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": {
    "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"
  }
}

Диагностика проблем

Маршрутизация не срабатывает

# Текущие правила маршрутизации
openclaw routing list

# Тест маршрутизации
openclaw routing test --channel telegram --sender 123456789

# Пример вывода:
# Matched Rule: Личный Telegram
# Target Agent: personal
# Route Path: default -> rule 1 -> personal

Проблемы с изоляцией сессий

# Проверка настроек изоляции сессий
openclaw config get sessions.isolation

# Список сессий
openclaw sessions list --all

# Сброс изоляции сессий
openclaw sessions reset --agent personal

Проблемы с правами

# Проверка прав
openclaw agents permissions show personal

# Тест прав
openclaw agents test-permission personal --action filesystem.read --path ~/test

# Пример вывода:
# Permission: filesystem.read
# Path: ~/test
# Result: ALLOWED

Итоги

Архитектура с несколькими Agent — продвинутая возможность OpenClaw для команд и корпоративных сценариев:

  • Гибкая маршрутизация: назначение разных Agent по каналу, пользователю, проекту
  • Изоляция сессий: защита приватности и разделение контекста
  • Управление правами: детальный контроль доступа
  • Оптимизация затрат: выбор модели под задачу
  • Масштабируемость: динамическое создание и управление Agent

Итоги статьи:

  • Понимание ценности и сценариев мульти-Agent архитектуры
  • Настройка Agent и правил маршрутизации сообщений
  • Конфигурация изоляции сессий
  • Лучшие практики для командной работы
  • Управление правами и мониторинг

История обновлений:

  • 2026-02-26: Первая версия, на основе OpenClaw v2026.2

Навигация по серии: