Configuration
Grupy rozgłoszeniowe
Przegląd
Grupy rozgłoszeniowe uruchamiają wiele agentów dla tej samej wiadomości przychodzącej. Każdy agent przetwarza wiadomość we własnej odizolowanej sesji i publikuje własną odpowiedź, dzięki czemu jeden numer WhatsApp może obsługiwać zespół wyspecjalizowanych agentów w pojedynczym czacie grupowym lub wiadomościach prywatnych.
Grupy rozgłoszeniowe są uwzględniane po zastosowaniu list dozwolonych kanału i reguł aktywacji grupy. W grupach WhatsApp rozgłaszanie następuje, gdy OpenClaw normalnie udzieliłby odpowiedzi (na przykład po wzmiance, zależnie od ustawień grupy). Zmienia ono wyłącznie to, którzy agenci są uruchamiani, a nigdy to, czy wiadomość kwalifikuje się do przetworzenia.
Aktywna ścieżka kontroli jakości WhatsApp obejmuje whatsapp-broadcast-group-fanout, który sprawdza, czy jedna wiadomość grupowa ze wzmianką może wygenerować odrębne, widoczne odpowiedzi od dwóch skonfigurowanych agentów.
Konfiguracja
Konfiguracja podstawowa
Dodaj sekcję najwyższego poziomu broadcast (obok bindings). Kluczami są identyfikatory rozmówców WhatsApp, a wartościami — tablice identyfikatorów agentów:
- czaty grupowe: JID grupy (np.
120363403215116621@g.us) - wiadomości prywatne: numer telefonu nadawcy w formacie E.164 (np.
+15551234567)
{ "broadcast": { "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"] }}Wynik: gdy OpenClaw udzieliłby odpowiedzi na tym czacie, uruchamia wszystkich trzech agentów.
Każdy wymieniony identyfikator agenta musi istnieć w agents.list: walidacja konfiguracji zgłasza nieznane identyfikatory, a środowisko uruchomieniowe pomija je z ostrzeżeniem Broadcast agent <id> not found in agents.list; skipping.
Strategia przetwarzania
broadcast.strategy określa sposób przetwarzania wiadomości przez agentów:
| Strategia | Zachowanie |
|---|---|
parallel (domyślna) |
Wszyscy agenci przetwarzają jednocześnie; odpowiedzi mogą nadejść w dowolnej kolejności. |
sequential |
Agenci przetwarzają w kolejności tablicy; każdy czeka na zakończenie poprzedniego. |
{ "broadcast": { "strategy": "sequential", "120363403215116621@g.us": ["alfred", "baerbel"] }}Pełny przykład
{ "agents": { "list": [ { "id": "code-reviewer", "name": "Code Reviewer", "workspace": "/path/to/code-reviewer", "sandbox": { "mode": "all" } }, { "id": "security-auditor", "name": "Security Auditor", "workspace": "/path/to/security-auditor", "sandbox": { "mode": "all" } }, { "id": "docs-generator", "name": "Documentation Generator", "workspace": "/path/to/docs-generator", "sandbox": { "mode": "all" } } ] }, "broadcast": { "strategy": "parallel", "120363403215116621@g.us": ["code-reviewer", "security-auditor", "docs-generator"], "120363424282127706@g.us": ["support-en", "support-de"], "+15555550123": ["assistant", "logger"] }}Sposób działania
Przepływ wiadomości
Nadejście wiadomości przychodzącej
Nadchodzi wiadomość z grupy WhatsApp lub wiadomość prywatna.
Trasowanie i dopuszczenie
OpenClaw stosuje listy dozwolonych kanału, reguły aktywacji grupy i skonfigurowane przypisanie własności powiązania ACP.
Sprawdzenie rozgłaszania
Jeśli żadne skonfigurowane powiązanie ACP nie jest właścicielem trasy, OpenClaw sprawdza, czy identyfikator rozmówcy znajduje się w broadcast.
Jeśli rozgłaszanie ma zastosowanie
- Wszyscy wymienieni agenci przetwarzają wiadomość.
- Każdy agent ma własny klucz sesji i odizolowany kontekst.
- Agenci przetwarzają równolegle (domyślnie) lub sekwencyjnie.
- Załączniki dźwiękowe są transkrybowane raz przed rozesłaniem, dzięki czemu agenci współdzielą jedną transkrypcję zamiast wykonywać osobne wywołania STT.
Jeśli rozgłaszanie nie ma zastosowania
OpenClaw przekazuje wiadomość zwykłą trasą lub skonfigurowaną trasą sesji ACP wybraną podczas trasowania.
Izolacja sesji
Każdy agent w grupie rozgłoszeniowej ma całkowicie odrębne:
- Klucze sesji (
agent:alfred:whatsapp:group:120363...orazagent:baerbel:whatsapp:group:120363...) - Historię konwersacji (agent nie widzi odpowiedzi innych agentów)
- Obszar roboczy (oddzielne piaskownice, jeśli je skonfigurowano)
- Dostęp do narzędzi (różne listy dozwolonych i zabronionych narzędzi)
- Pamięć/kontekst (oddzielne pliki
IDENTITY.md,SOUL.mditp.)
Jeden wyjątek jest celowo współdzielony: bufor kontekstu grupy (ostatnie wiadomości grupowe używane jako kontekst) jest współdzielony dla danego rozmówcy, dzięki czemu wszyscy agenci rozgłoszeniowi po wyzwoleniu widzą ten sam kontekst. Bufor jest czyszczony raz po zakończeniu rozesłania.
Pozwala to przypisać każdemu agentowi inną osobowość, modele, Skills i dostęp do narzędzi (na przykład tylko do odczytu albo do odczytu i zapisu).
Przykład: odizolowane sesje
W grupie 120363403215116621@g.us z agentami ["alfred", "baerbel"]:
Kontekst Alfreda
Session: agent:alfred:whatsapp:group:120363403215116621@g.usHistory: [user message, alfred's previous responses]Workspace: ~/openclaw-alfred/Tools: read, write, execKontekst Baerbel
Session: agent:baerbel:whatsapp:group:120363403215116621@g.usHistory: [user message, baerbel's previous responses]Workspace: ~/openclaw-baerbel/Tools: read onlyPrzypadki użycia
- Zespoły wyspecjalizowanych agentów: grupa programistyczna, w której
code-reviewer,security-auditor,test-generatoridocs-checkerodpowiadają na tę samą wiadomość, każdy ze swojej perspektywy. - Obsługa wielu języków: jeden czat pomocy technicznej, na którym
support-en,support-deisupport-esodpowiadają w swoich językach. - Zapewnianie jakości:
support-agentodpowiada, aqa-agentsprawdza odpowiedź i reaguje tylko po wykryciu problemów. - Automatyzacja zadań:
task-tracker,time-loggerireport-generatorprzetwarzają tę samą aktualizację stanu.
Najlepsze praktyki
1. Dbaj o ścisłą specjalizację agentów
Przypisz każdemu agentowi jedno jasno określone zadanie (formatter, linter, tester) zamiast tworzyć jednego ogólnego agenta „dev-helper”.
2. Używaj opisowych identyfikatorów i nazw
{ "agents": { "list": [ { "id": "security-scanner", "name": "Security Scanner" }, { "id": "code-formatter", "name": "Code Formatter" }, { "id": "test-generator", "name": "Test Generator" } ] }}3. Skonfiguruj różne poziomy dostępu do narzędzi
{ "agents": { "list": [ { "id": "reviewer", "tools": { "allow": ["read", "exec"] } }, { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } } ] }}reviewer ma dostęp tylko do odczytu. fixer może odczytywać i zapisywać.
4. Monitoruj wydajność
Przy wielu agentach wybieraj "strategy": "parallel" (ustawienie domyślne), ograniczaj grupy rozgłoszeniowe do kilku agentów i używaj szybszych modeli dla prostszych agentów.
5. Awarie pozostają odizolowane
Awarie agentów są od siebie niezależne. Błąd jednego agenta jest zapisywany w dzienniku (Broadcast agent <id> failed: ...) i nie blokuje pozostałych.
Zgodność
Dostawcy
Grupy rozgłoszeniowe są obecnie zaimplementowane wyłącznie dla WhatsApp (kanału internetowego). Inne kanały ignorują konfigurację broadcast.
Trasowanie
Grupy rozgłoszeniowe współdziałają z istniejącym trasowaniem:
{ "bindings": [ { "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } }, "agentId": "alfred" } ], "broadcast": { "GROUP_B": ["agent1", "agent2"] }}GROUP_A: odpowiada tylko alfred (zwykłe trasowanie).GROUP_B: odpowiadają agent1 ORAZ agent2 (rozgłaszanie).
Rozwiązywanie problemów
Agenci nie odpowiadają
Sprawdź:
- Identyfikatory agentów istnieją w
agents.list(walidacja konfiguracji odrzuca nieznane identyfikatory). - Format identyfikatora rozmówcy jest prawidłowy (JID grupy, na przykład
120363403215116621@g.us, lub numer E.164, na przykład+15551234567, dla wiadomości prywatnych). - Wiadomość przeszła standardowe mechanizmy dopuszczania (reguły wzmianek/aktywacji nadal obowiązują).
Debugowanie:
openclaw logs --follow | grep -i broadcastPomyślne rozesłanie zapisuje w dzienniku komunikat Broadcasting message to <n> agents (<strategy>).
Odpowiada tylko jeden agent
Przyczyna: identyfikator rozmówcy może znajdować się w zwykłych powiązaniach tras, ale nie w broadcast, albo może pasować do wyłącznego skonfigurowanego powiązania ACP.
Rozwiązanie: dodaj rozmówców przypisanych do zwykłych tras do konfiguracji rozgłaszania albo usuń/zmień skonfigurowane powiązanie ACP, jeśli oczekiwane jest rozesłanie do wielu agentów.
Problemy z wydajnością
Jeśli działanie jest powolne przy wielu agentach: zmniejsz liczbę agentów w grupie, użyj lżejszych modeli i sprawdź czas uruchamiania piaskownicy.
Przykłady
Przykład 1: Zespół przeglądu kodu
{ "broadcast": { "strategy": "parallel", "120363403215116621@g.us": [ "code-formatter", "security-scanner", "test-coverage", "docs-checker" ] }, "agents": { "list": [ { "id": "code-formatter", "workspace": "~/agents/formatter", "tools": { "allow": ["read", "write"] } }, { "id": "security-scanner", "workspace": "~/agents/security", "tools": { "allow": ["read", "exec"] } }, { "id": "test-coverage", "workspace": "~/agents/testing", "tools": { "allow": ["read", "exec"] } }, { "id": "docs-checker", "workspace": "~/agents/docs", "tools": { "allow": ["read"] } } ] }}Jeden fragment kodu w grupie generuje cztery odpowiedzi: poprawki formatowania, wykryty problem z bezpieczeństwem, lukę w pokryciu testami i drobną uwagę dotyczącą dokumentacji.
Przykład 2: Wielojęzyczny potok
{ "broadcast": { "strategy": "sequential", "+15555550123": ["detect-language", "translator-en", "translator-de"] }, "agents": { "list": [ { "id": "detect-language", "workspace": "~/agents/lang-detect" }, { "id": "translator-en", "workspace": "~/agents/translate-en" }, { "id": "translator-de", "workspace": "~/agents/translate-de" } ] }}Dokumentacja API
Schemat konfiguracji
interface OpenClawConfig { broadcast?: { strategy?: "parallel" | "sequential"; [peerId: string]: string[]; };}Pola
strategy"parallel" | "sequential"default: "parallel"Sposób przetwarzania przez agentów. parallel uruchamia wszystkich agentów jednocześnie; sequential uruchamia ich w kolejności tablicy.
[peerId]string[]JID grupy WhatsApp lub numer telefonu w formacie E.164. Wartością jest tablica identyfikatorów agentów, którzy powinni przetwarzać wszystkie wiadomości od tego rozmówcy.
Ograniczenia
- Maksymalna liczba agentów: brak sztywnego limitu, ale duża liczba agentów (10+) może powodować spowolnienie.
- Współdzielony kontekst: agenci nie widzą odpowiedzi innych agentów (zgodnie z założeniem).
- Kolejność wiadomości: odpowiedzi przetwarzane równolegle mogą nadejść w dowolnej kolejności.
- Limity częstotliwości: wszystkie odpowiedzi są wysyłane z jednego konta WhatsApp, dlatego odpowiedź każdego agenta wlicza się do tych samych limitów częstotliwości WhatsApp.