Files
nanoclaw/docs/zh/isolation-model.md
2026-05-12 13:14:17 +00:00

89 lines
5.0 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.

# 频道隔离模型
NanoClaw 将消息频道与 agent group智能体组解耦。当你连接一个频道Discord、Telegram、Slack、GitHub 等)时,需要决定它与你现有 agent 的关系。共有三个隔离级别。
## 三个级别
### 1. 共享 Session
多个频道输入到同一个对话中。agent 在一个线程中看到来自所有频道的所有消息。
**共享的内容:** 所有——工作区、记忆、CLAUDE.md以及对话本身。一条 GitHub PR 评论和一条 Slack 消息在 agent 的上下文中并排出现。
**示例:** 一个 Slack 频道与 GitHub webhooks 配对。agent 通过 GitHub 接收 PR 审查请求,并在 Slack 中讨论它们——全部在一个 session会话中。当有人评论 PR 时agent 可以引用之前 Slack 中关于该功能的讨论。
**何时使用:** 当一个频道向另一个频道提供上下文时。Webhook/通知频道GitHub、Linear与聊天频道Slack、Discord配对是典型场景。
**技术实现:** 两个 messaging group消息组`session_mode: 'agent-shared'` 连接到同一个 agent group。Session 解析仅按 agent group ID 查找,忽略 messaging group——因此所有频道汇聚到同一个 session。
---
### 2. 相同 Agent独立 Session
多个频道共享同一个 agent相同工作区、记忆、个性但拥有独立的对话。
**共享的内容:** 工作区、记忆、CLAUDE.md 以及所有持久化状态。如果你在一个 session 中告诉 agent 某事,它可以将其保存到记忆中并在另一个 session 中调取。agent 的个性、知识和工具在各个 session 中完全相同。
**独立的内容:** 对话线程。来自一个频道的消息不会出现在另一个频道的 session 中。每个频道有自己的上下文窗口和对话历史。
**示例:** 你有三个与 agent 的 Telegram 聊天——一个用于副项目,一个用于个人任务,一个用于工作。三个聊天共享同一个 agent 工作区。如果你在项目聊天中要求它记住你的 API 密钥命名规范,它可能在工作聊天中也调用该规范。但对话本身是独立的。
**何时使用:** 当你是跨频道的主要(或唯一)参与者,并且希望统一的 agent 身份时。这是跨多个平台或多个群组进行个人使用的最常见设置。
**技术实现:** 多个 messaging group 以 `session_mode: 'shared'`(或 `'per-thread'`)连接到同一个 agent group。每个 messaging group 获得自己的 session但它们都在同一个 agent group 目录下运行。
---
### 3. 独立的 Agent Group
每个频道拥有自己的 agent拥有自己的工作区、记忆和个性。没有任何共享。
**共享的内容:** 无。这些 agent 彼此不知道对方的存在。不同的 CLAUDE.md不同的记忆不同的工作区不同的对话历史。
**示例:** 你有一个与朋友的 Telegram 群组,以及一个用于团队项目的 Discord 服务器。朋友不应该知道你和团队讨论了什么,反之亦然。每个都获得自己的 agent拥有自己的记忆和个性。
**何时使用:** 当涉及不同的人时,或者一个频道的信息永远不应泄露到另一个频道时。只要有隐私或保密边界,这就是正确的选择。
**技术实现:** 每个频道连接到不同的 agent group每个在 `groups/` 下有自己的目录。独立的容器,独立的 session 数据库,独立的一切。
---
## 如何决定
关键问题:**你是否能接受一个频道中的任何和所有信息在另一个频道中可用?**
- **不能** → 独立的 agent group级别 3
- **能,而且频道之间应该看到彼此的消息** → 共享 session级别 1
- **能,但对话应该独立** → 相同 agent独立 session级别 2
### 经验法则
| 场景 | 推荐级别 |
|----------|------------------|
| 仅你一人多个平台Telegram + Discord + Slack | 相同 agent独立 session |
| 仅你一人一个平台上的多个群组3 个 Telegram 聊天) | 相同 agent独立 session |
| Webhook 频道 + 聊天频道GitHub + Slack | 共享 session |
| 与朋友 A 的频道和与朋友 B 的频道 | 独立的 agent group |
| 个人频道和工作频道 | 独立的 agent group |
| 不同访问级别的团队频道 | 独立的 agent group |
### 不确定时
如果参与者在各频道相同 → 同一个 agent group 通常没问题。
如果涉及不同的人 → 独立的 agent group。否则信息会通过 agent 记忆交叉传播。
## 实体模型
```
agent_groups (工作区、记忆、CLAUDE.md、个性)
↕ 多对多
messaging_groups (平台上特定的频道/聊天/群组)
通过
messaging_group_agents (session_mode、trigger_rules、priority)
```
- **共享 session** 多个 messaging_groups → 同一个 agent_group`session_mode = 'agent-shared'`
- **相同 agent独立 session** 多个 messaging_groups → 同一个 agent_group`session_mode = 'shared'`
- **独立 agent** 每个 messaging_group → 不同的 agent_group