群聊
GolemBot 可以参与所有 IM 通道的群聊。配置 bot 的响应策略、@mention 处理和群记忆。
响应策略
通过 golem.yaml 中的 groupChat.groupPolicy 控制 bot 在群聊中的发言时机:
groupChat:
groupPolicy: smart # mention-only(默认)| smart | always
historyLimit: 30 # 注入最近多少条消息作为上下文(默认:20)
maxTurns: 5 # 每个群最多连续回复次数(默认:10,防死循环)| 策略 | Agent 调用时机 | Bot 何时回复 | 适用场景 |
|---|---|---|---|
mention-only | 仅被 @mention 时 | 仅被 @mention 时 | 低噪音,最省成本 |
smart | 所有群消息 | Agent 自己决定(输出 [PASS] 保持沉默) | Bot 持续观察并积累群记忆 |
always | 所有群消息 | 每条消息都回复 | 高互动的专用小群 |
Smart 模式
smart 模式下,Agent 对每条群消息都会运行——即使最终输出 [PASS] 保持沉默。这意味着:
- Agent 实时阅读并理解所有消息
- 群记忆持续更新(见下方群记忆)
- 当 Agent 决定发言时拥有完整的对话上下文
- 在 smart 模式下被 @mention 时,消息一定会被处理(不会跳过)
mention-only 模式下,Agent 只在被 @mention 时运行。记忆和上下文仅在此时更新。
配置参考
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
groupPolicy | string | mention-only | 响应策略 |
historyLimit | number | 20 | 注入多少条历史消息作为上下文 |
maxTurns | number | 10 | 每个群最多连续 bot 回复次数(安全阀) |
Mention 处理
入站 @mention
GolemBot 在将消息传给 Agent 前会自动去除 @mention 标记,兼容:
- XML 格式:
<at user_id="xxx">BotName</at>(飞书) - 纯文本格式:
@BotName
Mention 检测支持词边界——@mybot 不会误触发 @mybotplus。
出站 @mention
当 AI 回复中包含 @名字 且匹配已知群成员时,Gateway 自动将其转换为平台原生 mention。这需要 Adapter 实现可选的 getGroupMembers() 方法。
| 通道 | 出站 @mention | 实现方式 |
|---|---|---|
| 飞书 | ✅ | 通过 API 获取群成员,转换为卡片 v2 中的原生 <at> 标签。需要 im:chat:readonly 权限。 |
| Slack | ✅ | 通过 conversations.members 获取频道成员,转换为 <@USER_ID>。 |
| Discord | ✅ | 获取服务器成员,转换为 <@USER_ID>。需要在 Developer Portal 启用 Server Members Intent。 |
| 钉钉 | ❌ | @名字 作为纯文本发送 |
| 企微 | ❌ | @名字 作为纯文本发送 |
| Telegram | ❌ | @名字 作为纯文本发送 |
引用回复
Bot 以引用回复(引用原始消息)的形式回复,而不是发送独立消息。让群聊中的对话关系更加清晰。
| 通道 | 引用回复 | 机制 |
|---|---|---|
| 飞书 | ✅ | im.v1.message.reply(原生引用) |
| Telegram | ✅ | reply_to_message_id 参数 |
| Slack | ✅ | 通过 thread_ts 线程回复 |
| Discord | ✅ | 原生 message.reply() |
| 钉钉 | ❌ | Webhook 模式不支持引用回复 |
| 企微 | ❌ | API 不支持引用回复 |
无需配置——支持的通道会自动启用引用回复。
群记忆
Agent 为每个群维护独立的记忆文件:
memory/groups/<group-key>.md群组标识由通道类型和聊天 ID 生成(如 slack-C123、telegram--100456)。GolemBot 自动创建 memory/groups/ 目录。
文件结构
# Group: slack-C123
## 成员
- Alice:前端负责人
- Bob:后端工程师
## 项目上下文
- 正在构建 API 延迟监控仪表盘
- 使用 React + Go 技术栈
## 决策记录
- [2026-03-01] 出于成本考虑选择 Prometheus 而非 Datadog
- [2026-03-03] 冲刺截止日期推迟到 3 月 15 日策略对记忆的影响
| 策略 | Agent 运行时机 | 记忆更新频率 |
|---|---|---|
smart | 每条消息(即使保持沉默) | 持续更新——实时观察所有消息并更新记忆 |
mention-only | 仅被 @mention 时 | 间歇更新——仅在 Bot 被调用时更新 |
always | 每条消息 | 持续更新 |
多 Bot 协作
当多个 GolemBot 实例在同一台机器上运行(各自有独立的 golem.yaml 和 Gateway 端口)时,它们通过 Fleet 机制自动发现彼此,并在共享群聊中协调分工。
工作原理
- 每个 Gateway 启动时将自身注册到
~/.golembot/fleet/ - Gateway 定期刷新 peer 列表(每 60 秒)
- 在群聊中,prompt 会注入
[Peers: BotName (role)]标头,显示所有同伴 Bot - 群聊历史中每个 Bot 的消息带
[bot:BotName]标签,便于区分
快速配置
# Bot A:产品分析师
golembot init -n analyst-bot -e claude-code -r "产品分析师"
# Bot B:用户研究员(在另一个目录)
golembot init -n research-bot -e claude-code -r "用户研究员"启动两个 Gateway 即可——它们会自动发现彼此,无需额外配置。
不同策略下的协作行为
| 策略 | 多 Bot 行为 |
|---|---|
mention-only | 仅被 @mention 时回复。轻量引导帮助 Bot 将非本领域问题引导给同伴。 |
smart | 完整 [PASS] 协调——Bot 根据领域专长和同伴角色自行决定是否回复。多 Bot 群聊最推荐此策略。 |
always | 所有 Bot 回复每条消息。有同伴感知的轻量引导,但不会主动沉默。 |
跨 Bot 委派
Bot 可通过 HTTP API 调用同伴,显式委派任务:
POST http://127.0.0.1:<peer-port>/chat
{"message": "分析用户研究数据", "sessionKey": "delegation-123"}内置的 multi-bot 技能教会 Agent 何时以及如何使用此能力。
会话路由
私聊消息使用 per-user key:${channelType}:${chatId}:${senderId}——每个用户拥有独立的对话上下文。
群消息使用 group-scoped key:${channelType}:${chatId}——同一个群里的所有用户共享一个 session,Agent 能看到完整的群对话上下文。