agentDir) i historię sesji opartą na SQLite, a także wiele kont kanałów (np. dwa numery WhatsApp). Wiadomości przychodzące są kierowane do właściwego agenta za pomocą powiązań.
Agent obejmuje pełny zakres przypisany do persony: pliki obszaru roboczego, profile uwierzytelniania, rejestr modeli i magazyn sesji. Powiązanie przypisuje konto kanału (obszar roboczy Slack, numer WhatsApp itp.) do jednego z tych agentów.
Czym jest jeden agent
Każdy agent ma własne:- Obszar roboczy: pliki,
AGENTS.md/SOUL.md/USER.md, lokalne notatki, reguły persony. - Katalog stanu (
agentDir): profile uwierzytelniania, rejestr modeli, konfiguracja agenta. - Magazyn sesji: historia czatów i stan routingu w
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
sessions_history to bezpieczniejszy sposób przywoływania informacji między sesjami: zwraca ograniczony, zredagowany widok, a nie pełny zrzut surowego transkryptu. Usuwa sygnatury bloków rozumowania, szczegóły danych wynikowych narzędzi, strukturę pomocniczą <relevant-memories>, znaczniki XML wywołań narzędzi (<tool_call>, <function_call> oraz ich formy mnogie/obniżonej wersji) i kod XML wywołań narzędzi MiniMax, a następnie skraca dane wyjściowe i ogranicza ich rozmiar w bajtach.~/.openclaw/skills, a następnie filtrowane według obowiązującej listy dozwolonych Skills agenta. Użyj agents.defaults.skills jako współdzielonej konfiguracji bazowej, a agents.list[].skills jako zamiennika dla konkretnego agenta (jawne wpisy zastępują wartości domyślne, a nie są z nimi scalane). Zobacz Skills: przypisane do agenta a współdzielone oraz Skills: listy dozwolone dla agentów.
Magazyn należący do Pluginu podlega konfiguracji tego Pluginu; dodanie drugiego agenta
nie powoduje automatycznego rozdzielenia wszystkich globalnych magazynów Pluginów. Na przykład należy skonfigurować
sejfy Memory Wiki dla poszczególnych agentów,
gdy persony nie mogą współdzielić skompilowanej wiedzy wiki.
Uwaga dotycząca obszaru roboczego: obszar roboczy każdego agenta jest domyślnym katalogiem cwd, a nie ścisłą piaskownicą. Ścieżki względne są rozwiązywane wewnątrz obszaru roboczego, ale ścieżki bezwzględne mogą uzyskiwać dostęp do innych lokalizacji hosta, jeśli nie włączono izolacji. Zobacz Izolacja.
Ścieżki
Tryb jednego agenta (domyślny)
Jeśli niczego nie skonfigurujesz, OpenClaw uruchamia jednego agenta:agentIdma domyślnie wartośćmain.- Kluczem sesji jest
agent:main:<mainKey>(domyślną wartościąmainKeyjestmain). - Domyślnym obszarem roboczym jest
~/.openclaw/workspace(lubworkspace-<profile>, gdyOPENCLAW_PROFILEma wartość inną niżdefault). - Domyślnym katalogiem stanu jest
~/.openclaw/agents/main/agent.
Narzędzie pomocnicze agenta
Dodaj nowego izolowanego agenta:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (można powtarzać), --non-interactive (wymaga --workspace).
Dodaj bindings, aby kierować wiadomości przychodzące (kreator zaproponuje wykonanie tej czynności), a następnie zweryfikuj konfigurację:
Szybki start
1
Utwórz obszar roboczy każdego agenta
SOUL.md, AGENTS.md i opcjonalnym USER.md, a także dedykowany agentDir oraz magazyn sesji w ~/.openclaw/agents/<agentId>.2
Utwórz konta kanałów
Utwórz po jednym koncie dla każdego agenta w preferowanych kanałach:Zobacz przewodniki po kanałach: Discord, Telegram, WhatsApp.
- Discord: jeden bot na agenta, włącz Message Content Intent i skopiuj każdy token.
- Telegram: jeden bot na agenta utworzony przez BotFather; skopiuj każdy token.
- WhatsApp: połącz każdy numer telefonu z odpowiednim kontem.
3
Dodaj agentów, konta i powiązania
Dodaj agentów w
agents.list, konta kanałów w channels.<channel>.accounts i połącz je za pomocą bindings (przykłady poniżej).4
Uruchom ponownie i zweryfikuj
Wielu agentów, wiele person
Każdy skonfigurowanyagentId stanowi odrębną granicę persony dla podstawowego stanu agenta:
- Różne konta w poszczególnych kanałach (według
accountId). - Różne osobowości (pliki
AGENTS.md/SOUL.mdposzczególnych agentów). - Oddzielne uwierzytelnianie i sesje, przy czym dostęp między agentami jest włączany wyłącznie za pomocą jawnych funkcji lub konfiguracji Pluginu.
Sejfy Memory Wiki dla poszczególnych agentów
Memory Wiki domyślnie używa jednego globalnego sejfu. Aby skompilowana wiedza agenta pomocy technicznej była oddzielona od wiedzy agenta marketingowego, ustawplugins.entries.memory-wiki.config.vault.scope na agent:
~/.openclaw/wiki/support i
~/.openclaw/wiki/marketing. Operacje CLI i Gateway o zakresie agenta wymagają
jawnego wskazania agenta, gdy skonfigurowano wielu agentów. Szczegółowe informacje o
filtrowaniu mostka, migracji i granicach zaufania zawiera sekcja
Sejfy Memory Wiki dla poszczególnych agentów.
Wyszukiwanie pamięci QMD między agentami
Aby umożliwić jednemu agentowi przeszukiwanie transkryptów sesji QMD innego agenta, dodaj dodatkowe kolekcje wagents.list[].memorySearch.qmd.extraCollections. Użyj agents.defaults.memorySearch.qmd.extraCollections, gdy każdy agent powinien współdzielić te same kolekcje.
name pozostaje jawnie określona, gdy ścieżka znajduje się poza obszarem roboczym agenta. Ścieżki wewnątrz obszaru roboczego zachowują zakres agenta, dzięki czemu każdy agent ma własny zestaw przeszukiwanych transkryptów.
Jeden numer WhatsApp, wiele osób (podział wiadomości prywatnych)
Kieruj wiadomości prywatne WhatsApp od różnych osób do różnych agentów na jednym koncie WhatsApp, dopasowując nadawcę E.164 (+15551234567) za pomocą peer.kind: "direct". Odpowiedzi nadal pochodzą z tego samego numeru WhatsApp — nie ma oddzielnej tożsamości nadawcy dla każdego agenta.
Czaty bezpośrednie są domyślnie scalane z kluczem głównej sesji agenta, dlatego pełna izolacja wymaga jednego agenta na osobę.
Reguły routingu
Powiązania są deterministyczne, a najbardziej szczegółowe dopasowanie ma pierwszeństwo. Pełną kolejność poziomów (dokładny uczestnik, uczestnik nadrzędny, symbol wieloznaczny uczestnika, serwer+role, serwer, zespół, konto, kanał, domyślny agent) opisano w sekcji Routing kanałów. Warto podkreślić kilka reguł:- Jeśli na tym samym poziomie pasuje wiele powiązań, pierwszeństwo ma pierwsze z nich w kolejności konfiguracji.
- Jeśli powiązanie określa wiele pól dopasowania (na przykład
peer+guildId), wszystkie wskazane pola muszą być zgodne (semantykaAND). - Powiązanie bez
accountIdpasuje wyłącznie do konta domyślnego, a nie do każdego konta. UżyjaccountId: "*"jako rezerwowego dopasowania dla całego kanału lubaccountId: "<name>"dla jednego konta. Ponowne dodanie tego samego powiązania z jawnym identyfikatorem konta aktualizuje istniejące powiązanie obejmujące tylko kanał, zamiast je duplikować.
Wiele kont / numerów telefonów
Kanały obsługujące wiele kont (np. WhatsApp) używająaccountId do identyfikowania każdego logowania. Każdy accountId kieruje ruch do własnego agenta, dzięki czemu jeden serwer może obsługiwać wiele numerów telefonów bez mieszania sesji.
Ustaw channels.<channel>.defaultAccount, aby wybrać konto używane w przypadku pominięcia accountId. Jeśli ta wartość nie jest ustawiona, OpenClaw używa default, o ile jest dostępne, a w przeciwnym razie pierwszego identyfikatora skonfigurowanego konta (po posortowaniu).
Kanały obsługujące wiele kont: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.
Pojęcia
agentId: jeden „mózg” (obszar roboczy, uwierzytelnianie osobne dla każdego agenta, magazyn sesji osobny dla każdego agenta).accountId: jedna instancja konta kanału (np. konto WhatsApppersonalw odróżnieniu odbiz).binding: kieruje wiadomości przychodzące doagentIdwedług(channel, accountId, peer)oraz opcjonalnie identyfikatorów gildii/zespołu.- Czaty bezpośrednie są łączone w
agent:<agentId>:<mainKey>(„główną” sesję danego agenta; zob.session.mainKey).
Przykłady dla platform
Boty Discord dla poszczególnych agentów
Boty Discord dla poszczególnych agentów
Każde konto bota Discord jest mapowane na unikatowy
accountId. Powiąż każde konto z agentem i utrzymuj osobne listy dozwolonych dla każdego bota.- Zaproś każdego bota do gildii i włącz Message Content Intent.
- Tokeny znajdują się w
channels.discord.accounts.<id>.token(konto domyślne może używaćDISCORD_BOT_TOKEN).
Boty Telegram dla poszczególnych agentów
Boty Telegram dla poszczególnych agentów
- Utwórz po jednym bocie dla każdego agenta za pomocą BotFather i skopiuj każdy token.
- Tokeny znajdują się w
channels.telegram.accounts.<id>.botToken(konto domyślne może używaćTELEGRAM_BOT_TOKEN). - W przypadku wielu botów w tej samej grupie Telegram zaproś każdego bota i oznacz tego, który powinien odpowiedzieć.
- Wyłącz BotFather Privacy Mode dla każdego bota grupowego (
/setprivacy-> Disable), a następnie usuń i ponownie dodaj bota, aby Telegram zastosował ustawienie. - Zezwalaj na grupy za pomocą
channels.telegram.groupslub używajgroupPolicy: "open"wyłącznie we wdrożeniach z zaufanymi grupami. - Umieść identyfikatory użytkowników będących nadawcami w
groupAllowFrom. Identyfikatory grup i supergrup należy umieszczać wchannels.telegram.groups, a nie wgroupAllowFrom. - Powiąż według
accountId, aby każdy bot kierował wiadomości do własnego agenta.
Numery WhatsApp dla poszczególnych agentów
Numery WhatsApp dla poszczególnych agentów
Połącz każde konto przed uruchomieniem Gateway:
~/.openclaw/openclaw.json (JSON5):Typowe wzorce
- WhatsApp na co dzień i Telegram do intensywnej pracy
- Ten sam kanał, jeden element równorzędny kierowany do Opus
- Agent rodzinny powiązany z grupą WhatsApp
Rozdziel według kanału: kieruj WhatsApp do szybkiego agenta codziennego użytku, a Telegram do agenta Opus.W tych przykładach użyto
accountId: "*", dzięki czemu powiązania będą nadal działać po późniejszym dodaniu kont. Aby skierować pojedynczą wiadomość bezpośrednią lub grupę do Opus, pozostawiając resztę na czacie, dodaj powiązanie match.peer dla tego elementu równorzędnego — dopasowania elementów równorzędnych zawsze mają pierwszeństwo przed regułami obejmującymi cały kanał.Konfiguracja piaskownicy i narzędzi dla poszczególnych agentów
Każdy agent może mieć własną piaskownicę i ograniczenia narzędzi:setupCommand znajduje się w sandbox.docker i jest uruchamiane jednokrotnie podczas tworzenia kontenera. Nadpisania sandbox.docker.* dla poszczególnych agentów są ignorowane, gdy wynikowy zakres to "shared".- Izolację zabezpieczeń: ograniczenie narzędzi dla niezaufanych agentów.
- Kontrolę zasobów: uruchamianie określonych agentów w piaskownicy przy zachowaniu pozostałych na hoście.
- Elastyczne polityki: różne uprawnienia dla poszczególnych agentów.
tools.elevated ma zarówno bramę globalną (tools.elevated.enabled/allowFrom), jak i bramę dla poszczególnych agentów (agents.list[].tools.elevated.enabled/allowFrom). Brama dla agenta może jedynie dodatkowo ograniczyć bramę globalną — obie muszą zezwalać nadawcy na uruchamianie poleceń z podwyższonymi uprawnieniami. Do kierowania w grupach używaj agents.list[].groupChat.mentionPatterns, aby @wzmianki były jednoznacznie mapowane na właściwego agenta.Powiązane
- Agenci ACP — uruchamianie zewnętrznych środowisk programistycznych
- Routing kanałów — sposób kierowania wiadomości do agentów
- Obecność — obecność i dostępność agentów
- Sesja — izolacja i routing sesji
- Podagenci — uruchamianie agentów w tle