openclaw-easy-tutorial-zh-cn

Agent 与工作区:会话、队列与沙箱

读完这一节,你会搞清:工作区里那几份文件是怎么被「喂」给助手的会话存在哪、队列几种模式分别啥意思(你发多条消息时助手怎么处理),以及沙箱在什么场景下用、怎么配。适合已经改过配置、想细调「谁先跑、怎么跑、跑在哪儿」的你。


引导文件是怎么被「喂」进助手的

助手每次新会话的第一轮,OpenClaw 会把工作区里那几份 bootstrap 文件(AGENTS.md、SOUL.md、USER.md、IDENTITY.md、TOOLS.md 等)的内容直接塞进助手的上下文里,相当于「一上来就告诉助手:你是谁、规矩是啥、用户是谁」。这就是注入(inject):不是助手自己去读文件,而是 Gateway 在发请求给模型前,先把这些内容拼进提示里。

子会话(例如子 Agent)一般只注入 AGENTS.md 和 TOOLS.md 等部分文件,主会话才会注入完整一套;细节见官方 Agent runtime


会话:存在哪、怎么区分

一次连续对话从开始到结束,在 OpenClaw 里算一个会话(Session)。每个会话有一个稳定 ID,由 OpenClaw 分配。

你一般不用直接去改这些 JSONL;只是要知道:会话 = 一段连续对话的完整记录,存在上述路径下,重启 Gateway 也不会丢(除非你删掉或换了状态目录)。


队列模式:你连发多条消息时助手怎么处理

当你在飞书、Telegram 或控制台里连续发多条消息时,Gateway 不会同时开多个「助手轮」乱抢,而是通过一个队列把请求串起来或按规则合并。具体行为由队列模式决定,你可以在配置里设默认,也可以在某些渠道里单独设。

可以简单理解成三种常见模式:

模式 含义(通俗说)
steer 新消息立刻插进当前这一轮:助手正在干活时收到新消息,会在「下一个合适的位置」停下当前计划,转去处理新消息。适合你希望「发一句就能打断/改方向」的场景。
followup 新消息不插队,等当前这一轮完全结束后,再开新的一轮,用新消息当输入。适合不想打断、一条一条排队处理。
collect 多条新消息先攒着,等当前轮结束后,把攒着的多条合并成一条再交给助手(可配 debounce,避免「继续继续」刷屏)。默认很多渠道用的是 collect。

还有 steer-backlog(既立刻 steer,又保留一份给下一轮,可能看起来像「回了两次」)、interrupt(直接中止当前轮,只处理最新一条)等,详见官方 Queue

配置示例(全局默认 + 按渠道覆盖):

{
  messages: {
    queue: {
      mode: "collect",
      debounceMs: 1000,
      cap: 20,
      drop: "summarize",
      byChannel: { discord: "collect" },
    },
  },
}

沙箱:什么时候用、怎么配

默认情况下,助手的工具(读文件、执行命令、写文件等)是直接在你运行 Gateway 的本机上执行的。若你希望把「执行」关进一个隔离环境,减少误操作或恶意指令的影响,可以用 沙箱(Sandbox):OpenClaw 用 Docker 容器跑工具,让文件、进程都限制在容器里。

沙箱需要本机有 Docker,并先按官方文档构建沙箱镜像(如 openclaw-sandbox:bookworm-slim)。若你不需要隔离,可以不开沙箱,工具照常在本机跑。


多工作区:多 Agent 与沙箱里的「每会话工作区」


本节要点


常见问题

Q:改了 AGENTS.md 但助手好像没按新规矩来?
引导文件只在新会话的第一轮注入;若你是在已有会话里继续聊,当前会话已经用过旧内容了。新开一个会话(新对话或刷新后重聊)才会读到最新文件。

Q:队列模式在哪儿设?
全局在配置里 messages.queue.modemessages.queue.byChannel.<渠道>;当前会话也可用 /queue collect/queue steer 等(取决于渠道是否支持)。

Q:开了沙箱后助手说找不到工作区里的文件?
workspaceAccessnone,沙箱里根本没有挂你的工作区,只有沙箱自己的临时目录。需要读工作区时改为 rorw(注意 rw 会让助手在沙箱里改你真实工作区)。

Q:多 Agent 时每个助手的工作区路径怎么设?
agents.list[] 里给每个 agent 设 workspace(或用 agentDir 等);详见 Multi-Agent 和本教程 3.1。


延伸阅读

← 返回目录