跳转至

动态智能体

每用户代理隔离:为每个 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",
  },
}

工作原理

当新用户发送第一条私信时:

  1. 通道会生成唯一的 agentId:默认账户为 feishu-{user_open_id},命名账户为带账户前缀的有界身份摘要
  2. 在 workspaceTemplate 路径创建新的工作区
  3. 注册该代理,并为此用户创建绑定
  4. 工作区辅助程序会在首次访问时确保引导文件(AGENTS.md、SOUL.md、USER.md 等)存在
  5. 将此用户后续的所有消息路由到其专属代理

配置选项

设置 描述 默认值
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

列出所有已创建的工作区:

ls -la ~/.openclaw/workspace-*

注意事项

  • 工作区隔离:每个用户拥有自己的工作区目录和代理实例。在正常消息流中,用户无法看到彼此的会话历史或文件。
  • 安全边界:这是一种消息上下文隔离机制,而不是针对恶意共租户的安全边界。代理进程和宿主环境是共享的。
  • 配置写入必须保持启用:动态代理创建会将代理和绑定写入配置;当 channels.feishu.configWrites 为 false 时会跳过(默认:启用)。
  • bindings 应为空:动态代理会自动注册自己的绑定
  • 升级路径:现有手动绑定可继续与动态代理一起工作
  • session.dmScope 是全局的:这会影响所有通道,而不仅仅是 Feishu

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw