Мульти-агент
Маршрутизация нескольких агентов
Цель: несколько изолированных агентов (отдельное рабочее пространство + agentDir + сессии), а также несколько учётных записей каналов (например, два WhatsApp) в одном работающем Gateway. Входящие сообщения маршрутизируются к агенту через привязки.
Что такое «один агент»?
Агент — это полностью автономный «мозг» со своим:
- Рабочим пространством (файлы, AGENTS.md/SOUL.md/USER.md, локальные заметки, правила персоны).
- Директорией состояния (
agentDir) для профилей аутентификации, реестра моделей и конфигурации на агента. - Хранилищем сессий (история чатов + состояние маршрутизации) в
~/.openclaw/agents//sessions.
Профили аутентификации на каждого агента. Каждый агент читает из своего:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json
Основные учётные данные агента не передаются автоматически. Никогда не используйте один agentDir для нескольких агентов (это вызывает конфликты аутентификации/сессий). Если вы хотите поделиться учётными данными, скопируйте auth-profiles.json в agentDir другого агента. Навыки настраиваются на каждого агента через папку skills/ каждого рабочего пространства, при этом общие навыки доступны из ~/.openclaw/skills. См. Навыки: на агента vs общие. Gateway может размещать одного агента (по умолчанию) или многих агентов параллельно. Примечание о рабочем пространстве: рабочее пространство каждого агента — это текущая рабочая директория по умолчанию, а не жёсткая песочница. Относительные пути разрешаются внутри рабочего пространства, но абсолютные пути могут достигать других мест на хосте, если не включена песочница. См. Песочница.
Пути (быстрая карта)
- Конфиг:
~/.openclaw/openclaw.json(илиOPENCLAW_CONFIG_PATH) - Директория состояния:
~/.openclaw(илиOPENCLAW_STATE_DIR) - Рабочее пространство:
~/.openclaw/workspace(или~/.openclaw/workspace-) - Директория агента:
~/.openclaw/agents//agent(илиagents.list[].agentDir) - Сессии:
~/.openclaw/agents//sessions
Режим одного агента (по умолчанию)
Если вы ничего не делаете, OpenClaw запускает одного агента:
agentIdпо умолчанию —main.- Сессии ключуются как
agent:main:. - Рабочее пространство по умолчанию:
~/.openclaw/workspace(или~/.openclaw/workspace-при установкеOPENCLAW_PROFILE). - Состояние по умолчанию:
~/.openclaw/agents/main/agent.
Помощник по агентам
Используйте мастер агентов, чтобы добавить нового изолированного агента:
openclaw agents add work
Затем добавьте bindings (или позвольте мастеру сделать это) для маршрутизации входящих сообщений. Проверьте:
openclaw agents list --bindings
Быстрый старт
Шаг 1: Создайте рабочее пространство для каждого агента
Используйте мастер или создайте рабочие пространства вручную:
openclaw agents add coding
openclaw agents add social
Каждый агент получает своё рабочее пространство с SOUL.md, AGENTS.md и опционально USER.md, а также выделенный agentDir и хранилище сессий в ~/.openclaw/agents/.
Шаг 2: Создайте учётные записи каналов
Создайте по одной учётной записи на каждого агента на предпочитаемых каналах:
- Discord: один бот на агента, включите Message Content Intent, скопируйте каждый токен.
- Telegram: один бот на агента через BotFather, скопируйте каждый токен.
- WhatsApp: привяжите каждый номер телефона к каждой учётной записи.
openclaw channels login --channel whatsapp --account work
См. руководства по каналам: Discord, Telegram, WhatsApp.
Шаг 3: Добавьте агентов, учётные записи и привязки
Добавьте агентов в agents.list, учётные записи каналов в channels..accounts и свяжите их с помощью bindings (примеры ниже).
Шаг 4: Перезапустите и проверьте
openclaw gateway restart
openclaw agents list --bindings
openclaw channels status --probe
Несколько агентов = несколько людей, несколько личностей
При использовании нескольких агентов каждый agentId становится полностью изолированной персоной:
- Разные номера телефонов/учётные записи (на канал
accountId). - Разные личности (файлы рабочего пространства на агента, такие как
AGENTS.mdиSOUL.md). - Отдельная аутентификация + сессии (без перекрёстных помех, если явно не включено).
Это позволяет нескольким людям использовать один сервер Gateway, сохраняя свои ИИ-«мозги» и данные изолированными.
Один номер WhatsApp, несколько людей (разделение ЛС)
Вы можете направлять разные ЛС WhatsApp разным агентам, оставаясь на одной учётной записи WhatsApp. Сопоставляйте по E.164 отправителя (например, +15551234567) с peer.kind: "direct". Ответы всё равно будут приходить с того же номера WhatsApp (без идентичности отправителя на агента). Важная деталь: прямые чаты сводятся к основному ключу сессии агента, поэтому для истинной изоляции требуется один агент на человека. Пример:
{
agents: {
list: [
{ id: "alex", workspace: "~/.openclaw/workspace-alex" },
{ id: "mia", workspace: "~/.openclaw/workspace-mia" },
],
},
bindings: [
{
agentId: "alex",
match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230001" } },
},
{
agentId: "mia",
match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230002" } },
},
],
channels: {
whatsapp: {
dmPolicy: "allowlist",
allowFrom: ["+15551230001", "+15551230002"],
},
},
}
Примечания:
- Контроль доступа к ЛС является глобальным на учётную запись WhatsApp (спаривание/белый список), а не на агента.
- Для общих групп привяжите группу к одному агенту или используйте Группы трансляции.
Правила маршрутизации (как сообщения выбирают агента)
Привязки детерминированы, и побеждает наиболее специфичная:
- Совпадение
peer(точный id ЛС/группы/канала) - Совпадение
parentPeer(наследование ветки) guildId + roles(маршрутизация по ролям Discord)guildId(Discord)teamId(Slack)- Совпадение
accountIdдля канала - Совпадение на уровне канала (
accountId: "*") - Возврат к агенту по умолчанию (
agents.list[].default, иначе первая запись в списке, по умолчанию:main)
Если несколько привязок совпадают на одном уровне, побеждает первая в порядке конфигурации. Если привязка задаёт несколько полей совпадения (например, peer + guildId), все указанные поля обязательны (семантика И). Важная деталь области действия учётной записи:
- Привязка, опускающая
accountId, соответствует только учётной записи по умолчанию. - Используйте
accountId: "*"для глобального возврата на канале для всех учётных записей. - Если позже вы добавите ту же привязку для того же агента с явным id учётной записи, OpenClaw обновит существующую привязку только для канала до области действия учётной записи вместо её дублирования.
Несколько учётных записей / номеров телефона
Каналы, поддерживающие несколько учётных записей (например, WhatsApp), используют accountId для идентификации каждого входа. Каждый accountId может быть направлен к разному агенту, поэтому один сервер может размещать несколько номеров телефона без смешивания сессий. Если вы хотите, чтобы учётная запись по умолчанию на канале использовалась, когда accountId опущен, установите channels..defaultAccount (опционально). Если не установлено, OpenClaw возвращается к default, если он присутствует, иначе к первой настроенной учётной записи (отсортированной). Распространённые каналы, под держивающие эту схему, включают:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkbluebubbles,zalo,zalouser,nostr,feishu
Концепции
agentId: один «мозг» (рабочее пространство, аутентификация на агента, хранилище сессий на агента).accountId: один экземпляр учётной записи канала (например, учётная запись WhatsApp"personal"vs"biz").binding: направляет входящие сообщения кagentIdпо(channel, accountId, peer)и опционально guild/team id.- Прямые чаты сводятся к
agent::(«основной» на агента;session.mainKey).