openclaw-vainplex/docs/zh-CN/broadcast-groups.md
Josh Palmer 5676a6b38d Docs: normalize zh-CN terminology + tone
What: switch to 你/你的 tone; standardize Skills/Gateway网关/local loopback/私信 wording
Why: align zh-CN docs with issue 6995 feedback + idiomatic tech style
Tests: pnpm docs:build
2026-02-02 16:38:25 +01:00

449 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
read_when:
- 配置广播群组
- 调试 WhatsApp 中的多智能体回复
status: experimental
summary: 将 WhatsApp 消息广播给多个智能体
title: 广播群组
x-i18n:
generated_at: "2026-02-01T19:40:25Z"
model: claude-opus-4-5
provider: pi
source_hash: eaeb4035912c49413e012177cf0bd28b348130d30d3317674418dca728229b70
source_path: broadcast-groups.md
workflow: 14
---
# 广播群组
**状态:** 实验性
**版本:** 在 2026.1.9 中添加
## 概述
广播群组允许多个智能体同时处理和回复同一条消息。这使你可以创建在单个 WhatsApp 群组或私聊中协同工作的专业智能体团队——全部使用同一个电话号码。
当前范围:**仅限 WhatsApp**Web 渠道)。
广播群组在渠道允许列表和群组激活规则之后进行评估。在 WhatsApp 群组中,这意味着广播发生在 OpenClaw 正常回复的时机(例如:被提及时,取决于你的群组设置)。
## 使用场景
### 1. 专业智能体团队
部署多个具有原子化、专注职责的智能体:
```
群组:"Development Team"
智能体:
- CodeReviewer审查代码片段
- DocumentationBot生成文档
- SecurityAuditor检查漏洞
- TestGenerator建议测试用例
```
每个智能体处理同一条消息并提供其专业视角。
### 2. 多语言支持
```
群组:"International Support"
智能体:
- Agent_EN用英语回复
- Agent_DE用德语回复
- Agent_ES用西班牙语回复
```
### 3. 质量保证工作流
```
群组:"Customer Support"
智能体:
- SupportAgent提供回答
- QAAgent审查质量仅在发现问题时回复
```
### 4. 任务自动化
```
群组:"Project Management"
智能体:
- TaskTracker更新任务数据库
- TimeLogger记录时间消耗
- ReportGenerator创建摘要
```
## 配置
### 基本设置
添加顶层 `broadcast` 部分(与 `bindings` 同级)。键为 WhatsApp peer ID
- 群聊:群组 JID例如 `120363403215116621@g.us`
- 私聊E.164 格式电话号码(例如 `+15551234567`
```json
{
"broadcast": {
"120363403215116621@g.us": ["alfred", "baerbel", "assistant3"]
}
}
```
**效果:** 当 OpenClaw 在此聊天中回复时,它会运行所有三个智能体。
### 处理策略
控制智能体如何处理消息:
#### 并行(默认)
所有智能体同时处理:
```json
{
"broadcast": {
"strategy": "parallel",
"120363403215116621@g.us": ["alfred", "baerbel"]
}
}
```
#### 顺序
智能体按顺序处理(每个等待前一个完成):
```json
{
"broadcast": {
"strategy": "sequential",
"120363403215116621@g.us": ["alfred", "baerbel"]
}
}
```
### 完整示例
```json
{
"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"]
}
}
```
## 工作原理
### 消息流程
1. **收到消息**,来自 WhatsApp 群组
2. **广播检查**:系统检查 peer ID 是否在 `broadcast`
3. **如果在广播列表中**
- 所有列出的智能体处理该消息
- 每个智能体有自己的会话键和隔离的上下文
- 智能体并行(默认)或顺序处理
4. **如果不在广播列表中**
- 应用正常路由(第一个匹配的绑定)
注意:广播群组不会绕过渠道允许列表或群组激活规则(提及/命令等)。它们仅在消息符合处理条件时改变*哪些智能体运行*。
### 会话隔离
广播群组中的每个智能体维护完全独立的:
- **会话键**`agent:alfred:whatsapp:group:120363...` 与 `agent:baerbel:whatsapp:group:120363...`
- **对话历史**(智能体看不到其他智能体的消息)
- **工作区**(如果配置了则为独立沙箱)
- **工具访问**(不同的允许/拒绝列表)
- **记忆/上下文**(独立的 IDENTITY.md、SOUL.md 等)
- **群组上下文缓冲区**(用于上下文的最近群组消息)按 peer 共享,因此所有广播智能体在触发时看到相同的上下文
这使得每个智能体可以拥有:
- 不同的个性
- 不同的工具访问权限(例如只读与读写)
- 不同的模型(例如 opus 与 sonnet
- 不同的已安装 Skills
### 示例:隔离会话
在群组 `120363403215116621@g.us` 中,智能体为 `["alfred", "baerbel"]`
**Alfred 的上下文:**
```
会话agent:alfred:whatsapp:group:120363403215116621@g.us
历史:[用户消息alfred 之前的回复]
工作区:/Users/pascal/openclaw-alfred/
工具read、write、exec
```
**Bärbel 的上下文:**
```
会话agent:baerbel:whatsapp:group:120363403215116621@g.us
历史:[用户消息baerbel 之前的回复]
工作区:/Users/pascal/openclaw-baerbel/
工具:仅 read
```
## 最佳实践
### 1. 保持智能体专注
为每个智能体设计单一、明确的职责:
```json
{
"broadcast": {
"DEV_GROUP": ["formatter", "linter", "tester"]
}
}
```
**好的做法:** 每个智能体只有一项工作
**不好的做法:** 一个通用的 "dev-helper" 智能体
### 2. 使用描述性名称
让每个智能体的功能一目了然:
```json
{
"agents": {
"security-scanner": { "name": "Security Scanner" },
"code-formatter": { "name": "Code Formatter" },
"test-generator": { "name": "Test Generator" }
}
}
```
### 3. 配置不同的工具访问权限
只给智能体它们需要的工具:
```json
{
"agents": {
"reviewer": {
"tools": { "allow": ["read", "exec"] } // 只读
},
"fixer": {
"tools": { "allow": ["read", "write", "edit", "exec"] } // 读写
}
}
}
```
### 4. 监控性能
当智能体数量较多时,请考虑:
- 使用 `"strategy": "parallel"`(默认)以提高速度
- 将广播群组限制在 5-10 个智能体
- 为较简单的智能体使用更快的模型
### 5. 优雅处理失败
智能体独立失败。一个智能体的错误不会阻塞其他智能体:
```
消息 → [智能体 A ✓, 智能体 B ✗ 错误, 智能体 C ✓]
结果:智能体 A 和 C 回复,智能体 B 记录错误
```
## 兼容性
### 提供商
广播群组目前支持:
- ✅ WhatsApp已实现
- 🚧 Telegram计划中
- 🚧 Discord计划中
- 🚧 Slack计划中
### 路由
广播群组与现有路由并行工作:
```json
{
"bindings": [
{
"match": { "channel": "whatsapp", "peer": { "kind": "group", "id": "GROUP_A" } },
"agentId": "alfred"
}
],
"broadcast": {
"GROUP_B": ["agent1", "agent2"]
}
}
```
- `GROUP_A`:仅 alfred 回复(正常路由)
- `GROUP_B`agent1 和 agent2 都回复(广播)
**优先级:** `broadcast` 优先于 `bindings`
## 故障排除
### 智能体没有回复
**检查:**
1. 智能体 ID 存在于 `agents.list`
2. Peer ID 格式正确(例如 `120363403215116621@g.us`
3. 智能体不在拒绝列表中
**调试:**
```bash
tail -f ~/.openclaw/logs/gateway.log | grep broadcast
```
### 仅一个智能体回复
**原因:** Peer ID 可能在 `bindings` 中但不在 `broadcast` 中。
**修复:** 添加到广播配置中或从 bindings 中移除。
### 性能问题
**如果智能体较多时速度慢:**
- 减少每个群组的智能体数量
- 使用更轻量的模型sonnet 而非 opus
- 检查沙箱启动时间
## 示例
### 示例 1代码审查团队
```json
{
"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"] } }
]
}
}
```
**用户发送:** 代码片段
**回复:**
- code-formatter"已修复缩进并添加了类型提示"
- security-scanner"⚠️ 第 12 行存在 SQL 注入漏洞"
- test-coverage"覆盖率为 45%,缺少错误情况的测试"
- docs-checker"函数 `process_data` 缺少文档字符串"
### 示例 2多语言支持
```json
{
"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" }
]
}
}
```
## API 参考
### 配置模式
```typescript
interface OpenClawConfig {
broadcast?: {
strategy?: "parallel" | "sequential";
[peerId: string]: string[];
};
}
```
### 字段
- `strategy`(可选):智能体的处理方式
- `"parallel"`(默认):所有智能体同时处理
- `"sequential"`:智能体按数组顺序处理
- `[peerId]`WhatsApp 群组 JID、E.164 号码或其他 peer ID
- 值:应处理消息的智能体 ID 数组
## 限制
1. **最大智能体数:** 无硬性限制,但 10 个以上可能会变慢
2. **共享上下文:** 智能体看不到彼此的回复(设计如此)
3. **消息排序:** 并行回复可能以任意顺序到达
4. **速率限制:** 所有智能体共同计入 WhatsApp 速率限制
## 未来增强
计划中的功能:
- [ ] 共享上下文模式(智能体可以看到彼此的回复)
- [ ] 智能体协调(智能体可以互相通信)
- [ ] 动态智能体选择(根据消息内容选择智能体)
- [ ] 智能体优先级(某些智能体先于其他智能体回复)
## 另请参阅
- [多智能体配置](/multi-agent-sandbox-tools)
- [路由配置](/concepts/channel-routing)
- [会话管理](/concepts/sessions)