Configuration
Nhóm phát sóng
Tổng quan
Nhóm phát rộng chạy nhiều tác tử trên cùng một tin nhắn đến. Mỗi tác tử xử lý tin nhắn trong phiên cô lập riêng và đăng phản hồi riêng, nhờ đó một số WhatsApp có thể lưu trữ một nhóm tác tử chuyên biệt trong một cuộc trò chuyện nhóm hoặc tin nhắn trực tiếp duy nhất.
Nhóm phát rộng được đánh giá sau danh sách cho phép của kênh và quy tắc kích hoạt nhóm. Trong nhóm WhatsApp, việc phát rộng xảy ra khi OpenClaw thông thường sẽ phản hồi (ví dụ: khi được nhắc đến, tùy thuộc vào cài đặt nhóm của bạn). Chúng chỉ thay đổi tác tử nào chạy, không bao giờ thay đổi việc một tin nhắn có đủ điều kiện để được xử lý hay không.
Luồng QA WhatsApp trực tiếp bao gồm whatsapp-broadcast-group-fanout, xác minh rằng một tin nhắn nhóm có nhắc đến có thể tạo ra các phản hồi hiển thị riêng biệt từ hai tác tử đã cấu hình.
Cấu hình
Thiết lập cơ bản
Thêm phần broadcast ở cấp cao nhất (bên cạnh bindings). Khóa là mã định danh đối tác WhatsApp, giá trị là mảng mã định danh tác tử:
- cuộc trò chuyện nhóm: JID nhóm (ví dụ:
120363403215116621@g.us) - tin nhắn trực tiếp: số điện thoại E.164 của người gửi (ví dụ:
+15551234567)
{ "broadcast": { "120363403215116621@g.us": ["alfred", "baerbel", "assistant3"] }}Kết quả: khi OpenClaw thông thường sẽ phản hồi trong cuộc trò chuyện này, hệ thống chạy cả ba tác tử.
Mọi mã định danh tác tử được liệt kê đều phải tồn tại trong agents.list: quy trình xác thực cấu hình sẽ báo cáo các mã định danh không xác định và môi trường chạy sẽ bỏ qua chúng với cảnh báo Broadcast agent <id> not found in agents.list; skipping.
Chiến lược xử lý
broadcast.strategy thiết lập cách các tác tử xử lý tin nhắn:
| Chiến lược | Hành vi |
|---|---|
parallel (mặc định) |
Tất cả tác tử xử lý đồng thời; phản hồi có thể đến theo bất kỳ thứ tự nào. |
sequential |
Các tác tử xử lý theo thứ tự trong mảng; mỗi tác tử chờ tác tử trước hoàn tất. |
{ "broadcast": { "strategy": "sequential", "120363403215116621@g.us": ["alfred", "baerbel"] }}Ví dụ hoàn chỉnh
{ "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"] }}Cách hoạt động
Luồng tin nhắn
Tin nhắn đến
Một tin nhắn nhóm hoặc tin nhắn trực tiếp trên WhatsApp được gửi đến.
Định tuyến và tiếp nhận
OpenClaw áp dụng danh sách cho phép của kênh, quy tắc kích hoạt nhóm và quyền sở hữu liên kết ACP đã cấu hình.
Kiểm tra phát rộng
Nếu không có liên kết ACP đã cấu hình nào sở hữu tuyến, OpenClaw kiểm tra xem mã định danh đối tác có nằm trong broadcast hay không.
Nếu áp dụng phát rộng
- Tất cả tác tử được liệt kê đều xử lý tin nhắn.
- Mỗi tác tử có khóa phiên và ngữ cảnh cô lập riêng.
- Các tác tử xử lý song song (mặc định) hoặc tuần tự.
- Tệp đính kèm âm thanh được chuyển thành văn bản một lần trước khi phân phối, nhờ đó các tác tử dùng chung một bản chép lời thay vì thực hiện các lệnh gọi STT riêng biệt.
Nếu không áp dụng phát rộng
OpenClaw phân phối đến tuyến thông thường hoặc tuyến phiên ACP đã cấu hình được chọn trong quá trình định tuyến.
Cô lập phiên
Mỗi tác tử trong một nhóm phát rộng duy trì hoàn toàn riêng biệt:
- Khóa phiên (
agent:alfred:whatsapp:group:120363...so vớiagent:baerbel:whatsapp:group:120363...) - Lịch sử hội thoại (một tác tử không thấy phản hồi của các tác tử khác)
- Không gian làm việc (các sandbox riêng nếu được cấu hình)
- Quyền truy cập công cụ (các danh sách cho phép/từ chối khác nhau)
- Bộ nhớ/ngữ cảnh (
IDENTITY.md,SOUL.md, v.v. riêng biệt)
Có một ngoại lệ được chủ ý chia sẻ: bộ đệm ngữ cảnh nhóm (các tin nhắn nhóm gần đây dùng làm ngữ cảnh) được chia sẻ theo từng đối tác, vì vậy tất cả tác tử phát rộng nhìn thấy cùng một ngữ cảnh khi được kích hoạt. Bộ đệm được xóa một lần sau khi quá trình phân phối hoàn tất.
Điều này cho phép mỗi tác tử có tính cách, mô hình, Skills và quyền truy cập công cụ khác nhau (ví dụ: chỉ đọc so với đọc-ghi).
Ví dụ: các phiên cô lập
Trong nhóm 120363403215116621@g.us với các tác tử ["alfred", "baerbel"]:
Ngữ cảnh của Alfred
Session: agent:alfred:whatsapp:group:120363403215116621@g.usHistory: [user message, alfred's previous responses]Workspace: ~/openclaw-alfred/Tools: read, write, execNgữ cảnh của Baerbel
Session: agent:baerbel:whatsapp:group:120363403215116621@g.usHistory: [user message, baerbel's previous responses]Workspace: ~/openclaw-baerbel/Tools: read onlyTrường hợp sử dụng
- Nhóm tác tử chuyên biệt: một nhóm phát triển nơi
code-reviewer,security-auditor,test-generatorvàdocs-checkercùng trả lời một tin nhắn từ góc nhìn riêng. - Hỗ trợ đa ngôn ngữ: một cuộc trò chuyện hỗ trợ với
support-en,support-de,support-esphản hồi bằng ngôn ngữ tương ứng. - Đảm bảo chất lượng:
support-agenttrả lời trong khiqa-agentđánh giá và chỉ phản hồi khi phát hiện vấn đề. - Tự động hóa tác vụ:
task-tracker,time-loggervàreport-generatorcùng tiếp nhận một bản cập nhật trạng thái.
Phương pháp hay nhất
1. Giữ cho tác tử tập trung
Giao cho mỗi tác tử một trách nhiệm duy nhất, rõ ràng (formatter, linter, tester) thay vì một tác tử "dev-helper" chung chung.
2. Sử dụng mã định danh và tên có tính mô tả
{ "agents": { "list": [ { "id": "security-scanner", "name": "Security Scanner" }, { "id": "code-formatter", "name": "Code Formatter" }, { "id": "test-generator", "name": "Test Generator" } ] }}3. Cấu hình quyền truy cập công cụ khác nhau
{ "agents": { "list": [ { "id": "reviewer", "tools": { "allow": ["read", "exec"] } }, { "id": "fixer", "tools": { "allow": ["read", "write", "edit", "exec"] } } ] }}reviewer chỉ có quyền đọc. fixer có thể đọc và ghi.
4. Theo dõi hiệu năng
Khi có nhiều tác tử, hãy ưu tiên "strategy": "parallel" (mặc định), giới hạn mỗi nhóm phát rộng ở một số ít tác tử và sử dụng các mô hình nhanh hơn cho những tác tử đơn giản hơn.
5. Lỗi được duy trì cô lập
Các tác tử gặp lỗi độc lập. Lỗi của một tác tử được ghi nhật ký (Broadcast agent <id> failed: ...) và không chặn các tác tử khác.
Khả năng tương thích
Nhà cung cấp
Nhóm phát rộng hiện chỉ được triển khai cho WhatsApp (kênh web). Các kênh khác bỏ qua cấu hình broadcast.
Định tuyến
Nhóm phát rộng hoạt động cùng với cơ chế định tuyến hiện có:
{ "bindings": [ { "match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } }, "agentId": "alfred" } ], "broadcast": { "GROUP_B": ["agent1", "agent2"] }}GROUP_A: chỉ alfred phản hồi (định tuyến thông thường).GROUP_B: agent1 VÀ agent2 phản hồi (phát rộng).
Khắc phục sự cố
Tác tử không phản hồi
Kiểm tra:
- Mã định danh tác tử tồn tại trong
agents.list(quy trình xác thực cấu hình từ chối các mã định danh không xác định). - Định dạng mã định danh đối tác chính xác (JID nhóm như
120363403215116621@g.us, hoặc E.164 như+15551234567cho tin nhắn trực tiếp). - Tin nhắn đã vượt qua quy trình kiểm soát thông thường (các quy tắc nhắc đến/kích hoạt vẫn được áp dụng).
Gỡ lỗi:
openclaw logs --follow | grep -i broadcastMột lần phân phối thành công sẽ ghi nhật ký Broadcasting message to <n> agents (<strategy>).
Chỉ một tác tử phản hồi
Nguyên nhân: mã định danh đối tác có thể nằm trong các liên kết tuyến thông thường nhưng không nằm trong broadcast, hoặc có thể khớp với một liên kết ACP độc quyền đã cấu hình.
Cách khắc phục: thêm các đối tác được liên kết với tuyến thông thường vào cấu hình phát rộng, hoặc xóa/thay đổi liên kết ACP đã cấu hình nếu muốn phát rộng phân phối.
Vấn đề hiệu năng
Nếu hệ thống chậm khi có nhiều tác tử: giảm số lượng tác tử trong mỗi nhóm, sử dụng các mô hình nhẹ hơn và kiểm tra thời gian khởi động sandbox.
Ví dụ
Ví dụ 1: Nhóm đánh giá mã
{ "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"] } } ] }}Một đoạn mã trong nhóm tạo ra bốn phản hồi: các bản sửa định dạng, một phát hiện bảo mật, một khoảng trống về độ bao phủ và một góp ý nhỏ về tài liệu.
Ví dụ 2: Quy trình đa ngôn ngữ
{ "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" } ] }}Tham chiếu API
Lược đồ cấu hình
interface OpenClawConfig { broadcast?: { strategy?: "parallel" | "sequential"; [peerId: string]: string[]; };}Trường
strategy"parallel" | "sequential"default: "parallel"Cách xử lý các tác tử. parallel chạy đồng thời tất cả tác tử; sequential chạy chúng theo thứ tự trong mảng.
[peerId]string[]JID nhóm WhatsApp hoặc số điện thoại E.164. Giá trị là mảng mã định danh của các tác tử đều phải xử lý tin nhắn từ đối tác đó.
Giới hạn
- Số tác tử tối đa: không có giới hạn cứng, nhưng nhiều tác tử (10+) có thể làm hệ thống chậm.
- Ngữ cảnh dùng chung: các tác tử không thấy phản hồi của nhau (theo thiết kế).
- Thứ tự tin nhắn: các phản hồi song song có thể đến theo bất kỳ thứ tự nào.
- Giới hạn tốc độ: tất cả phản hồi đều đến từ một tài khoản WhatsApp, vì vậy phản hồi của mỗi tác tử đều được tính vào cùng giới hạn tốc độ của WhatsApp.