动态智能体
每用户代理隔离:为每个 Feishu 私信发送者提供独立的工作区、引导文件和会话历史。
每用户代理隔离(动态代理创建)¶
启用 dynamicAgentCreation,可为每个私信用户自动创建隔离的代理实例。每个用户将获得自己的:
- 独立的工作区目录
- 独立的
USER.md/SOUL.md/MEMORY.md - 私有的会话历史
- 隔离的技能与状态
对于公共机器人,若希望每个用户拥有自己的私有 AI 助手体验,这一点至关重要。
Note
动态绑定包含规范化后的 Feishu accountId,因此默认账户和命名账户会将每个发送者路由到正确的动态代理。
如果命名账户在较早版本中创建了无作用域的动态代理,该遗留代理仍会计入 maxAgents。在删除它之前,请确认默认账户未使用它;或者临时增大 maxAgents。OpenClaw 无法安全地推断模糊的遗留状态属于哪个账户。
快速设置¶
{
channels: {
feishu: {
dmPolicy: "open",
allowFrom: ["*"],
dynamicAgentCreation: {
enabled: true,
workspaceTemplate: "~/.openclaw/workspace-{agentId}",
agentDirTemplate: "~/.openclaw/agents/{agentId}/agent",
},
},
},
session: {
// Critical: makes each user's DM their "main session"
// Automatically loads USER.md / SOUL.md / MEMORY.md
// For stronger isolation, use "per-channel-peer" instead
dmScope: "main",
},
}
工作原理¶
当新用户发送第一条私信时:
- 通道会生成唯一的
agentId:默认账户为feishu-{user_open_id},命名账户为带账户前缀的有界身份摘要 - 在
workspaceTemplate路径创建新的工作区 - 注册该代理,并为此用户创建绑定
- 工作区辅助程序会在首次访问时确保引导文件(
AGENTS.md、SOUL.md、USER.md等)存在 - 将此用户后续的所有消息路由到其专属代理
配置选项¶
| 设置 | 描述 | 默认值 |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled |
启用自动的每用户代理创建 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
动态代理工作区的路径模板 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
代理目录名称模板 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
可创建动态代理的最大数量 | 无限制 |
模板变量:
{agentId}- 生成的代理 ID(例如feishu-ou_xxxxxx或feishu-support-<identity_digest>){userId}- 发送者的 Feishu open_id(例如ou_xxxxxx)
会话范围¶
session.dmScope 控制私信如何映射到代理会话。这是一个全局设置,会影响所有通道。
| 值 | 行为 | 适用于 |
|---|---|---|
"main" |
每个用户的私信映射到其代理的主会话 | 希望自动加载 USER.md / SOUL.md 的单用户机器人 |
"per-peer" |
每个对端获得独立会话(无论通道) | 仅按发送者身份进行隔离 |
"per-channel-peer" |
每个(通道 + 用户)组合获得独立会话 | 需要更强隔离的公共多用户机器人 |
"per-account-channel-peer" |
每个(账户 + 通道 + 用户)组合获得独立会话 | 需要账户级会话隔离的多账户机器人 |
权衡:使用 "main" 可启用引导文件自动加载(USER.md、SOUL.md、MEMORY.md),但意味着所有通道中的所有私信共享相同的会话键模式。对于隔离比引导文件自动加载更重要的公共多用户机器人,请考虑使用 "per-channel-peer",并手动管理引导文件。
Note
当命名 Feishu 账户需要为同一发送者保持独立会话时,请使用 "per-account-channel-peer"。动态绑定会保留账户作用域。
典型多用户部署¶
{
channels: {
feishu: {
appId: "cli_xxx",
appSecret: "xxx",
dmPolicy: "open",
allowFrom: ["*"],
groupPolicy: "open",
requireMention: true,
dynamicAgentCreation: {
enabled: true,
workspaceTemplate: "~/.openclaw/workspace-{agentId}",
agentDirTemplate: "~/.openclaw/agents/{agentId}/agent",
},
},
},
session: {
// Choose dmScope based on your isolation needs:
// "main" for bootstrap auto-loading, "per-channel-peer" for stronger isolation
dmScope: "main",
},
bindings: [], // Empty - dynamic agents auto-bind
}
验证¶
检查网关日志,以确认动态创建正在工作:
feishu: creating dynamic agent "feishu-ou_xxxxxx" for user ou_xxxxxx
workspace: /home/user/.openclaw/workspace-feishu-ou_xxxxxx
agentDir: /home/user/.openclaw/agents/feishu-ou_xxxxxx/agent
列出所有已创建的工作区:
注意事项¶
- 工作区隔离:每个用户拥有自己的工作区目录和代理实例。在正常消息流中,用户无法看到彼此的会话历史或文件。
- 安全边界:这是一种消息上下文隔离机制,而不是针对恶意共租户的安全边界。代理进程和宿主环境是共享的。
- 配置写入必须保持启用:动态代理创建会将代理和绑定写入配置;当
channels.feishu.configWrites为false时会跳过(默认:启用)。 bindings应为空:动态代理会自动注册自己的绑定- 升级路径:现有手动绑定可继续与动态代理一起工作
session.dmScope是全局的:这会影响所有通道,而不仅仅是 Feishu
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw