Skip to main content
OpenClaw 首先是一个个人代理。开箱即用时,你发送给它的每一条直接消息——无论来自 Telegram、WhatsApp、iMessage、Slack 私信、Web 应用,还是其他任何地方——都会进入一个滚动会话:主会话。你可以在手机上提问,再从笔记本电脑上继续跟进,代理在两个地方都拥有相同的上下文。只有一个大脑,而这就是它思考的地方。 在底层,主会话是一个普通会话,其键为 agent:<agentId>:main(例如 agent:main:main)。它之所以特别, 是因为默认的 DM 范围会把所有直接消息都归并到这里,而且系统的其他部分会将其视为代理的根:心跳会唤醒它, 后台工作会向它回报,其他地方的活动也会汇总到它这里。

首页

在 Web 应用中,主会话是 首页 页面——侧边栏中的第一个入口。顶部的身份行是你的代理(点击它可打开代理菜单);首页是你与它对话的地方。分叉自主对话的会话会显示在 线程 下,群聊会显示在 群组 下,而编码/CLI 会话会显示在 编码 下。

什么会流入主会话

主会话不仅仅是聊天记录;它是你的代理的世界汇聚之处:
  • 群组活动。 群组和房间会话保持隔离(见下文),但在默认的 DM 范围下,主会话会自动监视它们。活动会以紧凑通知的形式排队——按每个对话合并,而不是每条消息都唤醒一次——并且代理会在下次运行时看到它们:在你的下一条消息到来时,或在计划的心跳触发时。代理也可以读取它所监视的会话——它的系统提示会列出这些会话——因此“我错过了家人群里什么吗?”这类问题是可行的。
  • 后台工作。 子代理和派生会话会把结果回报给启动它们的会话,因此代理从 Home 发起的工作会回报到 Home。
  • 心跳。 计划的心跳会以主会话为目标,这会在你没有写任何内容时,也能把队列中的通知转化为感知。

重置和会话之间的记忆

滚动对话受模型上下文窗口的限制,因此 连续性来自其周围的多层机制:
  • MEMORY.md,即代理精心整理的长期记忆,会在每个 新会话中加载。日常笔记(memory/YYYY-MM-DD.md)可按需搜索, 并且在 /new/reset 之后会重新预热最近的笔记。在压缩之前, 代理会将持久事实刷新到日常笔记中,这样长对话就不会无声地丢失它们。
  • 跨会话记忆回忆 允许代理回忆 其其他私有会话中的内容。在个人设置中——全局 session.dmScope 解析为 main 且没有每个绑定的 DM 覆盖——它 默认启用;任何已配置的 DM 隔离都会将其关闭,除非你显式选择启用。 参见 Memory configuration

一个带有持久历史记录的滚动会话

主会话会通过重置和压缩向前滚动,而不是让模型一次性承载其全部历史:
  • 默认情况下不会自动重置;压缩会在保持滚动会话的同时,将活动上下文限制在边界内。每日重置和空闲重置都是可选功能(参见 会话管理)。在 /new/reset 时,结束对话的尾部内容会保存到每日记忆笔记中,下一次会话会重新注入最近的笔记。重置会分配一个新的在线会话 id,但会让之前的 SQLite 对话记录在同一个主会话键下保持可搜索。
  • 当对话接近上下文窗口时,压缩会对其进行总结并在原处继续——对话记录历史仍保留在会话存储中。
  • 会话列表显示的是当前在线对话,而不是其背后每个历史会话 id。
  • 当每个代理的存储中的物理数据库、WAL 和会话工件超过磁盘预算(默认 10 GB)时,OpenClaw 会先将最早的未被引用历史提取到经过验证的压缩归档中,然后再移除其数据库行。在线、已路由和进行中的会话绝不会成为预算牺牲品。

何时改为使用隔离

共享主会话是默认的正确选择,适用于只有你与其对话的代理。如果有多人可以给你的代理发送消息,请隔离私信:
使用隔离作用域时,每个发送者都会获得自己的会话,来自主会话的群组监控将被禁用,并且跨对话记忆回忆默认关闭。openclaw security audit 在检测到多个私信发送者时会建议使用隔离。完整的作用域矩阵、身份关联以及按路由覆盖都在 会话管理通道路由 中进行了说明。

相关内容