
通过OpenClaw实现副业收入《OpenClaw赚钱实录从“养龙虾“到可持续变现的实践指南》会话管理OpenClaw 将每个智能体的一个直接聊天会话视为主要会话。直接聊天会折叠为agent::默认为main而群组/频道聊天则拥有各自的键。session.mainKey设置会被尊重。使用session.dmScope来控制**私信Direct Messages, DM**的分组方式main默认所有私信共享主会话以保持上下文连续性。per-peer按发送者 ID 跨频道隔离。per-channel-peer按频道 发送者隔离推荐用于多用户收件箱。per-account-channel-peer按账户 频道 发送者隔离推荐用于多账户收件箱。使用session.identityLinks将带有提供商标识前缀的对端 ID 映射到一个规范身份以便在使用per-peer、per-channel-peer或per-account-channel-peer时同一个人在不同频道上的私信会话可以共享。安全私信模式推荐用于多用户设置安全警告如果您的智能体可以接收来自多个用户的私信您应强烈考虑启用安全私信模式。如果不启用所有用户将共享相同的对话上下文这可能导致用户间的私人信息泄露。默认设置下问题的示例Alice向您的智能体发送了一条关于私人话题的消息例如一次医疗预约Bob向您的智能体询问“我们刚才在聊什么”由于两条私信共享同一个会话模型可能会使用 Alice 之前的上下文来回答 Bob。解决方案设置dmScope以按用户隔离会话// ~/.openclaw/openclaw.json { session: { // 安全私信模式按频道 发送者隔离私信上下文。 dmScope: per-channel-peer, }, }何时应启用此功能您已为多个发送者启用了配对批准您的私信白名单包含多个条目您设置了dmPolicy: open多个电话号码或账户可以向您的智能体发送消息注意事项默认值为dmScope: main以保证连续性所有私信共享主会话。这对于单用户设置是合适的。本地 CLI 引导流程在未设置时默认写入session.dmScope: per-channel-peer已存在的显式值会被保留。对于同一频道上的多账户收件箱建议使用per-account-channel-peer。如果同一个人通过多个频道联系您请使用session.identityLinks将其私信会话合并到一个规范身份下。您可以通过openclaw security audit命令验证您的私信设置参见 https://blog.csdn.net/hy592070616/article/details/81707766。网关是唯一数据源所有会话状态均由网关“主” OpenClaw 实例持有。UI 客户端macOS 应用、WebChat 等必须向网关查询会话列表和令牌计数而不是读取本地文件。在远程模式下您关心的会话存储位于远程网关主机上而非您的 Mac 上。UI 中显示的令牌计数来自网关存储中的字段inputTokens、outputTokens、totalTokens、contextTokens。客户端不会解析 JSONL 转录文件来“修正”总计数。状态存储位置在网关主机上存储文件~/.openclaw/agents//sessions/sessions.json每个智能体一份。转录文件~/.openclaw/agents//sessions/.jsonlTelegram 话题会话使用.../-topic-.jsonl。存储是一个sessionKey - { sessionId, updatedAt, ... }的映射。删除条目是安全的它们会在需要时被重新创建。群组条目可能包含displayName、channel、subject、room和space以便在 UI 中为会话添加标签。会话条目包含origin元数据标签 路由提示以便 UI 可以解释会话的来源。OpenClaw不会读取旧版 Pi/Tau 会话文件夹。维护OpenClaw 会对会话存储执行维护操作以确保sessions.json和转录文件随时间推移保持在合理范围内。默认值session.maintenance.mode:warnsession.maintenance.pruneAfter:30dsession.maintenance.maxEntries:500session.maintenance.rotateBytes:10mbsession.maintenance.resetArchiveRetention: 默认为pruneAfter(30d)session.maintenance.maxDiskBytes: 未设置禁用session.maintenance.highWaterBytes: 在启用磁盘预算时默认为maxDiskBytes的80%工作原理维护操作在会话存储写入期间运行您也可以通过openclaw sessions cleanup命令按需触发。mode: warn报告将被清理的内容但不修改条目/转录文件。mode: enforce按以下顺序应用清理清理早于pruneAfter的过期条目将条目数量限制在maxEntries以内优先清理最旧的为已移除且不再被引用的条目归档转录文件根据保留策略清除旧的*.deleted.和*.reset.归档当sessions.json大小超过rotateBytes时进行轮转如果设置了maxDiskBytes则根据highWaterBytes执行磁盘预算优先清理最旧的制品然后是最旧的会话大型存储的性能注意事项在高流量环境中大型会话存储很常见。维护工作是在写入路径上执行的因此非常大的存储可能会增加写入延迟。最增加成本的因素非常高的session.maintenance.maxEntries值较长的pruneAfter窗口导致过期条目长期保留~/.openclaw/agents//sessions/目录中存在大量转录/归档制品在没有合理修剪/上限限制的情况下启用磁盘预算maxDiskBytes应对措施在生产环境中使用mode: enforce以便自动限制增长同时设置时间和数量限制pruneAftermaxEntries而非仅设置其中之一在大型部署中为会话目录设置maxDiskByteshighWaterBytes以建立硬性上限保持highWaterBytes明显低于maxDiskBytes默认为 80%在更改配置后运行openclaw sessions cleanup --dry-run --json以在强制执行前验证预计影响对于频繁活动的会话在手动清理时传递--active-key参数自定义示例使用保守的强制策略{ session: { maintenance: { mode: enforce, pruneAfter: 45d, maxEntries: 800, rotateBytes: 20mb, resetArchiveRetention: 14d, }, }, }为会话目录启用硬性磁盘预算{ session: { maintenance: { mode: enforce, maxDiskBytes: 1gb, highWaterBytes: 800mb, }, }, }为大型安装进行调优示例{ session: { maintenance: { mode: enforce, pruneAfter: 14d, maxEntries: 2000, rotateBytes: 25mb, maxDiskBytes: 2gb, highWaterBytes: 1.6gb, }, }, }从 CLI 预览或强制执行维护openclaw sessions cleanup --dry-run openclaw sessions cleanup--enforce会话修剪OpenClaw 默认会在 LLM 调用之前从内存上下文中修剪旧的工具结果。这不会重写 JSONL 历史记录。参见 https://blog.csdn.net/hy592070616/article/details/81707766。预压缩内存刷新当会话接近自动压缩时OpenClaw 可以执行一次静默内存刷新提醒模型将持久性笔记写入磁盘。此操作仅在工作区可写时运行。参见 https://blog.csdn.net/hy592070616/article/details/81707766 和 https://blog.csdn.net/hy592070616/article/details/81707766。传输层到会话键的映射直接聊天遵循session.dmScope默认为main。main:agent::跨设备/频道的连续性。多个电话号码和频道可以映射到同一个智能体主键它们作为传输层进入同一个对话。per-peer:agent::direct:。per-channel-peer:agent:::direct:。per-account-channel-peer:agent::::direct:accountId 默认为default。如果session.identityLinks匹配了一个带有提供商标识前缀的对端 ID例如telegram:123规范键将替换 以便同一个人在不同频道上共享同一个会话。群组聊天隔离状态agent:::group:房间/频道使用agent:::channel:。Telegram 论坛话题会在群组 ID 后附加:topic:以实现隔离。旧版group:键仍被识别以支持迁移。入站上下文可能仍使用group:频道从Provider推断并规范化为标准的agent:::group:形式。其他来源定时任务cron:隔离或自定义session:持久Webhookhook:除非由 webhook 显式设置节点运行node-生命周期重置策略会话在过期前会被重复使用过期评估在下一条入站消息到达时进行。每日重置默认为网关主机本地时间凌晨 4:00。一旦会话的最后更新时间早于最近一次每日重置时间该会话即被视为过期。空闲重置可选idleMinutes添加一个滑动空闲窗口。当同时配置了每日和空闲重置时先到期的条件将触发新会话。旧版仅空闲模式如果您设置了session.idleMinutes但没有任何session.reset/resetByType配置OpenClaw 将出于向后兼容性保持在仅空闲模式。按类型覆盖可选resetByType允许您为direct、group和thread会话覆盖策略thread Slack/Discord 线程、Telegram 话题、连接器提供的 Matrix 线程。按频道覆盖可选resetByChannel为特定频道覆盖重置策略适用于该频道的所有会话类型并优先于reset/resetByType。重置触发器精确的/new或/reset以及resetTriggers中的任何额外项会启动一个新的会话 ID 并传递消息的其余部分。/new接受模型别名、provider/model或提供者名称模糊匹配来设置新会话模型。如果单独发送/new或/resetOpenClaw 会运行一个简短的“你好”问候回合以确认重置。手动重置从存储中删除特定键或移除 JSONL 转录文件下一条消息将重新创建它们。隔离的定时任务每次运行都会生成一个新的sessionId不进行空闲复用。发送策略可选阻止特定会话类型的投递而无需列出单个 ID。{ session: { sendPolicy: { rules: [ { action: deny, match: { channel: discord, chatType: group } }, { action: deny, match: { keyPrefix: cron: } }, // 匹配原始会话键包括 agent:: 前缀。 { action: deny, match: { rawKeyPrefix: agent:main:discord: } }, ], default: allow, }, }, }运行时覆盖仅限所有者/send on→ 允许此会话/send off→ 拒绝此会话/send inherit→ 清除覆盖并使用配置规则将这些作为独立消息发送以便注册生效。配置可选重命名示例// ~/.openclaw/openclaw.json { session: { scope: per-sender, // 保持群组键分离 dmScope: main, // 私信连续性为共享收件箱设置 per-channel-peer/per-account-channel-peer identityLinks: { alice: [telegram:123456789, discord:987654321012345678], }, reset: { // 默认值modedaily, atHour4网关主机本地时间。 // 如果同时设置了 idleMinutes则先到期的条件生效。 mode: daily, atHour: 4, idleMinutes: 120, }, resetByType: { thread: { mode: daily, atHour: 4 }, direct: { mode: idle, idleMinutes: 240 }, group: { mode: idle, idleMinutes: 120 }, }, resetByChannel: { discord: { mode: idle, idleMinutes: 10080 }, }, resetTriggers: [/new, /reset], store: ~/.openclaw/agents/{agentId}/sessions/sessions.json, mainKey: main, }, }检查openclaw status— 显示存储路径和最近的会话。openclaw sessions --json— 转储所有条目使用--active过滤。openclaw gateway call sessions.list --params {}— 从运行中的网关获取会话使用--url/--token访问远程网关。在聊天中发送/status作为独立消息以查看智能体是否可达、会话上下文的使用量、当前的思考/快速/详细切换状态以及 WhatsApp Web 凭据上次刷新的时间有助于发现需要重新链接的情况。发送/context list或/context detail以查看系统提示和注入的工作区文件内容以及最大的上下文贡献者。发送/stop或独立的中止短语如stop、stop action、stop run、stop openclaw以中止当前运行、清除该会话的排队后续操作并停止从中派生的任何子智能体运行回复中包含已停止的数量。发送/compact可选指令作为独立消息以总结较旧的上下文并释放窗口空间。参见 https://blog.csdn.net/hy592070616/article/details/81707766。JSONL 转录文件可以直接打开以审查完整的交互回合。提示将主键专用于 1:1 流量让群组保持各自的键。在自动化清理时删除单个键而不是整个存储以保留其他地方的上下文。会话来源元数据每个会话条目都会在origin中记录其来源尽力而为label人类可读标签从对话标签 群组主题/频道解析而来provider标准化的频道 ID包括扩展from/to入站信封中的原始路由 IDaccountId提供者账户 ID用于多账户时threadId当频道支持时的线程/话题 ID这些来源字段会为直接消息、频道和群组填充。如果连接器仅更新投递路由例如为了保持 DM 主会话的新鲜度它仍应提供入站上下文以便会话保留其解释性元数据。扩展可以通过在入站上下文中发送ConversationLabel、GroupSubject、GroupChannel、GroupSpace和SenderName并调用recordSessionMetaFromInbound或向updateLastRoute传递相同的上下文来实现这一点。